移动手机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 相关文章推荐
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
Dec 06 Javascript
js showModalDialog参数的使用详解
Jan 07 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
Oct 19 Javascript
js实现开启密码大写提示
Dec 21 Javascript
React如何将组件渲染到指定DOM节点详解
Sep 08 Javascript
使用 vue-i18n 切换中英文效果
May 23 Javascript
element ui table(表格)实现点击一行展开功能
Dec 04 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
May 01 Javascript
Vue实现拖放排序功能的实例代码
Jul 08 Javascript
ES6 新增的创建数组的方法(小结)
Aug 01 Javascript
Vue父组件监听子组件生命周期
Sep 03 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 Vue.js
轻松学习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
火车头采集器3.0采集图文教程
2007/03/17 PHP
PHP5函数小全(分享)
2013/06/06 PHP
PHP设计模式之适配器模式代码实例
2015/05/11 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
2020/05/29 PHP
autoPlay 基于jquery的图片自动播放效果
2011/12/07 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
JS获取地址栏参数的几种方法小结
2014/02/28 Javascript
基于jQuery实现选取月份插件附源码下载
2015/12/28 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
[02:01]BBC DOTA2国际邀请赛每日综述:八强胜者组鏖战,中国队喜忧参半
2014/07/19 DOTA
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
Python2和Python3中print的用法示例总结
2017/10/25 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
Windows下安装Scrapy
2018/10/17 Python
python实现矩阵打印
2019/03/02 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
Python pandas用法最全整理
2019/08/04 Python
python 模拟银行转账功能过程详解
2019/08/06 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
Juicy Couture Beauty官方网站:香水和化妆品
2019/03/12 全球购物
Foot Locker加拿大官网:美国知名运动产品零售商
2019/07/21 全球购物
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
股东大会通知
2015/04/24 职场文书
2015年信贷员工作总结
2015/04/28 职场文书
工地食品安全责任书
2015/05/09 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
html form表单基础入门案例讲解
2021/07/21 HTML / CSS
SpringRetry重试框架的具体使用
2021/07/25 Java/Android