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 相关文章推荐
setTimeout 不断吐食CPU的问题分析
Apr 01 Javascript
jQuery 常见学习网站与参考书
Nov 09 Javascript
JavaScript 事件系统
Jul 22 Javascript
JQuery实现table行折叠效果以JSON做数据源
May 26 Javascript
JS实现在页面随时自定义背景颜色的方法
Feb 27 Javascript
JavaScript模拟重力状态下抛物运动的方法
Mar 03 Javascript
功能强大的Bootstrap使用手册(一)
Aug 02 Javascript
JavaScript职责链模式概述
Sep 17 Javascript
Vue.js中组件中的slot实例详解
Jul 17 Javascript
vue 之 .sync 修饰符示例详解
Apr 21 Javascript
微信小程序日历效果
Dec 29 Javascript
CKeditor4 字体颜色功能配置方法教程
Jun 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模板,主要想体现一下思路
2006/12/25 PHP
关于JavaScript定义类和对象的几种方式
2010/11/09 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
javascript判断office版本示例
2014/04/11 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
详解Angular.js指令中scope类型的几种特殊情况
2017/02/21 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
基于JavaScript实现简单的音频播放功能
2018/01/07 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
原生JS实现音乐播放器
2021/01/26 Javascript
python查找目录下指定扩展名的文件实例
2015/04/01 Python
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
Python3.2模拟实现webqq登录
2016/02/15 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
Python中一些深不见底的“坑”
2019/06/12 Python
Django中信号signals的简单使用方法
2019/07/04 Python
Django静态文件加载失败解决方案
2020/08/26 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
WiFi云数码相框:Nixplay
2018/07/05 全球购物
linux面试题参考答案(6)
2016/06/23 面试题
班级德育工作实施方案
2014/02/21 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
安全标语口号
2014/06/09 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
鲁迅故居导游词
2015/02/05 职场文书
优秀党员个人总结
2015/02/14 职场文书
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python