移动手机APP手指滑动切换图片特效附源码下载


Posted in Javascript onNovember 30, 2015

这是一款效果非常炫酷的移动手机APP滑动手指切换图片特效。该APP特效在移动手机中用户可以通过手指的左右滑动来切换图片,在桌面设备中通过鼠标也可达到同样的效果。

移动手机APP手指滑动切换图片特效附源码下载

效果演示          源码下载

使用方法

HTML结构

这个移动手机APP切换图片特效的HTML结构采用嵌套<div>的HTML结构,每一张图片卡片都包裹在div.demo__card中,里面放置了图片,描述信息和一些额外的图层。

<div class="demo__card">
 <div class="demo__card__top brown">
 <div class="demo__card__img"></div>
 <p class="demo__card__name">Hungry cat</p>
 </div>
 <div class="demo__card__btm">
 <p class="demo__card__we">Whatever</p>
 </div>
 <div class="demo__card__choice m--reject"></div>
 <div class="demo__card__choice m--like"></div>
 <div class="demo__card__drag"></div>
</div>

m--reject是向左移动图片时的图层,m--like是向右移动图片时的图层,demo__card__drag是拖动层。

JavaScript

在jQuery代码中,pullChange()函数用于设置向左和向右两个滑动层的旋转角度和透明度。release()函数用于判断用户是向左还是向右滑动手指,并为这些动作在DOM元素上添加相应的class。

function pullChange() {
 animating = true;
 deg = pullDeltaX / 10;
 $card.css('transform', 'translateX(' + pullDeltaX + 'px) rotate(' + deg + 'deg)');
 var opacity = pullDeltaX / 100;
 var rejectOpacity = opacity >= 0 ? 0 : Math.abs(opacity);
 var likeOpacity = opacity <= 0 ? 0 : opacity;
 $cardReject.css('opacity', rejectOpacity);
 $cardLike.css('opacity', likeOpacity);
}
;
function release() {
 if (pullDeltaX >= decisionVal) {
  $card.addClass('to-right');
 } else if (pullDeltaX <= -decisionVal) {
  $card.addClass('to-left');
 }
 if (Math.abs(pullDeltaX) >= decisionVal) {
  $card.addClass('inactive');
  setTimeout(function () {
   $card.addClass('below').removeClass('inactive to-left to-right');
   cardsCounter++;
   if (cardsCounter === numOfCards) {
    cardsCounter = 0;
    $('.demo__card').removeClass('below');
   }
  }, 300);
 }
 if (Math.abs(pullDeltaX) < decisionVal) {
  $card.addClass('reset');
 }
 setTimeout(function () {
  $card.attr('style', '').removeClass('reset').find('.demo__card__choice').attr('style', '');
  pullDeltaX = 0;
  animating = false;
 }, 300);
};

最后监听mousedown和touchstart事件,并对非.inactive的卡片元素执行卡片切换操作。

使用方法

 HTML结构

这个移动手机APP切换图片特效的HTML结构采用嵌套<div>的HTML结构,每一张图片卡片都包裹在div.demo__card中,里面放置了图片,描述信息和一些额外的图层。

<div class="demo__card">
 <div class="demo__card__top brown">
 <div class="demo__card__img"></div>
 <p class="demo__card__name">Hungry cat</p>
 </div>
 <div class="demo__card__btm">
 <p class="demo__card__we">Whatever</p>
 </div>
 <div class="demo__card__choice m--reject"></div>
 <div class="demo__card__choice m--like"></div>
 <div class="demo__card__drag"></div>
</div>

m--reject是向左移动图片时的图层,m--like是向右移动图片时的图层,demo__card__drag是拖动层。

JavaScript

在jQuery代码中,pullChange()函数用于设置向左和向右两个滑动层的旋转角度和透明度。release()函数用于判断用户是向左还是向右滑动手指,并为这些动作在DOM元素上添加相应的class。

