一. 效果图

二. 功能介绍

  1. 支持图片自动轮播和非自动轮播

  2. 支持点击和滑动。

三. 简单介绍

  代码都有注释,逻辑简单,不做更多赘述。

  1. 在你的html中添加一行。

  1. <section class="slider-wrap" style="height:160px" id="banner"></section>

  2. 在你的处理页面逻辑的JS代码中添加以下代码:

    (1)先是动态加载html。

    (2)然后调用slider并且传入参数。

  1. // banner
  2. // bannerList结构:[{image: ..., url: ...}, {...}, {...}]
  3. var bannerList = ...;
  4. var bannerHTML = bannerList ? this.renderBanner(bannerList) : '';
  5. $("#banner").html(bannerHTML);
  6. $("#banner").slider({
  7. "autoScroll": true,
  8. "infinite": true
  9. });
  1. renderBanner: function(bannerList) {
  2. var html = '<ul class="slider-list">';
  3. $.each(bannerList, function(index, item) {
  4. var url = item["url"].match(/./) == '/' ? 'https://simu.dahuo.la' + item["url"] : item["url"];
  5. html += '<li class="slider-item openParam" data-param="' + url + '"' + 'data-baidu-action="banner" data-baidu-label="' + (parseInt(index) + 1) + '">' +
  6. '<div class="img-wrap"><img class="banner-image" src="' + item["image"] + '"/></div></li>';
  7. });
  8. html += '</ul>';
  9. return html;
  10. },

  3. css样式代码

    注意:部分图片资源需要更换。

  1. .slider-wrap {
  2. width: 100%;
  3. position: relative;
  4. overflow: hidden;
  5. }
  6.  
  7. .slider-list {
  8. display: -webkit-box;
  9. width: 100%;
  10. height: 100%;
  11. }
  12.  
  13. .slider-item {
  14. width: 100%;
  15. list-style: none;
  16. }
  17.  
  18. .slider-item a {
  19. display: block;
  20. }
  21.  
  22. .slider-item img {
  23. width: 100%;
  24. }
  25.  
  26. .transitionable {
  27. -webkit-transition: all 0.3s ease-in-out;
  28. }
  29.  
  30. .slider-page {
  31. width: 100%;
  32. position: absolute;
  33. bottom: 5px;
  34. left:;
  35. text-align: center;
  36. }
  37.  
  38. .slider-page ul {
  39. display: inline-block;
  40. text-align: center;
  41. }
  42.  
  43. .slider-page ul li {
  44. display: inline-block;
  45. vertical-align: top;
  46. width: 6px;
  47. height: 6px;
  48. margin: 0 5px;
  49. border-radius: 50%;
  50. background: rgba(255, 255, 255, .5)
  51. }
  52.  
  53. .slider-page ul li.active {
  54. background: #fff
  55. }
  56.  
  57. .img-wrap {
  58. width: 100%;
  59. height: 100%;
  60. background: #fafafa url("../images/loading.gif") no-repeat center center;
  61. }

  4. 插件原代码:

    已经测试,jQuery和Zepto都适用。

  1. /*
  2. * slider
  3. */
  4. ;
  5. (function($) {
  6. $.extend($.fn, {
  7. slider: function(obj) {
  8. this.each(function() {
  9. // 当前Zepto对象
  10. var $self = $(this);
  11. var dom = {
  12. "wrap": $self.find(".slider-list"),
  13. "item": $self.find(".slider-item"),
  14. "firstItem": $self.find(".slider-item").first(),
  15. "lastItem": $self.find(".slider-item").last(),
  16. "pagelist": null,
  17. "pageItem": null,
  18. };
  19. var settings = {
  20. "len": dom.item.length,
  21. "width": dom.wrap.width(),
  22. "startX": 0,
  23. "startY": 0,
  24. "index": obj ? (obj.infinite ? 1 : 0) : 0,
  25. "distance": 0,
  26. "timer": null,
  27. "autoScroll": obj ? (obj.autoScroll ? true : false) : false,
  28. "infinite": obj ? (obj.infinite ? true : false) : false
  29. };
  30. var funs = {
  31. init: function() {
  32. if (settings.len > 1) {
  33. funs.initUI();
  34. funs.bindEvent();
  35. if (settings.autoScroll) {
  36. settings.timer = setInterval(funs.autoAnimate, 3000);
  37. }
  38. }
  39. },
  40. initUI: function() {
  41. if (settings.infinite) {
  42. var cloneFisrt = dom.firstItem.clone();
  43. var cloneLast = dom.lastItem.clone();
  44. dom.wrap.append(cloneFisrt);
  45. cloneLast.insertBefore(dom.firstItem);
  46. }
  47. funs.creatPage();
  48. dom.item = $self.find(".slider-item");
  49. settings.count = dom.item.length;
  50. settings.distance = settings.width / 5;
  51. if (settings.infinite) {
  52. dom.wrap.css("-webkit-transform", "translate3d(" + -settings.width + "px,0,0)");
  53. }
  54. },
  55. creatPage: function() {
  56. var pagelist = '<div class="slider-page"><ul>';
  57. for (var i = 0; i < settings.len; i++) {
  58. if (i == 0) {
  59. pagelist += '<li class="active"></li>';
  60. } else {
  61. pagelist += '<li></li>';
  62. }
  63. }
  64. pagelist += '</ul></div>';
  65. $self.append(pagelist);
  66. dom.pagelist = $self.find(".slider-page");
  67. dom.pageItem = dom.pagelist.find("li");
  68. },
  69. bindEvent: function() {
  70. $self.off().on({
  71. "touchstart": function(e) {
  72. e.stopPropagation();
  73. clearInterval(settings.timer);
  74. settings.startX = e.touches ? e.touches[0].pageX : e.originalEvent.touches[0].pageX;
  75. settings.startY = e.touches ? e.touches[0].pageY : e.originalEvent.touches[0].pageY;
  76. },
  77. "touchmove": function(e) {
  78. e.stopPropagation();
  79. e.preventDefault();
  80. var curX = e.touches ? e.touches[0].pageX : e.originalEvent.touches[0].pageX;
  81. var curY = e.touches ? e.touches[0].pageY : e.originalEvent.touches[0].pageY;
  82. var moveX = curX - settings.startX;
  83. var moveY = curY - settings.startY;
  84. //避免禁用了下拉事件
  85. if (Math.abs(moveY) > Math.abs(moveX)) {
  86. window.event.returnValue = true;
  87. }
  88. var x = -settings.index * settings.width + moveX;
  89. dom.wrap.css("-webkit-transform", "translate3d(" + x + "px,0,0)");
  90. },
  91. "touchend": function(e) {
  92. e.stopPropagation();
  93. var curX = e.changedTouches ? e.changedTouches[0].pageX : e.originalEvent.changedTouches[0].pageX;
  94. var moveX = curX - settings.startX;
  95. if (Math.abs(moveX) >= settings.distance) {
  96. settings.index = settings.index - Math.abs(moveX) / moveX; //判断是向左还是向右
  97. }
  98. if (settings.index >= settings.count - 1) {
  99. settings.index = settings.count - 1;
  100. }
  101. if (settings.index <= 0) {
  102. settings.index = 0;
  103. }
  104. funs.animate();
  105. if (settings.autoScroll) {
  106. settings.timer = setInterval(funs.autoAnimate, 3000);
  107. }
  108. },
  109. "touchcancel": function(e) {
  110. dom.wrap.css("-webkit-transform", "translate3d(" + -settings.index * settings.width + "px,0,0)");
  111. },
  112. "webkitTransitionEnd": function(e) {
  113. e.stopPropagation();
  114. e.preventDefault();
  115. dom.wrap.removeClass("transitionable");
  116. if (settings.infinite) {
  117. if (settings.index <= 0) {
  118. settings.index = settings.count - 2;
  119. }
  120. if (settings.index >= settings.count - 1) {
  121. settings.index = 1;
  122. }
  123. }
  124. var itemIndex = settings.infinite ? settings.index - 1 : settings.index;
  125. dom.pageItem.removeClass("active");
  126. dom.pageItem.eq("" + itemIndex + "").addClass("active");
  127. dom.wrap.css("-webkit-transform", "translate3d(" + -settings.index * settings.width + "px,0,0)");
  128. }
  129. });
  130. $(window).on({
  131. "resize": function() {
  132. funs.adjustPos();
  133. },
  134. "orientationchange": function() {
  135. funs.adjustPos();
  136. }
  137. })
  138. },
  139. adjustPos: function() {
  140. settings.width = dom.wrap.width();
  141. settings.distance = settings.width / 5;
  142. dom.wrap.css("-webkit-transform", "translate3d(" + -settings.index * settings.width + "px,0,0)");
  143. },
  144. animate: function() {
  145. dom.wrap.addClass("transitionable");
  146. dom.wrap.css("-webkit-transform", "translate3d(" + -settings.index * settings.width + "px,0,0)");
  147. },
  148. autoAnimate: function() {
  149. if (settings.width > 0) {
  150. settings.index++;
  151. funs.animate();
  152. }
  153. }
  154. };
  155.  
  156. funs.init();
  157. });
  158. return this;
  159. }
  160. });
  161. })(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. Solr单机部署和集群部署

    用到的相关jar包:http://pan.baidu.com/disk/home#list/path=%2Fsolr Solr目录结构 Solr 目录 Contrib :solr 为了增强自身的功能, ...

  2. ios ViewController 页面跳转

    从一个Controller跳转到另一个Controller时,一般有以下2种: 1.利用UINavigationController,调用pushViewController,进行跳转:这种采用压栈和 ...

  3. OpenLayers调用ArcGIS Server发布的WFS服务

    OpenLayers调用ArcGIS Server发布的WFS服务 原创: 蔡建良 2013-08-20 一. 开发环境 1) Openlayers2.13+arcgis server9.3 2) W ...

  4. Linux获取时间日期方法

    linux中用shell获取昨天.明天或多天前的日期:在Linux中对man date -d 参数说的比较模糊,以下举例进一步说明:# -d, --date=STRING display time d ...

  5. php 处理透明背景的图片时的问题

    PHP图象处理之透明背景的gif和png图片的一些问题 1,直接读取有透明背景的PNG格式文件,然后直接输出,背景变成了黑色,gif则没有这种情况.   解决方法:使用 imagesavealpha ...

  6. Fragment监听返回键

    首先创建一个抽象类BackHandledFragment,该类有一个抽象方法onBackPressed(),所有BackHandledFragment的子类在onBackPressed方法中处理各自对 ...

  7. Java并发编程-关卡

    CyclicBarrier 直译过来叫循环栅栏,它主要的方法就是一个:await().await() 方法没被调用一次,计数便会减少1,并阻塞住当前线程.当计数减至0时,阻塞解除,所有在此 Cycli ...

  8. Linux 下部署单机 hadoop 测试

    最终运行结果展示: 格式化namenode. 开始测试 显示测试进程 浏览器查看效果展示:(虽然还不清楚是什么意思,但是能看到这个效果已经很开心了) 话不多说,进入主题: 1. 安装 VMwareSt ...

  9. 类 .xml

    pre{ line-height:1; color:#1e1e1e; background-color:#d2d2d2; font-size:16px;}.sysFunc{color:#627cf6; ...

  10. 14个最受欢迎的Python开源框架

    本文从GitHub中整理出的14个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Dja ...