一. 效果图

二. 功能介绍

  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)的更多相关文章

  1. 原生js写一个无缝轮播图插件(支持vue)

    轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端.因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使 ...

  2. vue轮播图插件之vue-awesome-swiper

    移动端轮播图插件,在使用iview图形界面插件中的carousel组件无法实现触摸滑动后,转而使用vue-awesome-swiper插件 1.npm安装 npm i vue-awesome-swip ...

  3. 第124天:移动web端-Bootstrap轮播图插件使用

    Bootstrap JS插件使用 > 对于Bootstrap的JS插件,我们只需要将文档实例中的代码粘到我们自己的代码中> 然后作出相应的样式调整 Bootstrap中轮播图插件叫作Car ...

  4. 移动端轮播图vue-awesome-swiper

    日常写设计文档,日常写Demo,写轮播图的时候觉得bootstrap不适合移动端,或者说不是轻量级的,于是换成Swiper,但是写的时候才发现怎么把这东西嵌到Vue里面啊? Σ( ° △ °|||)︴ ...

  5. js 原生轮播图插件

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. ReactNative新手学习之路04 组件化开发轮播图swiper支持安卓和IOS

    react native 新手之路04 组件化开发轮播图swiper支持安卓和IOS npm install react-native-carousel --save git 地址Properties ...

  7. 原生js实现简单移动端轮播图

    最近项目不是很忙,自己就用原生js写了一个简单的移动端轮播图的小demo,可实现自动轮播和手势滑动轮播,然后就把它记录到个人博客里.还有很多不足的地方,希望多多指出,以便改进. 1.代码部分 分为四个 ...

  8. 学习笔记: js插件 —— SuperSlide 2 (轮播图插件,PC用)

    SuperSlide 2  轮播图插件,较老.但还好用. 适用于PC,是绑定到jquery上的方法: $.slide(); 如果在实际中找不到.slide方法,请检查jquery等.js文件的引入次序 ...

  9. 封装一个简单的原生js焦点轮播图插件

    轮播图实现的效果为,鼠标移入左右箭头会出现,可以点击切换图片,下面的小圆点会跟随,可以循环播放(为了方便理解,没有补2张图做无缝轮播).本篇文章的主要目的是分享封装插件的思路. 轮播图我一开始是写成非 ...

随机推荐

  1. java-读properties配置文件

    package com.test; import java.util.HashMap; import java.util.Map; import org.apache.commons.configur ...

  2. unity, 在保持场景根节点Transform不变且Hierarchy结构不变的前提下整体旋转场景

    比如我们摆出下面结构: 其Hierarchy如下: 其中根节点road的Transform是如下干净的原始状态: 现在想保持road的Hierarchy和Transform都不变的情况下将road旋转 ...

  3. PHP中设置、使用、删除Cookie方法

    1.设置Cookie PHP用SetCookie函数来设置Cookie.必须注意的一点是:Cookie是HTTP协议头的一部分,用于浏览器和服务器之间传递信息,所以必须在任何属于HTML文件本身的内容 ...

  4. informatica9.5.1资源库为machine in exclusive mode(REP_51821)

    错误信息: [PCSF_10007]Cannot connect to repository [Rs_RotKang] because [REP_51821]Repository Service is ...

  5. C# 使用NPlot绘图技巧

    原文 C# 使用NPlot绘图技巧 图表控件一直是很难找的,特别是免费又强大的.NPlot是一款非常难得的.Net平台下的图表控件,能做各种曲线图,柱状图,饼图,散点图,股票图等,而且它免费又开源,使 ...

  6. 使用python三方库xlrd解析excel数据

    excel是平常用的比较多的一种数据格式,而在自动化测试过程中,解析其数据以供脚本使用就是一个重要的工作,幸好已有现存的三方库供使用,而不必重新造轮子. 一.安装xlrd模块 到python官网下载h ...

  7. Div 自适应屏幕大小

    http://blog.csdn.net/wodetiankong516/article/details/7827256 Background      有时, 我们需要将div或者其他的Elemen ...

  8. cocos2dx 2.x版本:简化提炼tolua++绑定自定义类到lua中使用

    cocos2dx的3.x版本已经提供了更好地绑定方式,网上有很多相关的教程,这里给一个链接:http://www.cocoachina.com/bbs/read.php?tid=196416. 由于目 ...

  9. mybatis系列-16-spring和mybatis整合

    16.1     整合思路 需要spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSess ...

  10. Hadoop 集群常见错误

    这里将自己在初识hadoop过程中遇到的一些错误做一个简单总结: (一)启动hadoop集群时易出现的错误: 错误现象:java.net.NoRouteToHostException: No rout ...