在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
请问怎么解决这种问题
展开
 我来答
Vi_Q
推荐于2017-11-29 · TA获得超过1163个赞
知道小有建树答主
回答量:675
采纳率:0%
帮助的人:598万
展开全部
//这个语句改下
$("#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);
}
潇浪yy
2013-11-01 · 超过23用户采纳过TA的回答
知道答主
回答量:91
采纳率:0%
帮助的人:51.5万
展开全部
在执行滚动效果之前执行一下:$("#menu_ul").stop();用于停止当前对象的所有动态效果
追问
我试了下 体验度差了一些 因为每次滚动都停止特效 滚轮滚动速度越快移动就越慢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式