当你将鼠标悬停在div上时,我正试图让我的页面滚动。这是我到目前为止所得到的
$(document).ready(function() {
$("#hoverscroll").mouseover(function() {
var div = $('body');
setInterval(function(){
var pos = div.scrollTop();
div.scrollTop(pos + 1);
}, 100)
});
});
然而,还有两件事要做。我需要它在每次单击时提高速度,在不再悬停时停止并将速度重置为默认值。
我正在努力实现这样的目标:
$(document).ready(function() {
$("#hoverscroll").mouseover(function() {
var div = $('body');
setInterval(function(){
var count = 1;
var pos = div.scrollTop();
div.scrollTop(pos + count);
}, 100)
});
$("#hoverscroll").click(function() {
if (count < 6) {
count = count+1;
}
});
$("#hoverscroll").mouseleave(function() {
count = 0;
});
});
我搜索并发现有些人在谈论绑定事件并设置一个全局变量来检查它是否在滚动。但上述功能会起作用吗?我仍在学习。我可能完全错了。
答案 0 :(得分:8)
你非常接近 - 这是我的版本(http://jsfiddle.net/Lcsb6/)
$(document).ready(function() {
var count;
var interval;
$("#hoverscroll").on('mouseover', function() {
var div = $('body');
interval = setInterval(function(){
count = count || 1;
var pos = div.scrollTop();
div.scrollTop(pos + count);
}, 100);
}).click(function() {
count < 6 && count++;
}).on('mouseout', function() {
// Uncomment this line if you want to reset the speed on out
// count = 0;
clearInterval(interval);
});
});
注意事项:
count
定义在区间/绑定之上。从某种意义上来说,它不是那么“全球化”,你可以在窗口中看到它,但它会降级为生活在onReady闭包内。interval
是setInterval
的指定值 - 这样我们就可以阻止它稍后使用clearInterval
mouseleave
,但mouseout
应该这样做。$('#hoverscroll').on(...).click(...).on(...).addClass(...).blah(...)
每次都可以节省您输入选择器的时间。另外,如果您打算使用链接,请查看jQuery的end()
方法。$.fn.on
而不是像.click()
这样的缩写 - 它清楚地表示您正在使用事件处理程序,考虑为on
投入额外的几个字符并删除$()
选项中多余的字符?答案 1 :(得分:2)
你离解决方案的距离不远。您需要将interval
或timeout
分配给变量,并在悬停元素时将其清除:
$(function () {
var speed = 1,
timer;
$("#hoverscroll").hover(function () {
var div = $('body');
(function startscrolling(){
timer = setTimeout(function () {
var pos = div.scrollTop();
div.scrollTop(pos + speed);
startscrolling();
}, 100);
})();
},
function () {
clearTimeout(timer);
speed = 1;
})
.click(function(){
if (speed < 6) speed++;
});
});
答案 2 :(得分:0)
尝试跟随您的小提琴代码:
$(document).ready(function() {
$("#hoverscroll").mouseover(function() {
var div = $('body');
setInterval(function(){
var pos = $("#hoverscroll").postion().top;
window.scrollTo(0, pos + 1)
},500);
});
});
看到这个小提琴:http://jsfiddle.net/3yJVF/5/
答案 3 :(得分:0)
我更新了已接受问题的代码,因为它不再起作用了。
见:
$(document).ready(function() {
var count;
var interval;
$("#hoverscroll").on('mouseover', function() {
var div = $('#container');
interval = setInterval(function(){
count = count || 1;
var pos = div.scrollTop();
div.scrollTop(pos + count);
}, 100);
}).click(function() {
if (count < 6) {
count = count+1;
}
}).on('mouseout', function() {
// reset the speed on out
count = 0;
clearInterval(interval);
});
})
;