在jquery中 因为animate()是有延时的 所以有时候会超出范围 怎样设定超出后阻止事件继续执行?
是一个页面上可以用鼠标滚轮控制的滚动菜单菜单是ul,li用绝对定位id是"#menu_ul",菜单外部div大小固定,超出部分隐藏id是"#menu_div"我使用了mo...
是一个页面上可以用鼠标滚轮控制的滚动菜单
菜单是ul,li 用绝对定位 id 是 "#menu_ul",
菜单外部div大小固定,超出部分隐藏 id 是 "#menu_div"
我使用了mousewheel插件 监听了 "#menu_div" 上的鼠标滚轮事件,控制 "#menu_ul" top属性
简单代码也就是
$("#menu_div").mousewheel(function( ){
$("#menu_ul").animate({"top": "+=35px"},100);
})
但是我想限制一下top不能大于350px
于是我加了条件
$("#menu_div").mousewheel(function( ){
var topvalue=$("#menu_ul").position().top;
if(topvalue<350)
$("#menu_ul").animate({"top": "+=35px"},100);
})
但是因为animate是在100毫秒之后 top 值才能加到35px,在100毫秒内值是不固定的
所以如果频繁滚动滚轮的话值可能会超过350
请问怎么解决这种问题 展开
菜单是ul,li 用绝对定位 id 是 "#menu_ul",
菜单外部div大小固定,超出部分隐藏 id 是 "#menu_div"
我使用了mousewheel插件 监听了 "#menu_div" 上的鼠标滚轮事件,控制 "#menu_ul" top属性
简单代码也就是
$("#menu_div").mousewheel(function( ){
$("#menu_ul").animate({"top": "+=35px"},100);
})
但是我想限制一下top不能大于350px
于是我加了条件
$("#menu_div").mousewheel(function( ){
var topvalue=$("#menu_ul").position().top;
if(topvalue<350)
$("#menu_ul").animate({"top": "+=35px"},100);
})
但是因为animate是在100毫秒之后 top 值才能加到35px,在100毫秒内值是不固定的
所以如果频繁滚动滚轮的话值可能会超过350
请问怎么解决这种问题 展开
2个回答
展开全部
//这个语句改下
$("#menu_ul").animate({"top": "+=35px"},100);
//先判断增加35后的值,如果超过350,就等于350,就不怕了
divTop=parseInt($("#menu_ul").css('top').replace('px', ''))+35;
if(divTop>350)divTop=350;
$("#menu_ul").stop().animate({"top": divTop},100);
更多追问追答
追问
这个方法是很好 和$().stop() 是一样的效果 就是执行滚动脚本快的话反而更慢
有没有办法是监听 #menu_ul 的 top变化而不是在 滚轮滑动时做判断?
追答
就是执行滚动脚本快的话反而更慢
听不懂这句
监听top的变化,肯定是没有这个方法执行效率高的
//用interval每个10毫秒监听一次,这个时间需要你自己调试下
scrollTimer=setInterval("banTop()", 10)
//在适当的时候,去除这个interval
clearInterval(scrollTimer);
function banTop()
{
if(parseInt($('#menu_ul:animated').css('top').replace('px', ''))>=350)
$("#menu_ul").stop().css('top', 350);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询