Javascript jQuery scrollTop()在移动浏览器上的滚动DIV中不起作用,其他选择?
我正在尝试滚动到滚动分区中的特定位置。现在我正在使用jQuery scrollTop()函数的像素偏移量,该函数在桌面浏览器上非常有效,但在android手机浏览器上不起作用,除了谷歌的Chrome android浏览器(没有iOS设备来测试它是否有效)。我找到的所有解决方案都是用于页面(窗口)滚动,而不是用于在DIV中滚动,有人对我还可以使用什么来完成相同的任务有什么建议吗 下面是一个例子:Javascript jQuery scrollTop()在移动浏览器上的滚动DIV中不起作用,其他选择?,javascript,jquery,html,scroll,mobile-browser,Javascript,Jquery,Html,Scroll,Mobile Browser,我正在尝试滚动到滚动分区中的特定位置。现在我正在使用jQuery scrollTop()函数的像素偏移量,该函数在桌面浏览器上非常有效,但在android手机浏览器上不起作用,除了谷歌的Chrome android浏览器(没有iOS设备来测试它是否有效)。我找到的所有解决方案都是用于页面(窗口)滚动,而不是用于在DIV中滚动,有人对我还可以使用什么来完成相同的任务有什么建议吗 下面是一个例子: 我在桌面浏览器中尝试过的其他方法: document.getElementById('ID_of_
我在桌面浏览器中尝试过的其他方法:
document.getElementById('ID_of_element_in_a_DIV').scrollIntoView();
document.getElementById('ID_of_DIV').scrollTop = 200;
2013年11月3日编辑:
这是一个已知的android浏览器问题:
bug报告中的一位用户建议了一种解决方法:
因为问题似乎只在溢出属性为
设置为滚动,您可以先将其设置为“隐藏”,然后设置滚动顶部
属性,然后将其重置回“滚动”(或自动)。滚动顶部
属性似乎在使用重新呈现元素时得到尊重
滚动条。目前尚不清楚这是否有任何意外的副作用,
但是“它在我的机器上工作!”
我有一些解决方案供你尝试。您必须自己测试它们,因为我以前没有在移动浏览器中尝试过它们,但它们如下所示:
.css()
方法(或.animate()
,具体取决于您的最终目标)调整顶部边距(注意:您必须将溢出更改为隐藏,并将文本包装在一个内部div中,该div将是要调整其边距的元素)top
属性请注意,尽管我在基于CSS标准(而非jQuery函数)之前没有在mobile中测试过这些功能,但它们应该可以工作。一个对我有效的工作环境:首先,暂时将overflow属性设置为“hidden”,然后设置scrollTop属性,然后将overflow属性设置回“scroll”(或auto)。当overflow属性设置回“scroll”时,scrollTop值似乎保持不变并得到尊重。这是一个非常简单的解决方法,适用于我测试的所有浏览器(桌面和移动)。我没有对它进行详尽的测试,也没有在适当的位置进行转换测试,所以可能会有我没有遇到的副作用。。。您的里程数可能会有所不同,但这很容易尝试。尝试使用jQuery的。动画方法:
$('.div').animate({ scrollTo: x; });
其中x等于要滚动到其顶部的div的位置。是否尝试了此操作
$("html").scrollTop(0);
我也遇到了同样的问题,通过使用jquery
.offset()
解决了这个问题
jQuery(文档).ready(函数($){
$(“.scroll”)。单击(函数(事件){
event.preventDefault();
$('html,body').animate({scrollTop:$(this.hash.offset().top},1500);
});
});
按照@Allan Nienhuis'答案中的建议,临时将溢出
属性设置为“隐藏”,在Android4.0.3
上不起作用,例如(例如,Kindle Fire 2s正在运行的内容)-当您将溢出
设置回滚动时,元素会滚动回顶部
备选方案:
- 通过一个助手函数滚动您自己的滚动,正如所演示的-虽然这很容易实现,但它是简单的,因为它不会给您惯性滚动或过度滚动
- 使用一个库,例如,它基于CSS转换实现自己的复杂滚动(惯性滚动、过滚动)
不过,使用iScroll需要一些设置:您需要一个高度和样式固定的包装器div
overflow:hidden
,要滚动的元素应该没有overflow
样式。显示它是如何完成的。使用以下代码:
$("body").animate( { scrollTop: 50, }, 800, function(){
$("body").clearQueue();
} );
这对我很有用:
setTimeout( function() {
$(div).scrollTop(0)
}, 500 );
我在这里找到了答案
手机不理解$('html,body')
,所以你可以对手机执行以下操作
if(navigator.userAgent.match(/(iPod|iPhone|iPad|Android)/)) {
window.scrollTo(0)
} else {
// default `$('html,body')` code for scrolling
}
或
只需使用$('body')
而不是$('html,body')
在Galaxy选项卡上实现滚动到页面顶部的唯一方法是在滚动时将页面body
隐藏100毫秒。使用jQuery:
$("body").hide();
window.scrollTo(0, 0);
setTimeout(function(){ $("body").show() }, 100);
我建议不要使用scroll、scrollTo或scrollTop方法(这会在mobile中给我带来问题),而是在顶级DOM元素(如#top)上设置一个ID,然后只使用:
document.getElementById("top").scrollIntoView();
到目前为止,这在所有设备和浏览器中都是最适合我的解决方案。这些解决方案不适合我。我知道有人提到移动检测,但他们的方法对我不起作用。我终于明白了使用移动检测为每个案例提供两种不同的CSS样式。也许不太理想,但它确实有效。用上面建议的js临时更改样式对我来说不起作用
我有一个独立滚动div的两列布局,每个div都设置为overflow:scroll,body必须设置为overflow:hidden。我需要在其中一列上使用scrollTop,但解决方案无效
我使用了wp_is_mobile()(Wordpress函数),如果mobile为true,则从body中删除overflow:hidden,并删除带有overflow:scroll的div。最后,scrollTop可以在手机上使用。它可以在IOS上使用safari和ChromeF。对于需要滚动整个文档的用户(如我),可以使用$(“body”)。scrollTop(0)在html或div元素上尝试不起作用。我在三星Galaxy S3的内置浏览器中尝试过,效果很好。嘿,很高兴看到这里引用了我的解决方法。:)这种变通方法似乎仍然是我发现的让它在r中工作的唯一方法
$("body").hide();
window.scrollTo(0, 0);
setTimeout(function(){ $("body").show() }, 100);
document.getElementById("top").scrollIntoView();