jQuery animate 'right' 位置问题

标签 jquery jquery-animate

我有一个菜单,可以左右滑动浏览我网站的多个部分。

最初我有一个函数“goto()”,它被“onClick”触发,并且动画完全按照预期工作。

我想清理 HTML,因此我向 JS 文件中的单击事件添加了绑定(bind)处理程序。

var navanchors = $('#navMain a');
var slider = $('#slider');

init = function() {

navanchors.bind('click', function() {

    var t = $(this);
    var id = t.attr('href');
    var dist = $(id).position().left;

    //animate to the div id.
    slider.animate({
        "right": (dist)
    }, 600);

});
};

init();​

左侧动画似乎按预期工作,但右侧动画关闭。第一次单击时,动画似乎移动了预期距离的两倍。第二次单击时,它会重置且没有动画。

请查看此处的问题:http://jsfiddle.net/Kj4bU/1

我已经搜索并尝试过,但不知所措。任何帮助将不胜感激。

谢谢

最佳答案

您并没有阻止您处理的click事件发生默认行为。由于点击发生在 anchor 元素上,因此浏览器将在动画播放期间尝试滚动到被点击的 anchor 位置,从而导致您遇到问题。

您可以使用event.preventDefault()抑制这种行为:

navanchors.on("click", function(e) {
    e.preventDefault();

    var t = $(this);
    var id = t.attr("href");
    var dist = $(id).position().left;

    //animate to the div id.
    slider.animate({
        "right": dist
    }, 600);
});

您会发现更新的 fiddle here .

(请注意,上面的代码使用 on() 而不是 bind() ,自 jQuery 1.7 起,前者优于后者)。

关于jQuery animate 'right' 位置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13230924/

相关文章:

javascript - 让 JQuery 创建多个按钮,这些按钮使用 CSS 在一组中设置样式

javascript - Jquery 前置 : Cannot call method 'createDocumentFragment' of null

jQuery - 通过另一个事件停止延迟淡出

jquery - 修复了当 jquery 动画在 chrome 上淡入淡出时文本变得奇怪的问题

javascript - Blueimp jQuery 文件上传 - 上传完成响应后隐藏队列中的文件

javascript - 使用Javascripts Regexp根据变量替换字符串部分

jquery - 停止当前 CSS 过渡动画

jquery - 如何在 TD 中选择 IMG?

JQuery: child 消失在 parent 大小动画

jquery - 无法从表单中动态删除输入元素