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 相关文章推荐
textarea的value是html文件源代码,存成html文件的代码
Apr 20 Javascript
引用外部js乱码问题分析及解决方案
Apr 12 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
Sep 10 Javascript
php跨域调用json的例子
Nov 13 Javascript
写给小白的JavaScript引擎指南
Dec 04 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
Sep 27 Javascript
JS简单判断滚动条的滚动方向实现方法
Apr 28 Javascript
详解搭建es6+devServer简单开发环境
Sep 25 Javascript
基于Three.js实现360度全景图片
Dec 30 Javascript
浅谈javascript中的prototype和__proto__的理解
Apr 07 Javascript
详解vue中移动端自适应方案
May 05 Javascript
微信小程序结合Storage实现搜索历史效果
May 18 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 图片上传类代码
2009/07/17 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
js中自定义react数据验证组件实例详解
2018/10/19 Javascript
vue实现下拉加载其实没那么复杂
2019/08/13 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python pickle类库介绍(对象序列化和反序列化)
2014/11/21 Python
python2.7的编码问题与解决方法
2016/10/04 Python
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
Python绘制频率分布直方图的示例
2019/07/08 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
凯特王妃父母建立的派对用品网站:Party Pieces
2017/05/28 全球购物
新加坡最早生产电动滑板车的制造商之一:FunsToTheFore
2020/09/08 全球购物
写给保洁员表扬信
2014/01/08 职场文书
高中政治教学反思
2016/02/23 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS