js实现手机web图片左右滑动效果


Posted in Javascript onDecember 29, 2017

最近在做一个手机端web站点,里面有一个图片展示效果:

1、点击任意图片时图片全屏展示,左右滑动能展示其他的图片。
2、滑动超过一定范围自动滑到下一张图片,不超过则回退到当前照片位置。此处的滑动要带动画效果

实现:

每张图片外面一个div,将其宽度设置为100%,最外层有一个div[命名为outerDiv],其宽度设为:总图片数量*100+‘%'。给最外层div设置touchstart,touchmove,touchend事件监听处理函数,在touchmove中根据移动的x轴距离动态改变outerDiv的x轴距离即可实现图片滑动效果,在touchend中根据当前滑动的距离判断滑动到下一张还是回退当前图片位置。

之前我们可以通过设置outerDiv的position属性,然后改变left值实现移动效果,这里我用的是css3的动画函数transform,简单,且可以实现动画效果

transform参数:

-webkit-transform:translate(100px,200px) tr //可以设置x、y轴方向移动距离
-webkit-transform:translateX(100px) translateY(200px) translateZ(3000px) 

//可以设置x、y、z轴方向移动距离.3D效果
-webkit-transition:.4s ease;//设置动画时间

定义动画时间:

.transition {
  -webkit-transition:.4s ease;
  -moz-transition:.4s ease;
  -ms-transition:.4s ease;
  -o-transition: .4s ease;
  transition:.4s ease;
}

关键代码:

var touchOption={touchStartX:0,startTranslateX:0,moveDistance:0};

1、touchstart

outerDiv.addEventListener('touchstart',function(){
$(this).removeClass('transition');//移除动画效果,否则移动时图片会颤动
touchOption.touchStartX = e.touches[0].clientX;
        if ($(this).css("-webkit-transform") == 'none') {
          touchOption.startTranslateX = 0;
        }
        else {
          //css-webkit-transform属性值格式:matrix(1, 0, 0, 1, -4140, 0)
          var transfrom_info = $('.sourcePhotoDiv').css("-webkit-transform").split(',')[4];//获取当前outerDiv的x轴坐标
          touchOption.startTranslateX = parseInt(transfrom_info);
        }
},false);

2、touchmove

outerDiv.addEventListener('touchmove',function(){
       touchOption.moveDistance = (e.touches[0].clientX - touchOption.touchStartX);
        var TranslateX = touchOption.startTranslateX + touchOption.moveDistance;
        $(this).css('-webkit-transform', 'translateX('+ TranslateX +'px) translateZ(0)'); //移动图片
},false);

3、touchend

outerDiv.addEventListener('touchend',function(){
      $(this).addClass('transition);//添加动画效果
       var moveX=100;//此处计算移动移动下一张图片还是退货当前图片代码省略       
        $(this).css('-webkit-transform', 'translateX('+ moveX +'px) translateZ(0)'); //移动图片
},false);

总结:

1、outerDiv的动画参数和效果都是js动态添加的,不需要事先定义
2、用translate(x,y)这种参数时,图片移动时会颤动
3、用translateX() 且带translateZ(0)时图片移动正常,不带translateZ(0)同样出现颤动
4、如果用的是translateX(moveX) ranslateZ(0)这种格式,如果moveX用的是百分比值,如‘50%',在android手机自动浏览器和uc浏览器中则没有动画效果,用px单位值则正常

为防止图片移动过程颤动和保证动画效果,建议大家用translateX(100px) ranslateZ(0)这种参数,且移动距离用px值

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
分享几个超级震憾的图片特效
Jan 08 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
Jan 07 Javascript
浅析javascript的间隔调用和延时调用
Nov 12 Javascript
解决jQuery使用JSONP时产生的错误
Dec 02 Javascript
js拖拽的原型声明和用法总结
Apr 04 Javascript
jQuery循环遍历子节点并获取值的方法
Apr 14 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
May 17 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
Mar 06 Javascript
jQuery实现扑克正反面翻牌效果
Mar 10 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
Oct 14 jQuery
Vue elementui字体图标显示问题解决方案
Aug 18 Javascript
JS前端canvas交互实现拖拽旋转及缩放示例
Aug 05 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
Dec 29 #Javascript
浅谈react-router HashRouter和BrowserRouter的使用
Dec 29 #Javascript
javaScript 连接打印机,打印小票的实例
Dec 29 #Javascript
深入浅析vue组件间事件传递
Dec 29 #Javascript
详解Vue 事件修饰符capture 的使用
Dec 29 #Javascript
react-router browserHistory刷新页面404问题解决方法
Dec 29 #Javascript
node简单实现一个更改头像功能的示例
Dec 29 #Javascript
You might like
php foreach 使用&(与运算符)引用赋值要注意的问题
2010/02/16 PHP
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
php获取微信openid方法总结
2019/10/10 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解
2013/11/05 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
[51:11]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS DT
2014/05/22 DOTA
Python实现过滤单个Android程序日志脚本分享
2015/01/16 Python
Python实现测试磁盘性能的方法
2015/03/12 Python
《Python之禅》中对于Python编程过程中的一些建议
2015/04/03 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
python异步存储数据详解
2019/03/19 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
python爬取招聘要求等信息实例
2020/11/20 Python
html5生成柱状图(条形图)效果的实例代码
2016/03/25 HTML / CSS
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
Intersport西班牙:在线体育商店
2019/11/06 全球购物
电子邮箱格式怎么写
2014/01/12 职场文书
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
执法作风整顿剖析材料
2014/10/11 职场文书
初中英语教学反思范文
2016/02/15 职场文书
Vue图片裁剪组件实例代码
2021/07/02 Vue.js
python 使用pandas读取csv文件的方法
2022/12/24 Python