Javascript 如何检测需要滚动哪个元素体或html
在Fireofx和IE中,要获得scrollTop,需要从html中获取,在chrome中需要从body元素获取 有没有一种不用浏览器嗅探就能检测到的方法Javascript 如何检测需要滚动哪个元素体或html,javascript,Javascript,在Fireofx和IE中,要获得scrollTop,需要从html中获取,在chrome中需要从body元素获取 有没有一种不用浏览器嗅探就能检测到的方法 var html=document.querySelector('html'); var body=document.querySelector('body'); var input=document.querySelector('input'); addEventListener('scroll',function(){ input.va
var html=document.querySelector('html');
var body=document.querySelector('body');
var input=document.querySelector('input');
addEventListener('scroll',function(){
input.value=html.scrollTop+“”+body.scrollTop;
});代码>
正文{
高度:1000px;
}
输入{
位置:固定;
顶部:10px;
}
你能测试其中一个的真实性吗(假设0
表示不存在)
函数getScrollTop(){
返回html.scrollTop | | body.scrollTop | 0;
}
var html=document.querySelector('html');
var body=document.querySelector('body');
var input=document.querySelector('input');
addEventListener('scroll',function(){
input.value=getScrollTop();
});代码>
正文{
高度:1000px;
}
输入{
位置:固定;
顶部:10px;
}
您只需检查html.scrollTop
和body.scrollTop
的值:
如果
它们都是0,则滚动顶部为0
使用!如果它的值等于零或未定义,scrollTop将返回true
如果
html.scrollTop
大于0
(存在)则小于则scrollTop为html.scrollTop
否则,如果主体。scrollTop
大于0
(chrome)大于scrollTop主体。scrollTop
在本例中,我将scrolltop值存储在一个名为myScrollTop
var myScrollTop
if (!html.scrollTop && !body.scrollTop) {
myScrollTop = 0
} else if (html.scrollTop) {
myScrollTop = html.scrollTop
} else if (body.scrollTop) {
myScrollTop = body.scrollTop
}
console.log(myScrollTop())
您还可以将代码包装到函数中,并将值返回给调用方
function myScrollTop() {
if (!html.scrollTop && !body.scrollTop) {
return 0
} else if (html.scrollTop) {
return html.scrollTop
} else if (body.scrollTop) {
return body.scrollTop
}
}
或者更简短的版本
function myScrollTop() {
return html.scrollTop || body.scrollTop || 0
}
现在,您可以通过调用myScrollTop()
如果生活很简单,那么可以使用此事件处理程序属性。但是IE在没有浏览器支持的情况下,在工作中使用了扳手。如果IE不可用,你当然可以编写一些代码来绕过IE
if (!('scrollingElement' in document)) (function() {
alert('IE is a pain in the arse');
}
window.addEventListener('scroll', function(event) {
alert(event.scrollingElement);
});
我想出了这个方法,它添加了触发scrollbar的预标记,设置scrollTop并检查它更改了哪些元素:
var html=$('html');
变量body=$('body');
var scrollTop=body.scrollTop()| | html.scrollTop();
var pre=$('').appendTo('body');
html(新数组(1000).join('\n'));
$('body,html').scrollTop(10);
变量对象;
if(body.scrollTop()==10){
console.log('body');
滚动对象=身体;
body.scrollTop(scrollTop);
}else if($('html').scrollTop()==10){
log('html');
scrollObject=html;
html.scrollTop(scrollTop);
}
pre.remove()代码>
对不起,我没有提到我还想从代码中更改scrollTop,这是我需要检测滚动哪个元素的方式。@jcubic检查我的编辑。其主要思想是在页面加载时手动触发一个滚动,以确定更改了哪个属性,然后使用该信息创建一个函数,在需要时更新正确的属性。哇,我的wekit userAgent检查要简单得多。它不需要滚动事件就可以工作,但无论如何还是要感谢你。是的,这绝对是一个更简单的选择,我只是按照你的要求建议了另一种方法:)虽然你可能已经解决了这个用户的问题,但代码式的答案对将来遇到这个问题的用户来说并没有多大帮助。请编辑您的答案,以解释代码解决原始问题的原因。完成后,将在以后的答案中尝试解释更多内容。谢谢你的评论。