前言:

    前段时间写下了之前那篇 3D图片轮播效果,后来发现了 Pedro Botelho 写的jquery.gallery.js ,于是重新修改了自己的这个图片轮播,使之可以成为一个插件来使用。

基于jquery.gallery.js 添加了 自适应图片数量,以及添加了 swipe-indicators 切换按钮

源代码:here

demo:here

具体使用:

 html结构:

    <div id="swipe">
<div class="swipe-wrapper">
<div class="swipe-list">
<a href="#">
<img src="https://y.gtimg.cn/music/common/upload/t_focus_info_iphone/67011.jpg" alt="" class="swipe_list_pic">
</a>
</div>
<ol class='swipe-indicator'>
<li data-index="0"></li>
<li data-index="1"></li>
<!-- .... -->
</ol>
<nav class="swipe-action">
<a href="#" class="prev"><span>&laquo;</span></a>
<a href="#" class='next'><span>&raquo;</span></a>
</nav>
</div>
</div>

通过javascript使用

$("#swipe").Swipe()

选项 Options:

Name Type Default
interval number   3000
autoplay boolean false
current number 0

初始化方法 :Swipe(options)

使用可选选项初始化轮播,然后开始循环播放项目。

$('#swipe').Swipe({
interval: 2000,
autoplay:true
})

原理分析:

Swipe插件的几个主要私有方法:

  _setItems():用于更新图片位置,五个主要元素,按照先后顺序分别为:this.$prevItem,this.$leftItem.this.$currentItem,this.$rightItem.this.$nextItem,顾名思义,大家很容易懂得

    // 更新图片位置
_setItems: function () {
this.$items.removeClass('current'); this.$currentItem = this.$items.eq(this.current)
.addClass('current');
this.$leftItem = (this.current === 0) ? this.$items.eq(this.itemsCount -
1) : this.$items.eq(this.current - 1); this.$rightItem = (this.current === this.itemsCount - 1) ? this
.$items
.eq(0) : this.$items.eq(this.current + 1); //next & previous items
if (this.itemsCount > 3) {
// next item
this.$nextItem = (this.$rightItem.index() === this.itemsCount -
1) ?
this.$items.eq(0) : this.$rightItem.next(); // previous item
this.$prevItem = (this.$leftItem.index() === 0) ? this.$items
.eq(
this.itemsCount - 1) : this.$leftItem.prev();
}
},

根据this.current找到这五个元素,其他元素通过 opacity:0; 进行隐藏。

 _layout():定义样式

    _layout: function () {
// current, left and right items
this._setItems(); // current item is not changed
// left and right one are rotated and translated
this.$leftItem.css(this._getCoordinates('left'));
this.$rightItem.css(this._getCoordinates('right'));
this.$currentItem.css(this._getCoordinates('center')); this.$nextItem.css(this._getCoordinates('outright'));
this.$prevItem
.css(this._getCoordinates('outleft')); // 定义indicators样式,当前索引 高亮背景
this.$indicators.eq(this.current)
.css('background', 'rgb(244, 67, 54)')
.siblings()
.css("background", "rgba(0, 0, 0, 0.2)");
},

 _getCoordinates(position):接受一个position参数,获取位置值,返回_layout()所需要的样式;【可通过修改此处的样式,自定义自己所需要的轮播效果】

  具体看源代码

_loadEvent():初始化绑定各种事件

_slide(dir):接受一个滑动方向,用于图片滑动。根据滑动方向,调整this.current的索引,然后调用this._layout()进行图片位置更新和样式变化

  _slide: function (dir) {
if (this.isAnim)
return false;
this.isAnim = true;
this.$items.addClass("swipe-transition");
switch (dir) {
case 'next':
this.current = this.$rightItem.index();
this._layout();
break;
case 'prev':
this.current = this.$leftItem.index();
this._layout();
break;
};
}

_switchItems():主要是用于indicators的切换图片

_cycle(): 定义一个定时器,用于图片循环

_cycle: function () {
  var _self = this;   this.$cycle = setTimeout(function () {
 _self._slide('next');
 if (_self.options.autoplay) {
_self._cycle();
}
}, this.options.interval);
}

利用$.fn实现Swipe方法,看Jquery源码便可知:$.fn=$.prototype

$.fn.Swipe = function (options) {
if (options === undefined) options = {};
if (typeof options === 'object') {
this.each(function () {
// jQuery.data( element, key, value )
var instance = $.data(this, 'Swipe');
if (!instance) {
$.data(this, 'Swipe', new $.Swipe(options, this));
}
});
} else {
this.each(function () {
var instance = $.data(this, 'Swipe');
if (instance) {
switch (options) {
case 'cycle':
instance._cycle();
instance.options.autoplay = true;
break;
case 'stop':
instance._stopCycle();
instance.options.autoplay = false;
break;
case 'next':
instance._slide('next');
break;
case 'prev':
instance._slide('prev');
break;
default:
logError("no such method '" + options +
"' for Swipe instance");
break;
}
} else {
logError(
"cannot call methods on Swipe prior to initialization; " +
"attempted to call method '" + options + "'");
return;
}
});
}
return this;
};

此处给jQuery对象添加了一个Swipe()方法,接受一个可选选项,通过  $("#id").Swipe();  可声明一个Swipe轮播对象,当Swipe对象初始化成功后,即可通过传入 string类型,调用API

