移动端轮播图插件(支持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张图做无缝轮播).本篇文章的主要目的是分享封装插件的思路. 轮播图我一开始是写成非 ...
随机推荐
- Solr单机部署和集群部署
用到的相关jar包:http://pan.baidu.com/disk/home#list/path=%2Fsolr Solr目录结构 Solr 目录 Contrib :solr 为了增强自身的功能, ...
- ios ViewController 页面跳转
从一个Controller跳转到另一个Controller时,一般有以下2种: 1.利用UINavigationController,调用pushViewController,进行跳转:这种采用压栈和 ...
- OpenLayers调用ArcGIS Server发布的WFS服务
OpenLayers调用ArcGIS Server发布的WFS服务 原创: 蔡建良 2013-08-20 一. 开发环境 1) Openlayers2.13+arcgis server9.3 2) W ...
- Linux获取时间日期方法
linux中用shell获取昨天.明天或多天前的日期:在Linux中对man date -d 参数说的比较模糊,以下举例进一步说明:# -d, --date=STRING display time d ...
- php 处理透明背景的图片时的问题
PHP图象处理之透明背景的gif和png图片的一些问题 1,直接读取有透明背景的PNG格式文件,然后直接输出,背景变成了黑色,gif则没有这种情况. 解决方法:使用 imagesavealpha ...
- Fragment监听返回键
首先创建一个抽象类BackHandledFragment,该类有一个抽象方法onBackPressed(),所有BackHandledFragment的子类在onBackPressed方法中处理各自对 ...
- Java并发编程-关卡
CyclicBarrier 直译过来叫循环栅栏,它主要的方法就是一个:await().await() 方法没被调用一次,计数便会减少1,并阻塞住当前线程.当计数减至0时,阻塞解除,所有在此 Cycli ...
- Linux 下部署单机 hadoop 测试
最终运行结果展示: 格式化namenode. 开始测试 显示测试进程 浏览器查看效果展示:(虽然还不清楚是什么意思,但是能看到这个效果已经很开心了) 话不多说,进入主题: 1. 安装 VMwareSt ...
- 类 .xml
pre{ line-height:1; color:#1e1e1e; background-color:#d2d2d2; font-size:16px;}.sysFunc{color:#627cf6; ...
- 14个最受欢迎的Python开源框架
本文从GitHub中整理出的14个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Dja ...