jquery - 使用 translate3d 和 jQuery 延迟检测碰撞

标签 jquery css google-chrome translate3d jquery-1.10

我正在尝试检测两个元素之间的碰撞,但在使用 css3 translate3d 而不是使用 top 属性时我遇到了问题。

问题发生在:

  • Chrome (35.0.1916.153 m)
  • 歌剧 (22.0.1471.70)

当使用 translate3d 时,检测碰撞会有延迟。我正在使用 setInterval 以 1 毫秒的间隔来确保几乎实时监控两个元素的位置。

在我的示例中,当检测到碰撞时,小方 block 将变为黑色。如您所见,有时延迟很大,有时似乎在动画结束时检测到碰撞。

修改 top 属性时正常工作:
http://jsfiddle.net/rHZbt/10/

使用 translate3d 代替移动元素时的延迟:
http://jsfiddle.net/rHZbt/9/

这是我检测与 jQuery 碰撞的方式:

var interval = setInterval(function () {
    checkCollision();
}, 1);

function checkCollision() {
    var top = $('#element').offset().top;
    var bigBoxTop = $('#demo').offset().top + $('#demo').height();


    if (bigBoxTop >= top) {
        $('#element').css('background', 'black');
        clearInterval(interval);
    }
}

关于这个错误的原因有什么想法吗?

最佳答案

我发现 jQuery 在动画停止之前根本没有获得适当的信息,它正在获取“旧”坐标。

这可以通过在 chrome 中运行你的网络检查器并查看你的控制台来看到。 http://jsfiddle.net/rHZbt/11/ (顺便说一句,我已经缓存了您的选择器以获得更好的性能)。 鉴于 http://jsfiddle.net/rHZbt/12/它与 top 一起工作,报告了所有点的正确位置。

这引导我到 Receiving elements position in the middle of CSS transition"Force Reflow" in CSS transitions in Bootstrap第一条中的最后一条评论表明任何 css 更改基本上都会启用其他 CSS 属性的同步

demo.css('visibility', 'hidden').css('visibility', 'visible'); 嘿瞧瞧,只需将 demo.css('visibility' , 'visible'); 添加到 checkCollision 函数中,您就可以像这里看到的那样工作 http://jsfiddle.net/rHZbt/13/

function checkCollision() {
    demo.css('visibility', 'visible');
    var top = element.offset().top;
    var bigBoxTop = demo.offset().top + demo.height();
    console.log(bigBoxTop, top);
    if (bigBoxTop >= top) {
        element.css('background', 'black');
        clearInterval(interval);
    }
}

关于jquery - 使用 translate3d 和 jQuery 延迟检测碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24510196/

相关文章:

javascript - 使用属性等于选择器时转义元素名称中的方括号

jQuery FullCalendar 适用于触摸设备 - 但事件存在小问题

javascript - 从 slider 中删除变体的尺寸图片 - Shopify

html - 如何在 5 个元素之后包装列表?

Android Chrome 多行文本阴影渲染模糊

javascript - Selenium IDE 在 javascript 命令中使用存储变量

javascript - $("div")。引用所有div?

css - 何时下载样式表中的背景图像?

javascript - 可以在隐身模式下使用 javascript 文件系统吗?

javascript - 捕获浏览器内容的屏幕截图(网站)