【发布时间】:2011-04-01 15:34:24
【问题描述】:
我想在滚动结束后立即调用一个函数。我尝试了 load 各种不同的东西,但都没有奏效,然后我在 SO 中找到了这个解决方案:
How do I know when I've stopped scrolling Javascript
我仔细查看了第二个答案并尝试了它 - 它有效。然后我试着为了我的目的稍微改变它。所以现在整个shebang看起来像这样:
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Do something after scroll ends</title>
<style type="text/css">
#scrollableDiv{
width:500px;
height:100px;
overflow:scroll;
}
#someContent{
width:600px;
height:200px;
}
</style>
<script type="text/javascript" src="scripts/jquery-1.5.1-min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#scrollableDiv').bind('scroll', bodyScroll);
var scrollTimer = -1;
function bodyScroll() {
console.log('scrolling.');
if (scrollTimer != -1)
clearTimeout(scrollTimer);
scrollTimer = window.setTimeout('scrollEnded()', 500);
};
function scrollEnded(){
console.log('scrollEnded. Now do something astounding.');
};
});
</script>
</head>
<body>
<div id="scrollableDiv">
<div id="someContent">
Scroll me.
</div>
</div>
</body>
</html>
当我运行它时,会触发滚动事件(太棒了!)。
然后,不是调用我的“scrollEnded()”函数,而是生成一个错误:“scrollEnded 未定义”。我试图通过进入调试模式并单步执行脚本来弄清楚这是从哪里来的,但随后我进入了一个“匿名函数”——这是我目前对这个问题的理解的极限。我尝试将 scrollEnded() 函数移到顶部。我已经尝试了各种各样的东西......
我可以做些什么来完成这项工作? (可以这个东西工作吗?)
【问题讨论】:
-
请不要将字符串传递给
setTimeout和setInterval。是变相的eval,每次你eval,忍者都会杀死一只可爱的小动物。
标签: javascript jquery scroll