用jQuery拖曳图像 - 性能问题

时间:2014-03-03 14:22:35

标签: jquery ios animation

我创建了一个小型交互式模块,用户可以在其中随机播放图像。此模块工作正常(即使它尚未优化)除了iOS 。如果用户仅单击一个图像,则会正确显示随机播放动画,但是在按随机播放按钮时则不是这种情况。

The demo here

随机播放按钮代码:

$("#shuffle").click(function(){
    $(".slide").each(function(){
        var target = $(this);
        shuffleThis(target);
    })
})

随机播放功能:

function shuffleThis(target, thisType){
for ( var i = 0; i < 5; i++ ) {
    if(i === 4){
        setTimeout(function() {
            var rand = randomizeIMG(thisType);
            var finalRand = rand.split(/_(.+)?/)[0];
            target.append( '<img src="assets/img/rds/'+ rand +'" />' );
            target.children("img:first").fadeOut("slow").remove();
        }, 75*i);   
    } else {
        setTimeout(function() {
            var rand = randomizeIMG(thisType);
            target.append( '<img src="assets/img/rds/'+ rand +'" />' );
            target.children("img:first").remove();
        }, 75*i);
    }   
}}

似乎iOS无法重新绘制DOM。也许是一个setTimout问题。

如何改善iOS下的结果?

2 个答案:

答案 0 :(得分:2)

对我来说,这看起来像iOS下的setTimeouts已知问题。也许this会有帮助吗?

编辑:尝试的另一件事可能是https://stackoverflow.com/a/10991974/1360368

答案 1 :(得分:1)

如果没有看到设备本身的实际最终图像,很难确切地说出你的问题是什么,但是有一些事情你需要考虑:

  • 我怀疑DOM操作(即添加元素)比在iPhone / iPad上显示,隐藏或移动元素更昂贵(这是我基于iOS + Safari网络项目的经验,但我不知道没有足够的事实支持它,所以我“怀疑”它。)

  • 也就是说,与加载实际图像所需的时间相比,更改DOM所需的时间可能相形见绌。我非常怀疑你的iWhatever设备中的一些图像没有加载到75ms你正在加载7张图像。手机上的延迟可能会高于桌面上的延迟。

  • 如果浏览器重绘它,setTimeout()调用可能会比您预期的要晚。 iOS UI代码中的许多元素旨在提供响应式界面,如果这意味着延迟/取消/跳过慢速页面动画,它肯定会在任何程度上都这样做。

考虑到这些,我建议如下:

  • 提前加载所有图像(例如,可以使它们可见:隐藏),只需在循环中显示/隐藏它们。

  • 如果您的setTimeout()调用仍然给您带来麻烦,那么请加载所有随机图像并制作一个随机化的CSS3关键帧动画,将图像放入“随机”位置,然后播放动画。如果同一个动画看起来太相似,如果多次播放,你可以做一些变化。使用CSS3步骤()使图像只是“捕捉”到他们的位置,而不是移动。

希望这有帮助。