移动端轮播图插件(支持Zepto和jQuery)
一. 效果图

二. 功能介绍
1. 支持图片自动轮播和非自动轮播
2. 支持点击和滑动。
三. 简单介绍
代码都有注释,逻辑简单,不做更多赘述。
1. 在你的html中添加一行。
<section class="slider-wrap" style="height:160px" id="banner"></section>
2. 在你的处理页面逻辑的JS代码中添加以下代码:
(1)先是动态加载html。
(2)然后调用slider并且传入参数。
// banner
// bannerList结构:[{image: ..., url: ...}, {...}, {...}]
var bannerList = ...;
var bannerHTML = bannerList ? this.renderBanner(bannerList) : '';
$("#banner").html(bannerHTML);
$("#banner").slider({
"autoScroll": true,
"infinite": true
});
renderBanner: function(bannerList) {
var html = '<ul class="slider-list">';
$.each(bannerList, function(index, item) {
var url = item["url"].match(/./) == '/' ? 'https://simu.dahuo.la' + item["url"] : item["url"];
html += '<li class="slider-item openParam" data-param="' + url + '"' + 'data-baidu-action="banner" data-baidu-label="' + (parseInt(index) + 1) + '">' +
'<div class="img-wrap"><img class="banner-image" src="' + item["image"] + '"/></div></li>';
});
html += '</ul>';
return html;
},
3. css样式代码
注意:部分图片资源需要更换。
.slider-wrap {
width: 100%;
position: relative;
overflow: hidden;
}
.slider-list {
display: -webkit-box;
width: 100%;
height: 100%;
}
.slider-item {
width: 100%;
list-style: none;
}
.slider-item a {
display: block;
}
.slider-item img {
width: 100%;
}
.transitionable {
-webkit-transition: all 0.3s ease-in-out;
}
.slider-page {
width: 100%;
position: absolute;
bottom: 5px;
left:;
text-align: center;
}
.slider-page ul {
display: inline-block;
text-align: center;
}
.slider-page ul li {
display: inline-block;
vertical-align: top;
width: 6px;
height: 6px;
margin: 0 5px;
border-radius: 50%;
background: rgba(255, 255, 255, .5)
}
.slider-page ul li.active {
background: #fff
}
.img-wrap {
width: 100%;
height: 100%;
background: #fafafa url("../images/loading.gif") no-repeat center center;
}
4. 插件原代码:
已经测试,jQuery和Zepto都适用。
/*
* slider
*/
;
(function($) {
$.extend($.fn, {
slider: function(obj) {
this.each(function() {
// 当前Zepto对象
var $self = $(this);
var dom = {
"wrap": $self.find(".slider-list"),
"item": $self.find(".slider-item"),
"firstItem": $self.find(".slider-item").first(),
"lastItem": $self.find(".slider-item").last(),
"pagelist": null,
"pageItem": null,
};
var settings = {
"len": dom.item.length,
"width": dom.wrap.width(),
"startX": 0,
"startY": 0,
"index": obj ? (obj.infinite ? 1 : 0) : 0,
"distance": 0,
"timer": null,
"autoScroll": obj ? (obj.autoScroll ? true : false) : false,
"infinite": obj ? (obj.infinite ? true : false) : false
};
var funs = {
init: function() {
if (settings.len > 1) {
funs.initUI();
funs.bindEvent();
if (settings.autoScroll) {
settings.timer = setInterval(funs.autoAnimate, 3000);
}
}
},
initUI: function() {
if (settings.infinite) {
var cloneFisrt = dom.firstItem.clone();
var cloneLast = dom.lastItem.clone();
dom.wrap.append(cloneFisrt);
cloneLast.insertBefore(dom.firstItem);
}
funs.creatPage();
dom.item = $self.find(".slider-item");
settings.count = dom.item.length;
settings.distance = settings.width / 5;
if (settings.infinite) {
dom.wrap.css("-webkit-transform", "translate3d(" + -settings.width + "px,0,0)");
}
},
creatPage: function() {
var pagelist = '<div class="slider-page"><ul>';
for (var i = 0; i < settings.len; i++) {
if (i == 0) {
pagelist += '<li class="active"></li>';
} else {
pagelist += '<li></li>';
}
}
pagelist += '</ul></div>';
$self.append(pagelist);
dom.pagelist = $self.find(".slider-page");
dom.pageItem = dom.pagelist.find("li");
},
bindEvent: function() {
$self.off().on({
"touchstart": function(e) {
e.stopPropagation();
clearInterval(settings.timer);
settings.startX = e.touches ? e.touches[0].pageX : e.originalEvent.touches[0].pageX;
settings.startY = e.touches ? e.touches[0].pageY : e.originalEvent.touches[0].pageY;
},
"touchmove": function(e) {
e.stopPropagation();
e.preventDefault();
var curX = e.touches ? e.touches[0].pageX : e.originalEvent.touches[0].pageX;
var curY = e.touches ? e.touches[0].pageY : e.originalEvent.touches[0].pageY;
var moveX = curX - settings.startX;
var moveY = curY - settings.startY;
//避免禁用了下拉事件
if (Math.abs(moveY) > Math.abs(moveX)) {
window.event.returnValue = true;
}
var x = -settings.index * settings.width + moveX;
dom.wrap.css("-webkit-transform", "translate3d(" + x + "px,0,0)");
},
"touchend": function(e) {
e.stopPropagation();
var curX = e.changedTouches ? e.changedTouches[0].pageX : e.originalEvent.changedTouches[0].pageX;
var moveX = curX - settings.startX;
if (Math.abs(moveX) >= settings.distance) {
settings.index = settings.index - Math.abs(moveX) / moveX; //判断是向左还是向右
}
if (settings.index >= settings.count - 1) {
settings.index = settings.count - 1;
}
if (settings.index <= 0) {
settings.index = 0;
}
funs.animate();
if (settings.autoScroll) {
settings.timer = setInterval(funs.autoAnimate, 3000);
}
},
"touchcancel": function(e) {
dom.wrap.css("-webkit-transform", "translate3d(" + -settings.index * settings.width + "px,0,0)");
},
"webkitTransitionEnd": function(e) {
e.stopPropagation();
e.preventDefault();
dom.wrap.removeClass("transitionable");
if (settings.infinite) {
if (settings.index <= 0) {
settings.index = settings.count - 2;
}
if (settings.index >= settings.count - 1) {
settings.index = 1;
}
}
var itemIndex = settings.infinite ? settings.index - 1 : settings.index;
dom.pageItem.removeClass("active");
dom.pageItem.eq("" + itemIndex + "").addClass("active");
dom.wrap.css("-webkit-transform", "translate3d(" + -settings.index * settings.width + "px,0,0)");
}
});
$(window).on({
"resize": function() {
funs.adjustPos();
},
"orientationchange": function() {
funs.adjustPos();
}
})
},
adjustPos: function() {
settings.width = dom.wrap.width();
settings.distance = settings.width / 5;
dom.wrap.css("-webkit-transform", "translate3d(" + -settings.index * settings.width + "px,0,0)");
},
animate: function() {
dom.wrap.addClass("transitionable");
dom.wrap.css("-webkit-transform", "translate3d(" + -settings.index * settings.width + "px,0,0)");
},
autoAnimate: function() {
if (settings.width > 0) {
settings.index++;
funs.animate();
}
}
}; funs.init();
});
return this;
}
});
})(window.jQuery || window.Zepto);
移动端轮播图插件(支持Zepto和jQuery)的更多相关文章
- 原生js写一个无缝轮播图插件(支持vue)
轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端.因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使 ...
- vue轮播图插件之vue-awesome-swiper
移动端轮播图插件,在使用iview图形界面插件中的carousel组件无法实现触摸滑动后,转而使用vue-awesome-swiper插件 1.npm安装 npm i vue-awesome-swip ...
- 第124天:移动web端-Bootstrap轮播图插件使用
Bootstrap JS插件使用 > 对于Bootstrap的JS插件,我们只需要将文档实例中的代码粘到我们自己的代码中> 然后作出相应的样式调整 Bootstrap中轮播图插件叫作Car ...
- 移动端轮播图vue-awesome-swiper
日常写设计文档,日常写Demo,写轮播图的时候觉得bootstrap不适合移动端,或者说不是轻量级的,于是换成Swiper,但是写的时候才发现怎么把这东西嵌到Vue里面啊? Σ( ° △ °|||)︴ ...
- js 原生轮播图插件
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ReactNative新手学习之路04 组件化开发轮播图swiper支持安卓和IOS
react native 新手之路04 组件化开发轮播图swiper支持安卓和IOS npm install react-native-carousel --save git 地址Properties ...
- 原生js实现简单移动端轮播图
最近项目不是很忙,自己就用原生js写了一个简单的移动端轮播图的小demo,可实现自动轮播和手势滑动轮播,然后就把它记录到个人博客里.还有很多不足的地方,希望多多指出,以便改进. 1.代码部分 分为四个 ...
- 学习笔记: js插件 —— SuperSlide 2 (轮播图插件,PC用)
SuperSlide 2 轮播图插件,较老.但还好用. 适用于PC,是绑定到jquery上的方法: $.slide(); 如果在实际中找不到.slide方法,请检查jquery等.js文件的引入次序 ...
- 封装一个简单的原生js焦点轮播图插件
轮播图实现的效果为,鼠标移入左右箭头会出现,可以点击切换图片,下面的小圆点会跟随,可以循环播放(为了方便理解,没有补2张图做无缝轮播).本篇文章的主要目的是分享封装插件的思路. 轮播图我一开始是写成非 ...
随机推荐
- ProgressBar 各种样式
多式样ProgressBar 普通圆形ProgressBar 该类型进度条也就是一个表示运转的过程,例如发送短信,连接网络等等,表示一个过程正在执行中. 一般只要在XML布局中定义就可以了. < ...
- Heritrix源码分析(二) 配置文件order.xml介绍(转)
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/613412 本博客已迁移到本人独立博客: http://www.yun5u. ...
- html中的特殊符号
html中的特殊符号 符号 说明 编码 符号 说明 编码 符号 说明 编码 " 双引号 " × 乘号 × ← 向左箭头 ← & AND符号 & ÷ 除号 ÷ ...
- Arduino 使用舵机库时 其它引脚输出怪异 解决方案
使用Servo.h时,不管你在初始化时用的是9还是10脚,都不要把这两个脚作为舵机以外的用途! 例: servo.attach(9); digitalWrite(10,1);//错,不能把第10脚用作 ...
- Karel运行环境配置
1.下载 见http://wenku.baidu.com/view/24762ced998fcc22bcd10d5e.html 2.界面空白问题 问题:运行Karel后,发现整个界面空白一片,没有任何 ...
- [再寄小读者之数学篇](2014-11-26 广义 Schur 分解定理)
设 $A,B\in \bbR^{n\times n}$ 的特征值都是实数, 则存在正交阵 $P,Q$ 使得 $PAQ$, $PBQ$ 为上三角阵.
- C++重要知识点小结---3
C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...
- android edittext不弹出软键盘
方法一: 在AndroidMainfest.xml中选择哪个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden 例如:< ...
- Drupal 7.23:函数drupal_alter()注释
/** * Passes alterable variables to specific hook_TYPE_alter() implementations. * * This dispatch fu ...
- 自动抓取java堆栈
参数1 进程名字,参数2 最大线程数 例: pid为8888,达到1000个线程时自动抓取堆栈信息 ./autojstack.sh 8888 1000 & #!/bin/bashfileNam ...