WebView UWP 中的平滑 scrollTo
Smooth scrollTo in WebView UWP
WebView UWP 中的 scrollTo 可以通过以下方式实现:
private string ScrollToTopString = @"window.scrollTo(0,0);";
private async void ButtonClick(object sender, RoutedEventArgs e)
{
await WebViewTest.InvokeScriptAsync("eval", new string[] { ScrollToTopString });
}
但是 animated/Smooth 在 WebView UWP 中滚动怎么样?在 Android 中,这是通过官方实现或通过变体实现的(例如,使用 android.animation.ObjectAnimator),而在 UWP 中,据我所知似乎只有 ScrollViewer 支持它。 Example 2
有什么想法吗?
您不能为 WebView
设置动画,因为 WebView
本身实际上并没有滚动,就像您的浏览器实际上没有滚动一样;滚动的是 "window" 元素。
但是,如果我正确理解您的需求,只需将您的 ScrollToTopString
替换为:
var ScrollToTopString = @"var int = setInterval(function() {
window.scrollBy(0, -5);
if( window.pageYOffset === 0 )
clearInterval(int);
}, 1);";
这将滚动我提到的 "window" 元素。您可以提高间隔的速度(我将其设置为 1)以减慢动画速度,或降低 scrollBy
的值以使其运行得更快。
WebView UWP 中的 scrollTo 可以通过以下方式实现:
private string ScrollToTopString = @"window.scrollTo(0,0);";
private async void ButtonClick(object sender, RoutedEventArgs e)
{
await WebViewTest.InvokeScriptAsync("eval", new string[] { ScrollToTopString });
}
但是 animated/Smooth 在 WebView UWP 中滚动怎么样?在 Android 中,这是通过官方实现或通过变体实现的(例如,使用 android.animation.ObjectAnimator),而在 UWP 中,据我所知似乎只有 ScrollViewer 支持它。
有什么想法吗?
您不能为 WebView
设置动画,因为 WebView
本身实际上并没有滚动,就像您的浏览器实际上没有滚动一样;滚动的是 "window" 元素。
但是,如果我正确理解您的需求,只需将您的 ScrollToTopString
替换为:
var ScrollToTopString = @"var int = setInterval(function() {
window.scrollBy(0, -5);
if( window.pageYOffset === 0 )
clearInterval(int);
}, 1);";
这将滚动我提到的 "window" 元素。您可以提高间隔的速度(我将其设置为 1)以减慢动画速度,或降低 scrollBy
的值以使其运行得更快。