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 相关文章推荐
js判断输入是否为正整数、浮点数等数字的函数代码
Nov 17 Javascript
再谈javascript图片预加载技术(详细演示)
Mar 12 Javascript
MooTools 页面滚动浮动层智能定位实现代码
Aug 23 Javascript
gridpanel动态加载数据的实例代码
Jul 18 Javascript
浅谈javascript中for in 和 for each in的区别
Apr 23 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
Jun 20 Javascript
Easy UI动态树点击文字实现展开关闭功能
Sep 30 Javascript
JavaScript中的高级函数
Jan 04 Javascript
使用watch监听路由变化和watch监听对象的实例
Feb 24 Javascript
jquery插件开发模式实例详解
Jul 20 jQuery
JavaScript 实现同时选取多个时间段的方法
Oct 17 Javascript
QT与javascript交互数据的实现
May 26 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
地摊中国 - 珍藏老照片
2020/08/18 杂记
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
jQuery Ajax之$.get()方法和$.post()方法
2009/10/12 Javascript
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
window.print打印指定div指定网页指定区域的方法
2014/08/04 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
2015/10/01 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
jQuery 控制文本框自动缩小字体填充
2017/06/16 jQuery
利用node.js如何创建子进程详解
2017/12/09 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
详解使用React制作一个模态框
2019/03/14 Javascript
node.js使用fs读取文件出错的解决方案
2019/10/23 Javascript
vuex 实现getter值赋值给vue组件里的data示例
2019/11/05 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
Python 正则表达式操作指南
2009/05/04 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
Python 单元测试(unittest)的使用小结
2018/11/14 Python
python导入坐标点的具体操作
2019/05/10 Python
Python实现直播推流效果
2019/11/26 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
中西医专业毕业生职业规划书
2014/02/24 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
2015年中学总务处工作总结
2015/07/22 职场文书