javascript - jQuery 每次循环返回数据两次

标签 javascript jquery jquery-animate each

请用下面的 fiddle 演奏。一只 bug 如其所愿——转动它的“头”并朝正确的方向爬行。但是几个错误(从两个开始)摧毁了这一切。 Jquery“each”返回坐标两次,因此生成的两个错误不是两组坐标,而是四个。

$(document).ready(function () {


    function bug() {
        $('.bug').each(function () {
            //var bugs = $('.bug').length;

            var h = $(window).height() / 2;
            var w = $(window).width() / 2;
            var nh = Math.floor(Math.random() * h);
            var nw = Math.floor(Math.random() * w);



            //$this = $(this);
            //var newCoordinates = makeNewPosition();
            var p = $(this).offset();
            var OldY = p.top;
            var NewY = nh;

            var OldX = p.left;
            var NewX = nw;

            var y = OldY - NewY;
            var x = OldX - NewX;
            angle = Math.atan2(y, x);
            angle *= 180 / Math.PI
            angle = Math.ceil(angle);

            console.log(p);

            $(this).delay(1000).rotate({
                animateTo: angle
            });



            $(this).animate({
                top: nh,
                left: nw
            }, 5000, "linear", function () {
                bug();
            });

        });
    };

    bug();
});

http://jsfiddle.net/p400uhy2/
http://jsfiddle.net/p400uhy2/4/

最佳答案

@Noah B 所述,问题是每个“错误” 都在为所有“错误” 设置循环。

我会为每个元素制作 bug() 函数,这样每个 “bug” 都可以单独设置。

编辑(@Roko C. Buljan 评论)

function bug() {
    // ... your code ...

    // calculate animation time, so that each of bugs runs same fast in long and short distance:
    var top_diff = Math.abs(OldY - nh),
        left_diff = Math.abs(OldX - nw),
        speed = Math.floor(Math.sqrt((top_diff * top_diff) + (left_diff * left_diff))) * 15;

    $(this).animate({
        top: nh,
        left: nw
    }, speed, "linear", function () {
        // rerun bug() function only for that single element:
        bug.call(this);
    });
};

$('.bug').each(bug);

DEMO

关于javascript - jQuery 每次循环返回数据两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28955848/

相关文章:

javascript - Formik 在 onSubmit 上发送重复值,无法弄清楚原因

jquery - 将文本框的高度设置为标签文本的高度

jquery - 悬停()背景颜色问题

jquery - 制作 div 动画并顺时针旋转。即 Div 的 radialwipe 时钟效果

javascript - PHP调用JS函数

php - javascript加密?

javascript - 从 json 字符串转换为 json 对象后如何从 Typescript 中的对象数组获取结果,我的编码有什么问题

javascript - 可滚动 div 上的 jquery DateTimePicker

asp.net - JS 中 Listbox.Length 始终为 0

javascript - 为什么 Jquery animate() 在我的案例中不起作用?