// 可选方法
$("#id").Swipe('cycle')
循环通过旋转木马项目从左到右。 $("#id").Swipe('stop')
停止旋转木马循环播放项目。 $("#id").Swipe('prev')
循环到上一个项目。 $("#id").Swipe('next')
循环到下一个项目。

 结束语

刚才在爱脚本网,发现了自己的这篇博文,因此重新附下此句版权声明

  版权声明:本文为博主原创文章,未经博主允许不得转载。

实现一个3D图片轮播插件 —— 更新版的更多相关文章

  1. Javascript和jQuery WordPress 图片轮播插件, 内容滚动插件,前后切换幻灯片形式显示

    用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美的图片轮播效果,希望这些插件 ...

  2. 12款经典的白富美型—jquery图片轮播插件—前端开发必备

    图片轮播是网站中的常用功能,用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美 ...

  3. AdPlayBanner:功能丰富、一键式使用的图片轮播插件

    AdPlayBanner:功能丰富.一键式使用的图片轮播插件 AdPlayBanner是一个Android平台基于ViewPager实现的轮播图插件,主要用以自动或者手动地播放轮播图,提供了Fresc ...

  4. PgwSlideshow-基于Jquery的图片轮播插件

    0 PgwSlideshow简介 PgwSlideshow是一款基于Jquery的图片轮播插件,基本布局分为上下结构,上方为大图轮播区域,用户可自定义图片轮播切换的间隔时间,也可以通过单击左右方向按键 ...

  5. JQuery插件之图片轮播插件–slideBox

    来源:http://www.ido321.com/852.html 今天偶然发现了一个比较好用的图片轮播插件—slideBox 先看看效果:http://slidebox.sinaapp.com/ 代 ...

  6. 结构-行为-样式-requireJs实现图片轮播插件

    最近工作需要,就自己写了一个图片轮播插件,不过想到要集成到框架中,于是又用RequireJs改了一遍. 主要文件: style.css jquery-1.11.1.min.js require.js ...

  7. 面板支持单个,多个元素的jQuery图片轮播插件

    一.先附上demo <!doctype html> <html> <head> <meta charset="utf-8"> < ...

  8. jquery做一个小的轮播插件---有BUG,后续修改

    //首页无缝轮播 ; (function($, window, document, undefined) { $.fn.slider = function(options) { var default ...

  9. Nivo Slider - 世界上最棒的 jQuery 图片轮播插件

    Nivo Slider 号称世界上最棒的图片轮播插件,有独立的 jQuery 插件和 WordPress 插件两个版本.目前下载量已经突破 1,800,000 次!jQuery 独立版本的插件主要有如 ...

随机推荐

  1. Vim高手,从来不用鼠标2——替换、撤销、缩进、查找

    本文章原创首发于公众号:编程三分钟 vim 替换.撤销.缩进.查找 上一次我们掌握了移动.跳转.定位.操作(删除.复制.粘贴),基本使用vim脱离鼠标完全是可以做到的了.速记如下: 移动: h,l,j ...

  2. lightoj 1173 - The Vindictive Coach(dp)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1173 题解:像这种题目显然可以想到n为几时一共有几种排列可以递推出来.然后就是 ...

  3. lightoj 1201 - A Perfect Murder(树形dp)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1201 题解:简单的树形dp,dp[0][i]表示以i为根结点不傻i的最多有多少 ...

  4. CodeForces 103 D Time to Raid Cowavans

    Time to Raid Cowavans 题意:一共有n头牛, 每头牛有一个重量,m次询问, 每次询问有a,b 求出 a,a+b,a+2b的牛的重量和. 题解:对于m次询问,b>sqrt(n) ...

  5. 字符编码与gcc 编译器的编码问题

    最近在 vscode 中借助 gcc 编译器来配置 c 语言开发环境时,发现中文编码存在乱码问题.再加上最近学习到多字节字符与宽字符,搅在一起,搞得很乱,就把自己的理解写下来,供有需者参考吧. 1. ...

  6. ☆1003 Dijstra

    循环N次 算法分为两部分: 1)找到距离最小的城市,找不到距离更小的城市时退出方法 2)更新距离 实际操作时,先初始化: 更新dis为INF,更新dis[start] = 0: 变种: 找最短路径的条 ...

  7. MPA JS CSS预处理方案

    1.WebPack 添加配置文件webpack.config.js,直接在当前目录运行 webpack. var basepath = '/root/webapps/happ'; var glob = ...

  8. 简单粗暴详细讲解javascript实现函数柯里化与反柯里化

    函数柯里化(黑人问号脸)???Currying(黑人问号脸)???妥妥的中式翻译既视感:下面来一起看看究竟什么是函数柯里化: 维基百科的解释是:把接收多个参数的函数变换成接收一个单一参数(最初函数的第 ...

  9. 深入拆解Java虚拟机视频教程

    目录: 第1节说在前面的话   00:05:07分钟   | 第3节环境搭建以及jdk,jre,jvm的关系   00:20:48分钟   | 第5节jvm再体验-jvm可视化监控工具   00:21 ...

  10. Go语言标准库之template

    html/template包实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出.它提供了和text/template包相同的接口,Go语言中输出HTML的场景都应使用text/templa ...