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注意img图片的onerror事件的分析
Jan 01 Javascript
深入理解JQuery keyUp和keyDown的区别
Dec 12 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
Sep 21 Javascript
jQuery中animate()方法用法实例
Dec 24 Javascript
JavaScript中对象property的读取和写入方法介绍
Dec 30 Javascript
jQuery实现的图文高亮滚动切换特效实例
Aug 10 Javascript
JavaScript实现通过select标签跳转网页的方法
Sep 29 Javascript
概述javascript在Google IE中的调试技巧
Nov 24 Javascript
微信小程序 图片边框解决方法
Jan 16 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
Mar 01 Javascript
微信小程序定位当前城市的方法
Jul 19 Javascript
vue 实现把路由单独分离出来
Aug 13 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函数 serialize()和unserialize()
2012/02/04 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
javascript高级编程之函数表达式 递归和闭包函数
2015/11/29 Javascript
在localStorage中存储对象数组并读取的方法
2016/09/24 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
jQuery使用Layer弹出层插件闪退问题
2016/12/22 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
Python线性方程组求解运算示例
2018/01/17 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
医学专业毕业生推荐信
2013/11/14 职场文书
机关党员进社区活动总结
2014/07/05 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server