function pullChange() {
 animating = true;
 deg = pullDeltaX / 10;
 $card.css('transform', 'translateX(' + pullDeltaX + 'px) rotate(' + deg + 'deg)');
 var opacity = pullDeltaX / 100;
 var rejectOpacity = opacity >= 0 ? 0 : Math.abs(opacity);
 var likeOpacity = opacity <= 0 ? 0 : opacity;
 $cardReject.css('opacity', rejectOpacity);
 $cardLike.css('opacity', likeOpacity);
}
;
function release() {
 if (pullDeltaX >= decisionVal) {
  $card.addClass('to-right');
 } else if (pullDeltaX <= -decisionVal) {
  $card.addClass('to-left');
 }
 if (Math.abs(pullDeltaX) >= decisionVal) {
  $card.addClass('inactive');
  setTimeout(function () {
   $card.addClass('below').removeClass('inactive to-left to-right');
   cardsCounter++;
   if (cardsCounter === numOfCards) {
    cardsCounter = 0;
    $('.demo__card').removeClass('below');
   }
  }, 300);
 }
 if (Math.abs(pullDeltaX) < decisionVal) {
  $card.addClass('reset');
 }
 setTimeout(function () {
  $card.attr('style', '').removeClass('reset').find('.demo__card__choice').attr('style', '');
  pullDeltaX = 0;
  animating = false;
 }, 300);
};

最后监听mousedown和touchstart事件,并对非.inactive的卡片元素执行卡片切换操作。

$(document).on('mousedown touchstart', '.demo__card:not(.inactive)', function (e) {
 if (animating)
  return;
 $card = $(this);
 $cardReject = $('.demo__card__choice.m--reject', $card);
 $cardLike = $('.demo__card__choice.m--like', $card);
 var startX = e.pageX || e.originalEvent.touches[0].pageX;
 $(document).on('mousemove touchmove', function (e) {
  var x = e.pageX || e.originalEvent.touches[0].pageX;
  pullDeltaX = x - startX;
  if (!pullDeltaX)
   return;
  pullChange();
 });
 $(document).on('mouseup touchend', function () {
  $(document).off('mousemove touchmove mouseup touchend');
  if (!pullDeltaX)
   return;
  release();
 });
});
Javascript 相关文章推荐
javascript FormatNumber函数实现方法
Dec 30 Javascript
JavaScript实现标题栏文字轮播效果代码
Oct 24 Javascript
AngularJS进行性能调优的7个建议
Dec 28 Javascript
分享12个实用的jQuery代码片段
Mar 09 Javascript
全面了解构造函数继承关键apply call
Jul 26 Javascript
HTML页面,测试JS对C函数的调用简单实例
Aug 09 Javascript
AngularJS通过$location获取及改变当前页面的URL
Sep 23 Javascript
JS使用正则表达式验证身份证号码
Jun 23 Javascript
vue仿淘宝订单状态的tab切换效果
Jun 23 Javascript
微信小程序实现分享商品海报功能
Sep 30 Javascript
vue-router 中 meta的用法详解
Nov 01 Javascript
微信小程序wxml列表渲染原理解析
Nov 27 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖放商品放置购物车
Nov 30 #Javascript
浅析node连接数据库(express+mysql)
Nov 30 #Javascript
javascript编程异常处理实例小结
Nov 30 #Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
Nov 30 #Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
Nov 30 #Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
Nov 30 #Javascript
基于javascript如何传递特殊字符
Nov 30 #Javascript
You might like
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
AngularJS 视图详解及示例代码
2016/08/17 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
详解PHP中pathinfo()函数导致的安全问题
2017/01/05 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
2017/08/10 jQuery
详解webpack中的hash、chunkhash、contenthash区别
2018/01/05 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
JavaScript字符和ASCII实现互相转换
2020/06/03 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
Python获取脚本所在目录的正确方法
2014/04/15 Python
Python version 2.7 required, which was not found in the registry
2014/08/26 Python
python修改注册表终止360进程实例
2014/10/13 Python
python获取标准北京时间的方法
2015/03/24 Python
Python聚类算法之DBSACN实例分析
2015/11/20 Python
Python搭建FTP服务器的方法示例
2018/01/19 Python
利用python如何处理百万条数据(适用java新手)
2018/06/06 Python
python图形开发GUI库pyqt5的基本使用方法详解
2020/02/14 Python
keras之权重初始化方式
2020/05/21 Python
python3的pip路径在哪
2020/06/23 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
Python 随机按键模拟2小时
2020/12/30 Python
do you have any Best Practice for testing
2016/06/04 面试题
小学生自我评价范例
2013/09/24 职场文书
晚归检讨书
2014/02/19 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL
Python os和os.path模块详情
2022/04/02 Python