移动端轮播图插件(支持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张图做无缝轮播).本篇文章的主要目的是分享封装插件的思路. 轮播图我一开始是写成非 ...
随机推荐
- Java核心技术II读书笔记(二)
ch2 XML 有两种XML文档结构,DTD和Schema,用解释文档构成规则,这些规则指定了每个元素俺的合法子元素和属性. DTD DTD有多种提供方式,可以像下面这样加到XML中: <?xm ...
- jQuery基础知识--Form基础
form中的单行文本获取和失去焦点 <!DOCTYPE html> <html> <head lang="en"> <meta chars ...
- 定制Bootstrap遇到无法下载的解决——Blob下载注意事项
今天定制bootstrap(在这里),全部的勾都选过了,于是兴高采烈地点击“编译并下载”.等了一会儿,迅雷7跳出来了“新建下载任务”,但是它居然说这个url不合法! url像这样: blob:http ...
- AJAX overrideMimeType作用
我们经常在AJAX代码中发现如下代码: if (http_request.overrideMimeType) { http_request.overrideMimeType("te ...
- Folding
题意: 给定一个串,求能化成的最短循环节串(把重复字符串转化成循环节形式) 分析: 不是太好想,如果让求最短长度还好,dp[i][j],表示区间[i,j]化成的最小长度,dp[i][j]=min(dp ...
- android开发中遇到的bug
这种NullPointerException这么解决啊 Activity.dispatchTouchEvent 里try catch一下 参考:http://www.eoeandroid.com/th ...
- TCP/IP 相关知识点与面试题集
第一部分:TCP/IP相关知识点 对TCP/IP的整体认 链路层知识点 IP层知识点 运输层知识点 应用层知识点 (这些知识点都可以参考:http://www.cnblogs.com/newwy/p/ ...
- PHP获取curl的错误
curl_error($ch) 用 curl_error 来获取 curl 的错误
- [转]https方式使用git保存密码的方式
https方式每次都要输入密码,按照如下设置即可输入一次就不用再手输入密码的困扰而且又享受https带来的极速 设置记住密码(默认15分钟): git config --global credenti ...
- Flex SDK包内文件夹内容说明
打开SDK目录,让我们看看SDK中都包含了哪些内容: ant包含Flex对Ant的支持库,JAR和Java源码都有,方便我们基于Ant完成对项目的构建 asdoc基于ASDOC我们可以很方便的生成代码 ...