jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)


Posted in Javascript onJune 22, 2016

今天我们继续内容滑动切换效果的第二部分讲解。如今我们的web开发都要适应移动设备,就是说我们的web页面要在移动设备如手机端也能正常访问,所以我将第一部分的基本切换效果做了加强,增加了响应式和触控滑动效果。

jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)

效果展示     源码下载

本文是hwSlider-内容滑动切换效果的第二部分,演示DEMO都是基于第一部分内容的基础上的,所以,如果您还没阅读过第一部分的话,请先移步参阅:基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)

响应式

什么是响应式设计,这里我就不描述了。在hwSlider中,我们通过CSS来设置滑块的宽度和高度,设置了百分比的宽度。

#hwslider{width: 100%;height:auto;min-height: 120px;margin:40px auto; position: relative; overflow: hidden;} 
#hwslider ul{width: 100%; height:100%; position: absolute; z-index: 1} 
#hwslider ul li{display:none;position:absolute; left:0; top:0; width: 100%;height:100%; overflow: hidden;} 
#hwslider ul li.active{display: block;} 
#hwslider ul li img{max-width: 100%} 
#dots{position: absolute; bottom:20px; left:200px; min-width:60px; height: 12px; z-index: 2;} 
#dots span{float: left; width:12px;height: 12px; border: 1px solid #fff; border-radius: 50%; background: #333; margin-right: 8px; cursor: pointer;} 
#dots span.active{background:orangered} 
.arr{display:none;position: absolute; top: 140px; z-index: 2;width: 40px; height: 40px; line-height: 38px; text-align: center;; font-size: 36px; background: rgba(0,0,0,.3); color: #fff; text-decoration: none} 
.arr:hover{background: rgba(0,0,0,.7); text-decoration: none;} 
#hwslider:hover .arr{display: block; text-decoration: none;color: #fff} 
#prev{left: 20px} 
#next{right: 20px}

接下来,我们在js部分开始部分定义变量,在初始化resize()函数中,我们计算并定位导航圆点和导航箭头的位置,并且在浏览器窗口大小调整的时候也调用resize()。

$(function(){ 
var slider = $("#hwslider"); 
var dots = $("#dots span"), 
prev = $("#prev"),next = $("#next"); 
var sliderInder = slider.children('ul') 
var hwsliderLi = sliderInder.children('li'); 
var hwsliderSize = hwsliderLi.length; //滑块的总个数 
var sliderWidth = 600; //滑块初始宽度 
var sliderHeight = 320; //滑块初始高度 
var index = 1; //初始显示第一个滑块 
var speed = 400; //滑动速度 
var interval = 3000; //间隔时间 
var dotShow = true; //是否显示可切换的导航圆点 
var autoPlay = false; //是否支持自动滑动 
var clickable = true; //是否已经点击了滑块在做滑动动画 
//初始化组件 
var resize = function(){ 
var sWidth = slider.width(); 
var dotWidth = hwsliderSize*20; 
var dotOffset = (sWidth-dotWidth)/2; 
var sHeight = sliderHeight/sliderWidth*sWidth; 
slider.css('height',sHeight); 
$("#dots").css('left',dotOffset+'px'); //导航圆点位置 
var arrOffset = (sHeight-40)/2; 
$(".arr").css('top',arrOffset+'px'); //导航箭头位置 
} 
resize(); 
$(window).resize(function(){ 
resize(); 
}); 
});

移动端触屏滑动

在移动设备上,我们可以轻触屏幕,并使用手势滑动来切换滑块。要实现这种效果,需要用到核心的touch事件。处理touch事件能跟踪到屏幕滑动的每根手指。

以下是四种touch事件:

touchstart: 手指放到屏幕上时触发
touchmove: 手指在屏幕上滑动式触发
touchend: 手指离开屏幕时触发
touchcancel: 系统取消touch事件的时候触发,这个好像比较少用

好,现在我们需要在滑块上绑定侦听touch触控事件,在touchstart和touchend时分别获取手指在屏幕滑块上的位置,然后根据位移判断是左滑还是右滑,然后调用moveTo()实现滑动切换。

var mouseX = 0, 
touchStartY = 0, 
touchStartX = 0; 
hwsliderLi.on({ 
//触控开始 
'touchstart': function(e) { 
touchStartY = e.originalEvent.touches[0].clientY; 
touchStartX = e.originalEvent.touches[0].clientX; 
}, 
//触控结束 
'touchend': function(e) { 
var touchEndY = e.originalEvent.changedTouches[0].clientY, 
touchEndX = e.originalEvent.changedTouches[0].clientX, 
yDiff = touchStartY - touchEndY, 
xDiff = touchStartX - touchEndX; 
if ( Math.abs( xDiff ) > Math.abs( yDiff ) ) { 
if ( xDiff > 5 ) { 
if(index >= hwsliderSize){ 
index = 1; 
}else{ 
index += 1; 
} 
moveTo(index,'next'); 
} else { 
if(index == 1){ 
index = hwsliderSize; 
}else{ 
index -= 1; 
} 
moveTo(index,'prev'); 
} 
} 
touchStartY = null; 
touchStartX = null; 
}, 
//触控移动 
'touchmove': function(e) { 
if(e.preventDefault) { e.preventDefault(); } 
} 
});

再加上上一篇文章中的基本滑块js代码就能实现一个响应式的可触控滑动的内容滑动效果。

如果要在PC上实现拖动滑动的话,需要绑定滑块的onmousedown,onmousemove以及onmouseup事件,实现鼠标按住拖动滑块实现滑动切换,主要代码这里就不贴出来了,大家可以下载源代码中查看。

接下来的第三部分,我将给大家讲解如何将现有的hwSlider代码封装成一个jQuery滑动插件成品,敬请关注。

Javascript 相关文章推荐
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
Mar 11 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
Feb 12 Javascript
改变隐藏的input中value值的方法
Mar 19 Javascript
js与css实现弹出层覆盖整个页面的方法
Dec 13 Javascript
javascript创建动态表单的方法
Jul 25 Javascript
详解javascript数组去重问题
Nov 06 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
Apr 20 Javascript
jQuery实现的可编辑表格完整实例
Jun 20 Javascript
js自定义QQ菜单效果
Jan 10 Javascript
JavaScript日期对象(Date)基本用法示例
Jan 18 Javascript
vue中简单弹框dialog的实现方法
Feb 26 Javascript
angularjs 获取默认选中的单选按钮的value方法
Feb 28 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
Jun 22 #Javascript
浅析jQuery Ajax通用js封装
Jun 22 #Javascript
Javascript如何判断数据类型和数组类型
Jun 22 #Javascript
最全的Javascript编码规范(推荐)
Jun 22 #Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
Jun 22 #Javascript
Javascript将数字转化成为货币格式字符串
Jun 22 #Javascript
jQuery soColorPacker 网页拾色器
Jun 22 #Javascript
You might like
PHP文件下载实例代码浅析
2016/08/17 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
php7 错误处理机制修改实例分析
2020/05/25 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
2010/11/16 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
JS FormData对象使用方法实例详解
2020/02/12 Javascript
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
Tensorflow中使用tfrecord方式读取数据的方法
2018/06/19 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
python 直接赋值和copy的区别详解
2019/08/07 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
2014/04/14 HTML / CSS
美国排名第一的在线葡萄酒商店:Wine.com
2016/09/07 全球购物
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
体育教育专业自荐信范文
2013/12/20 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
追悼会主持词
2014/03/20 职场文书
2014和解协议书范文
2014/09/15 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
个人思想政治总结
2015/03/05 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
企业财务管理制度范本
2015/08/04 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang