jQuery图片无缝轮播插件;

图片轮播这种效果在web开发中看常见,网上的插件也有很多,最近在整理项目的过程中,把之前的图片轮播效果整合了一下,整理成一个可调用的插件以做记录,也方便更多前端爱好者来学习使用;
图片的轮播原理很简单,无非是动画改变需要运动元素的top、left等值;先来看插件的基本代码:

/**
 * Created by jone on 2016/5/3.
 */
(function($){
	$.fn.slider=function(options){
		var defaults={
			width:1000,
			height:300,
			autoPlay: true,
			sliderArrow: true,
			sliderBar: true,
			speed: 3000,
			effect: 'horizontal',
			responsive: false ,
			callback: function() {},

		}
		var obj = $.extend(defaults, options);
		var index=0;
		var timer=null;
		
		this.each(function(index, el) {
			var me = $(this);
			if (obj.responsive) {
				var parent = me.parent();
				me.css('width', parent.width())
				me.children("ul").find("li").css('width', me.width())
			} else {
				me.css({
					width: obj.width,
					height: obj.height,
				})
				me.children("ul").find("li").css({
					width: obj.width,
					height: obj.height,
				})
			}
			var li_width = me.children("ul").find("li").width();
			var li_height = me.children("ul").find("li").height();
			var li_length = me.children("ul").find("li").length;

			me.children("ul").css({
				position: 'absolute',
				left: 0,
				top: 0,
				width: li_width * li_length
			})
			me.children("ul").find("li").css("float","left"); 
			if (obj.sliderArrow) {
				var btn = "<span class='btn prev'><</span>" + '' + "<span class='btn next'>></span>"
				me.append(btn);
				me.find(".btn").hide();
				me.find(".prev").click(function() {
					index--;
					if (index < 0) {
						index = li_length - 1
					}
					moveIndex(index);
				})
				me.find(".next").click(function() {
					index++;
					if (index > li_length - 1) {
						index = 0
					}
				 
					moveIndex(index);

				})
			};
			if (obj.sliderBar) {
				var bar = "<em class='bar'></em>";
				me.append(bar);
				for (var i = 0; i < li_length; i++) {
					me.find('.bar').append('<i></i>')
				};
				me.find('.bar i').eq(0).addClass('on');
				me.find('.bar').css('marginLeft', -me.find('.bar').outerWidth() / 2);
				me.find('.bar i').on("mouseenter", function() {
					index = $(this).index();
					moveIndex(index)
				})
			};
			if (obj.autoPlay) {
				clearInterval(timer)
				timer = setInterval(autoMove, obj.speed);
			}

			me.hover(function() {
				clearInterval(timer);
				me.find(".btn").fadeIn();
			}, function() {
				me.find(".btn").fadeOut();
				if (obj.autoPlay) {
					timer = setInterval(autoMove, obj.speed);
				} else {
					return
				}
			});

			function autoMove() {
				index++;
				if (index > li_length - 1) {
					index = 0
				}
				moveIndex(index);
			};

			function moveIndex(index) {
				switch(obj.effect.toLowerCase()) {
					case 'horizontal':
						me.children("ul").stop(true, true).animate({left: -index * li_width}, 800);
						me.find('.bar i').eq(index).addClass('on').siblings().removeClass('on');
						break;
					case 'vertical':
						me.children("ul").width(li_width);
						me.children("ul").find("li").css("float","none");
						me.children("ul").stop(true, true).animate({top: -index * li_height}, 800);
						me.find('.bar i').eq(index).addClass('on').siblings().removeClass('on');
						break;
					case 'fade':
						me.children("ul").width(li_width);
						me.children("ul").find("li").css({
							float:'none',
							position:'absolute',
							left:0,
							top:0,
						});
						me.children("ul").find("li").eq(index).fadeIn().siblings().fadeOut();
						me.find('.bar i').eq(index).addClass('on').siblings().removeClass('on');
						break;
				}
			}
		});
	}
})(jQuery)

插件的调用:

$("#slider1").slider({
	effect:'fade',
	width:730,
	height:454
});

插件基本API:

width:1000,             // 滚动容器宽;
height:300,             // 滚动容器高;
autoPlay: true,         // 默认开启自动滚动;
sliderArrow: true,      // 默认开启左右切换箭头;
sliderBar: true,        // 默认开启分页切换栏目;
speed: 3000,            // 速度;
effect: 'horizontal',   // 轮播效果,默认水平,有horizontal、vertical、fade供选择;
responsive: false ,     // 响应式,默认不开启;
callback: function() {},// 回调函数; 

直接来看DEMO吧:http://codepen.io/jonechen/pen/reQqGK

插件下载:https://files.cnblogs.com/files/jone-chen/jquery.slider.js.zip

posted @ 2016-05-03 14:57  Jone_chen  阅读(504)  评论(0编辑  收藏  举报