【发布时间】:2014-05-15 04:30:58
【问题描述】:
我一直在编写一个小脚本,用于缩短在我的 JSON 提要上输出的文档。
我意识到,对于较长的消息,在最小化时可能会跳过一些,您必须向后滚动才能找到您所在的位置,因此添加了一个滚动功能,以便在缩小时将您带回到消息的顶部。当它每次触发时,这结果很烦人 - 所以我想,为什么不让它只在元素顶部位于屏幕上方时触发呢?
这就是我被卡住的地方 --> $(window).scrollTop(); 根本不想为我输出屏幕高度,这真让人生气。我尝试了不同的浏览器,唯一能正常工作的 .scrollTop() 是 Internet Explorer。
下面是函数:
function jexpand(id){
var elm=$('#d'+jdesc[id].i); // element
var ofs=elm.offset().top; // element height - works fine
var top=$(window).scrollTop(); // Y U NO WORK?!!!
if(jdesc[id].e==true){ // boolean to check whether to expand or contract
jdesc[id].e=false; // change boolean flag
if(ofs < top) $('html').animate({scrollTop:($('#'+jdesc[id].i).offset().top)-(20)+'px'},'slow'); // animate to top minus 20 pixels
elm.html(jdesc[id].d.substring(0,347)+'...<br><div class="readmore"><span id="'+id+'">Show More</span></div>');
}else{
jdesc[id].e=true;
elm.html(jdesc[id].d+'<br><div class="readmore"><span id="'+id+'">Show Less</span></div>');
}
$('.readmore span').click(function(){jexpand(this.id)}); // reset click trigger
//alert(top+' <-> '+ofs);
}
当我在 IE 以外的浏览器(我尝试过 chrome、mozilla、chrome android、boat browser android)中取消注释底部的 alert() 时,我收到类似于以下内容的消息:
[object Window] <-> 1077.5625
[object Window] 显然不是一个可以大于或小于元素高度的数字!那么这是什么意思,我还需要问另一个标志吗?起初我认为它可能是我引用的错误元素,所以尝试了top=$('body').scrollTop();、html 等,我什至尝试使用 div 包装器元素但无济于事。
我正在使用 jquery 1.11.0 和 1.9.1 我遇到了同样的问题。
我是否试图以错误的方式返回屏幕顶部,或者我的所有浏览器都出现了循环?
编辑:
奇怪的是,我发现了一个可以解释一些事情的问题,当我在控制台中输入 $(document).scrollTop() 时,它给了我正确的屏幕高度,但是如果我在函数之外创建 var top;我收到此错误'window.webkitStorageInfo' is deprecated. Please use 'navigator.webkitTemporaryStorage' or 'navigator.webkitPersistentStorage' instead.。
我正在使用从 html5up 借来的 webkit,这会以某种方式干扰代码。现在来看看它是什么......
抱歉给您带来了困惑,没有这个脚本一切正常...
【问题讨论】:
-
尝试使用
console.log(top);来控制它 -
你那里有一种不可读的代码......顺便说一句,你的评论在这里看起来不对:
$('.readmore span').click(function(){jexpand(this.id)}); // reset click trigger这不会重置点击处理程序,这会绑定一个新的处理程序而不删除任何以前的处理程序。顺便说一句,您每次点击都会一次又一次地调用相同的功能 -
Rohan,在控制台中我得到这个回复:
"window.webkitStorageInfo' is deprecated. Please use 'navigator.webkitTemporaryStorage' or 'navigator.webkitPersistentStorage' instead. -
如果你在声明
top变量之后加上alert(),结果是什么?我不明白为什么你能得到你说的结果。您应该尝试在 jsFiddle 上复制您的问题
标签: javascript jquery