在 iPhone 5 上滚动后 touchend 上的 jQuery 动画

标签 jquery iphone jquery-animate iphone-5

我在 iphone 5 上使用 jQuery animate() 函数时遇到了一个非常奇怪的问题。场景:

我将一个事件处理程序附加到元素上的 touchend 事件,从而启动动画。通常这工作得很好。但是,一旦我在该元素上滑动一次滚动页面,动画功能就不再动画(在所有 future 的手势上)。事件被触发并调用处理程序,但 animate 不执行任何操作。我尝试使用 jQuery 移动事件,现在使用 oldscool element.attachaddEventListener ,两者都会产生相同的结果。有趣的是:

  1. 如果我将它附加到 touchstart,它会在滚动之前和之后工作(但我需要 touchend 事件!)
  2. 如果我做了一些没有动画的事情,例如切换,它也能工作。

一个小演示页面:

<!DOCTYPE html>
<html>
<head>
    <title>Testpage</title>
    <meta content="width=device-width, initial-scale=1.0, user-scalable=yes" name="viewport">
    <script src="/3rdParty/scripts/jquery/jquery-1.8.3.js" type="text/javascript"></script>
    <style>
        body { padding: 10px;}
        #mover { position: relative; width: 100px; background-color: red; color: #fff; padding: 5px; }
        #hider { width: 100%; overflow: hidden; }
        #touchme {  border:1px solid #808080; margin-bottom:10px;line-height: 50px; text-align:center;}
    </style>
    <script>
        $(document).ready(function(){
            var elem = document.getElementById('touchme');
            elem.addEventListener('touchend', positionHandlerEnd, false );
            elem.addEventListener('mouseup', positionHandlerEnd, false );
        });
    </script>
    <script>
        function positionHandlerEnd(e) {
            $('#mover').animate({left: '+=40px'});
            e.preventDefault();
            return;
        }

    </script>
</head>
<body>
<div id="touchme">Touch me</div>
<div id="hider"><div id="mover">This moves</div></div>
<div> dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate</div>
<div> dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate</div>
<div> dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate</div>
</body>
</html>

你知道这里到底发生了什么吗?或者有什么解决方法吗?

最佳答案

当我遇到同样的问题时,我偶然发现了 Safari 的“setTimeout bug”。 Safari(在 IOS6 下)似乎在滚动时不执行动画或计时器。我不知道为什么这会影响滚动后的动画,但是 this guy写了一个小脚本来解决我的问题。请务必检查一下:

https://gist.github.com/3755461

我不能 100% 确定它是否会在其他浏览器中导致错误(还没有遇到任何错误,),但它拯救了我的一天,我很高兴与您分享.

关于在 iPhone 5 上滚动后 touchend 上的 jQuery 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14354833/

相关文章:

javascript - Jquery addClass 不起作用

jquery - 在 Jquery 中附加大块 HTML

javascript - 如何将具有修改 (id) 内容的内联模板元素附加到另一个元素?

iphone - 为什么addSubview是: not retaining the view?

iphone - 移动基板 : MSHookFunction example

javascript - 具有可见性 :hidden instead of display:none 的 JQuery 无限脉冲函数

jquery - 在父级中选择多个类

javascript - 在向下滚动之前,页面加载时显示粘性 "back to top"按钮

jquery - 调用 jquery animate() 后如何悬停

iphone - FFMPEG 编译库和 iOS