在iPad上使用touchmove移动图像(css3变换)

Move image around (css3 transform) with touchmove on iPad

本文关键字:图像 css3 变换 移动 touchmove iPad      更新时间:2023-09-26

我有一张想在iPad3 上移动的图像

问题是,它并没有像我希望的那样好,图像移动不平滑,并且在手势后面移动。

我有如下(3MB base64图像)

<img src="data:image/jpeg;base64,/9j/4AAQ....">

css:

img {
    transform: translate3d(0,0,0);
}

javascript是

img.on('touchstart', function (e) {
     var diffX = e.pageX;
     var diffY = e.pageY;
     img.on('touchmove', function (e) {
         translateX  += e.pageX - diffX;   
         translateY += e.pageY - diffY; 
         img.css({'-webkit-transform': 'translate(' + translateX + 'px, ' + translateY + 'px)'});
         diffX = e.pageX;
         diffY = e.pageY;
     });             
     return false;
})
...

它在我的笔记本电脑上运行得很好,但在我的iPad3上不行。我也尝试过requestAnimationFrame,但在我停止移动之前什么都没发生。有什么建议可以提高我iPad的性能吗?

这完成了touchmove函数之外的大部分数学运算并直接设置webkittransform,而不需要经过很长的jquery-css函数。它还使用了没有正确设置的3d转换开关,只需在带有ios7的css文件中添加translate3d

var sx,sy,cx=0,cy=0,img=document.images[0];
img.addEventListener('touchstart',ts,false);
img.addEventListener('touchmove',tm,false);
img.addEventListener('touchend',te,false);
function ts(e){
 e.preventDefault();
 sx=e.pageX-cx;
 sy=e.pageY-cy;
}
function tm(e){
 this.style.webkitTransform='translate3d('+
 (e.pageX-sx)+'px,'+(e.pageY-sy)+'px,0)';
}
function te(e){
 cx=e.pageX-sx;
 cy=e.pageY-sy;
}

另一点是。。。即使你有iPad3,它也无法处理这样的大图像,所以可以考虑将所有图像都放在带有overflow:hiddendiv中,这也会提高性能。

div{
 width:400px;/*try 100%*/
 height:400px;/*try 100%*/
 overflow:hidden;
}

鼠标移动示例(不触摸,但除了不需要isup检查外,它是一样的)

http://jsfiddle.net/AtBUh/