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 相关文章推荐
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
Dec 29 Javascript
父页面显示遮罩层弹出半透明状态的dialog
Mar 04 Javascript
在HTML代码中使用JavaScript代码的例子
Oct 16 Javascript
DOM节点删除函数removeChild()用法实例
Jan 12 Javascript
浅谈Unicode与JavaScript的发展史
Jan 19 Javascript
jQuery团购倒计时特效实现方法
May 07 Javascript
js小数运算出现多位小数如何解决
Oct 08 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
Apr 20 Javascript
jQuery fadeOut 异步实例代码详解
Aug 18 Javascript
vue-resource拦截器设置头信息的实例
Oct 27 Javascript
详解基于Node.js的HTTP/2 Server实践
May 31 Javascript
详解auto-vue-file:一个自动创建vue组件的包
Apr 26 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实现MySQL数据库备份与还原类实例
2014/12/09 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
2020/09/04 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
python 3利用BeautifulSoup抓取div标签的方法示例
2017/05/28 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
python的slice notation的特殊用法详解
2019/12/27 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
canvas简单连线动画的实现代码
2020/02/04 HTML / CSS
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
公司会计岗位职责
2014/02/13 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
解除合同协议书
2014/04/17 职场文书
庆祝教师节标语
2014/10/09 职场文书
2015元旦主持词开场白和结束语
2014/12/14 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python
Django Paginator分页器的使用示例
2021/06/23 Python
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers