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 相关文章推荐
在线编辑器的实现原理(兼容IE和FireFox)
Mar 09 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
Jan 08 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
Sep 09 Javascript
60行js代码实现俄罗斯方块
Mar 31 Javascript
深入浅析javascript中的作用域(推荐)
Jul 19 Javascript
js对字符串进行编码的方法总结(推荐)
Nov 10 Javascript
详解vue中computed 和 watch的异同
Jun 30 Javascript
JavaScript hasOwnProperty() 函数实例详解
Aug 04 Javascript
vue 组件中slot插口的具体用法
Apr 03 Javascript
微信小程序开发之路由切换页面重定向问题
Sep 18 Javascript
微信小程序使用GoEasy实现websocket实时通讯
May 19 Javascript
JQuery绑定事件四种实现方法解析
Dec 02 jQuery
详解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中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
PHP基本语法总结
2014/09/06 PHP
PHP接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
javascript 处理HTML元素必须避免使用的一种方法
2009/07/30 Javascript
JQery 渐变图片导航效果代码 漂亮
2010/01/01 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
原生js实现放大镜特效
2017/03/08 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
详解服务端预渲染之Nuxt(介绍篇)
2019/04/07 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
Vue-router中hash模式与history模式的区别详解
2020/12/15 Vue.js
从零学Python之hello world
2014/05/21 Python
python单例模式的多种实现方法
2019/07/26 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
英国香水店:The Perfume Shop
2017/03/27 全球购物
艺术用品:Arteza
2018/11/25 全球购物
介绍一下EJB的体系结构
2012/08/01 面试题
毕业实习评语
2014/02/10 职场文书
国际贸易专业个人鉴定
2014/02/22 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
婚礼父母答谢词
2015/01/04 职场文书
幽默导游词开场白
2015/05/29 职场文书