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中将字符串转换成json的三种方式
Jan 12 Javascript
在JavaScript中使用对数Math.log()方法的教程
Jun 15 Javascript
JS实现三个层重叠点击互相切换的方法
Oct 06 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
Dec 30 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
Feb 26 Javascript
springMVC结合AjaxForm上传文件
Jul 12 Javascript
JS判断是否手机或pad访问实现方法
Dec 09 Javascript
微信小程序学习(4)-系统配置app.json详解
Jan 12 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
Jul 23 Javascript
Windows下Node.js安装及环境配置方法
Sep 18 Javascript
微信小程序引用iconfont图标的方法
Oct 22 Javascript
修改Vue打包后的默认文件名操作
Aug 12 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 session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
PHP的autoload自动加载机制使用说明
2010/12/28 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
Laravel 登录后清空COOKIE的操作方法
2019/10/14 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
javascript 函数速查表
2010/02/07 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
JavaScript禁止用户多次提交的两种方法
2016/07/24 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
2019/10/14 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
Python中实现参数类型检查的简单方法
2015/04/21 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
python版百度语音识别功能
2019/07/09 Python
CSS3教程(2):网页边框半径和网页圆角
2009/04/02 HTML / CSS
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
大学生自荐信
2013/12/11 职场文书
十八大报告观后感
2014/01/28 职场文书
机械系毕业生求职信
2014/05/28 职场文书
公司租房协议书范本
2014/10/08 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
房贷工资证明范本
2015/06/12 职场文书
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android