0%

产品360度旋转展示效果实现

image.png

https://www.dongchedi.com/auto/series/4499

图片素材

image.png

1
2
3
4
5
6
7
<div id="box">
<img src="img/1.png" alt="">
<div class="btn">
<a href="javascript:;" class="prev"><</a>
<a href="javascript:;" class="next">></a>
</div>
</div>

img

原理:就是通过js改变img标签的src地址,附值不同角度的图片

https://www.dongchedi.com/auto/series/4499 下的效果是通过控制不同角度的图片的opacity实现的

关于增加性能开启了3D加速:

动态改变元素的translate3D,自然开启了3D加速。

setTimeout/setInterval/requestAnimationFrame和CSS3没有很大的帧速差别。

现今主要的不同点是:

  • 功能涵盖面,JS比CSS3大
    定义动画过程的@keyframes不支持递归定义,如果有多种类似的动画过程,需要调节多个参数来生成的话,将会有很大的冗余(比如jQuery Mobile的动画方案),而JS则天然可以以一套函数实现多个不同的动画过程时间尺度上,@keyframes的动画粒度粗,而JS的动画粒度控制可以很细CSS3动画里被支持的时间函数非常少,不够灵活以现有的接口,CSS3动画无法做到支持两个以上的状态转化。
  • 实现/重构难度不一,CSS3比JS更简单,性能调优方向固定。
  • 对于帧速表现不好的低版本浏览器,CSS3可以做到自然降级,而JS则需要撰写额外代码。
  • CSS3有兼容性问题,而JS大多时候没有兼容性问题。

如何判断鼠标或触摸是向左、向右、向上、向下滑动

触摸参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
var startx, starty;
//获得角度
function getAngle(angx, angy) {
return Math.atan2(angy, angx) * 180 / Math.PI;
};

//根据起点终点返回方向 1向上 2向下 3向左 4向右 0未滑动
function getDirection(startx, starty, endx, endy) {
var angx = endx - startx;
var angy = endy - starty;
var result = 0;

//如果滑动距离太短
if (Math.abs(angx) < 2 && Math.abs(angy) < 2) {
return result;
}

var angle = getAngle(angx, angy);
if (angle >= -135 && angle <= -45) {
result = 1;
} else if (angle > 45 && angle < 135) {
result = 2;
} else if ((angle >= 135 && angle <= 180) || (angle >= -180 && angle < -135)) {
result = 3;
} else if (angle >= -45 && angle <= 45) {
result = 4;
}

return result;
}
//手指接触屏幕
document.addEventListener("touchstart", function(e) {
startx = e.touches[0].pageX;
starty = e.touches[0].pageY;
}, false);
//手指离开屏幕
document.addEventListener("touchend", function(e) {
var endx, endy;
endx = e.changedTouches[0].pageX;
endy = e.changedTouches[0].pageY;
var direction = getDirection(startx, starty, endx, endy);
switch (direction) {
case 0:
alert("未滑动!");
break;
case 1:
alert("向上!")
break;
case 2:
alert("向下!")
break;
case 3:
alert("向左!")
break;
case 4:
alert("向右!")
break;
default:
}
}, false);

鼠标模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$(function () {
var div=document.getElementById("元素id");
div.onmousedown=function(e){
//按下
document.onmousemove=function(e){

//移动

};
document.onmouseup=function(){
document.onmouseup=null;
document.onmousemove=null;
//松开
};
};
});
-------------本文结束感谢您的阅读-------------