一个简单的卡片效果
具体效果点这里:http://xyq.test.nie.163.com/test/pics/index.html
一个简单的卡片切换效果,主要有以下功能
- 有4个切换的方向
- 动态加载数据
- CSS3控制动画效果
动画的考虑
一开始是打算通过js动态地计算每个卡片的切换坐标以及动画移动的距离,无奈其计算量的复杂和繁琐,最终放弃了这一方案。
细细观察,你会发现其实每个卡片的位移以及切换出去的效果是一样的,所以完全可以固定写好每个卡片的初始样式,然后再通过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 | //通用 .poker-item { position : absolute ; top : 0 ; left : 0 ; .transition( all . 3 s ease-in); } //各卡片 .poker-item -06 { .transform(translate 3 d( 0 , 0 , -20 rem) rotateX( 21 deg) rotateY( 0 deg)); z-index : 3 ; } .poker-item -05 { .transform(translate 3 d( 0 , 0 , -12.5 rem) rotateX( 20 deg) rotateY( 0 deg)); z-index : 4 ; } .poker-item -04 { .transform(translate 3 d( 0 , . 6 rem, -10.5 rem) rotateX( 19 deg) rotateY( 0 deg)); z-index : 5 ; } .poker-item -03 { .transform(translate 3 d( 0 , 1.2 rem, -8.5 rem) rotateX( 18 deg) rotateY( 0 deg)); z-index : 6 ; } .poker-item -02 { .transform(translate 3 d( 0 , 2.0 rem, -6.5 rem) rotateX( 17 deg) rotateY( 0 deg)); z-index : 7 ; } .poker-item -01 { .transform(translate 3 d( 0 , 2.7 rem, -5.05 rem) rotateX( 16 deg) rotateY( 0 deg)); z-index : 8 ; } |
4个方向的切换
预先写好四个方向隐藏的卡片,通过判断用户的操作方向加上对应的left, right, top, bottom..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | .poker-item -00 -up{ .transform( translate 3 d( 0 , -20 rem, -4 rem)); z-index : 8 ; } .poker-item -00 - right { .transform( translate 3 d( 20 rem, 0 , -4 rem)); z-index : 8 ; } .poker-item -00 -down{ .transform( translate 3 d( 0 , 20 rem, -4 rem)); z-index : 8 ; } .poker-item -00 - left { .transform( translate 3 d( -20 rem, 0 , -4 rem)); z-index : 8 ; } |
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 | s.container[0].addEventListener( "touchstart" , function (e){ var touch = e.touches[0]; //获取第一个触点 start_Y = Number(touch.pageY); //页面触点X坐标 start_X = Number(touch.pageX); isTouch = true ; }, false ); s.container[0].addEventListener( "touchmove" , function (e){ if (!isTouch) return true ; var touch = e.touches[0]; end_Y = Number(touch.pageY); end_X = Number(touch.pageX); e.preventDefault(); return false ; }, false ); s.container[0].addEventListener( "touchend" , function (e){ var action; isTouch = false ; if (!start_Y || !end_Y || !start_X || !end_X) return true ; if (Math.abs(end_Y - start_Y) > Math.abs(end_X - start_X)){ action = (end_Y <= start_Y ? "up" : "down" ); } else { action = (end_X <= start_X ? "left" : "right" ); } if (action){ callback && callback(action); } start_X = 0; start_Y = 0; end_X = 0; end_Y = 0; }, false ); |
最后是动态加载数据
结合六马的列表分页功能,动态去取每一页的数据,然后再塞到隐藏的卡片里,等切换下一张卡片就显示出来。如果发现有下一个分页的,就继续请求分页数据。
这样,就简单地实现了这样一个卡片效果啦。
手机阅读请扫描下方二维码:
上一篇:chrome工具优化的学习小结
下一篇:css3滤镜总结
12345678
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
12345678
'and'e'='e
1
1

1

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1