多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
下面是我周末写得一个jQuery的轮播插件,这是一个经常会用到的功能,首次开发插件,有什么不足之处,请大家指正。 此插件可以传递参数,只是没有提供修改默认参数值的方法,后期会继续改进。 打算再继续开发jQuery手风琴和放大镜效果的插件。 ### jquery轮播图插件 ~~~ /** * * @authors Yvette Lau * @date 2015-11-1 16:26:27 * @version $1.0$ * **/ (function($){ $.carousel = { carousel: function(_obj, _srcArray, _options){ /*默认样式*/ var defaults = { "div": { "width": "1000px", "height": "400px", "position": "relative", "cursor": "pointer" }, "img": { "width": _obj.css("width"), "height": _obj.css("height"), "display":"none" }, "ul": { "list-style" : "none", "position": "absolute", "bottom": "20px", "margin": "0px", "padding": "0px 0px" }, "li":{ "float": "left", "width": "10px", "height": "10px", "border": "2px solid #FFFFFF", "border-radius": "10px", "padding": "0px 0px", "margin-left": "10px" }, "indexClick":{ "backgroundColor": "#FFFFFF" }, "a":{ "width": "60px", "text-align": "center", "font-size": "30px", "font-weight": "normal", "font-family": "Microsoft Yahei", "text-decoration": "none", "color": "#000000", "height": parseInt(_obj.css("height"))/5 + "px", "position": "absolute", "top": 2 * parseInt(_obj.css("height"))/5 + "px", "line-height": parseInt(_obj.css("height"))/5 + "px", "display": "none", "cursor": "pointer", "user-select": "none", "opacity": 0.7 }, "nextPicture": { "background": "#FFFFFF", "background-repear": "no-repeat", "background-size": "cover", "right": "20px" }, "prePicture": { "background": "#FFFFFF", "background-repear": "no-repeat", "background-size": "cover", "left": "20px" }, "interval":{ "period" : 2000 } }; /*如果传递参数*/ if(_options){ for(var i in defaults){ $.extend(defaults[i], _options[i]); } } $.carousel.initCarousel(_obj, _srcArray, defaults); //初始化轮播div的样式 $.carousel.insertImage(_obj,_srcArray, defaults); //插入图片,并设置样式 $.carousel.insertIndex(_obj,_srcArray, defaults); //插入index,并设置样式 $.carousel.insertButtons(_obj,_srcArray, defaults); //插入上一张、下一张按钮,并设置样式 $.carousel.loopImages(_obj, _srcArray, defaults); //设置定时器循环播放 }, /********************************************************** * 初始化div的样式 * ***********************************************************/ initCarousel: function(_obj, _src, _defaults){ var _default = _defaults.div;//默认的div宽高及定位 _default.width = _obj.css("width") || _default.width; _default.height = _obj.css("height") || _default.height; /*设置div的定位*/ _default.position = _obj.css("position") == "static" ? _default.position : _obj.css("position"); $.carousel.setCss(_obj, _default); /*鼠标移入div,和移出div*/ _obj.hover(function(){ $(this).find("a").css({"display": "block"}); clearInterval(window.carouselTimer); },function(){ $(this).find("a").css({"display": "none"}); $.carousel.loopImages(_obj, _src, _defaults); //setInterval(window.carouselTimer); }) }, /********************************************************** * 插入图片 * ***********************************************************/ insertImage: function(_obj, _imgsrc, _defaults){ for(var i = 0; i < _imgsrc.length; i++){ var $img = $("<img>"); $img.attr({"idnex":i}); $img.attr({"src":_imgsrc[i]}).appendTo(_obj); } $.carousel.initImgStyle(_obj,_defaults);//初始化图片样式 }, /********************************************************** * 初始化图片样式 * ***********************************************************/ initImgStyle: function(_obj, _defaults){ var $images = _obj.find("img"); $.carousel.setCss($images, _defaults.img); $.carousel.setCss($images.eq(0),{"display":"block"});/*显示第一张图片*/ }, /********************************************************** * 插入ul li * ***********************************************************/ insertIndex: function(_obj, _imgsrc, _defaults){ var $ul = $("<ul>"); $ul.attr("id","carouselIndex");/*给ul加上id = "index"的属性*/ $ul.appendTo(_obj); for(var i = 0; i < _imgsrc.length; i++){ var $li = $("<li>"); $li.appendTo($("#carousel ul")); } $.carousel.initIndexStyle(_obj,_imgsrc, _defaults); }, /********************************************************** * 初始化index的样式 * ***********************************************************/ initIndexStyle: function (_obj, _imgsrc, _defaults){ /*ul定位*/ $.carousel.setCss($("#carouselIndex"), _defaults.ul); /*li的样式*/ $.carousel.setCss($("#carouselIndex li"), _defaults.li); /*设置圆圈水平方向居中*/ var _ulWidth = $("#carouselIndex").width(); var _carouselWidth = _obj.width(); var _left = (_carouselWidth - _ulWidth)/2; $.carousel.setCss($("#carouselIndex"),{"margin-left":_left}); /*设置第一个的圆圈被选中*/ $.carousel.setCss($("#carouselIndex li").eq(0),{"background-color": _defaults.indexClick.backgroundColor}); /*绑定点击事件*/ $("#carouselIndex li").click(function(){ $.carousel.indexClick($(this).index(), _obj, _imgsrc, _defaults); }); }, /********************************************************** * 插入上一张、下一张按钮 * ***********************************************************/ insertButtons: function(_obj, _imgsrc, _defaults){ var _next = $("<a>"); var _pre = $("<a>"); var reg = /^url/; /*按钮的背景不为图片时*/ if(!reg.test(_defaults.nextPicture.background)){ _next.text(">"); } if(!reg.test(_defaults.prePicture.background)){ _pre.text("<"); } _next.attr({"id":"nextPicture"}); _pre.attr({"id":"prePicture"}); _next.appendTo(_obj); _pre.appendTo(_obj); $.carousel.initButtonstyle(_obj, _next, _pre, _imgsrc, _defaults); }, /********************************************************** * 初始化上一张、下一张按钮样式 * ***********************************************************/ initButtonstyle: function (_obj, _next, _pre, _imgsrc, _defaults){ /*设置按钮竖直方向居中*/ var _carHeight= _obj.height(); $.carousel.setCss(_obj.find("a"), _defaults.a); /*对上一张按钮和下一张按钮定位*/ $.carousel.setCss(_obj.find("#nextPicture"), _defaults.nextPicture); $.carousel.setCss(_obj.find("#prePicture"), _defaults.prePicture); /*绑定点击事件*/ _next.on("click",function(){$.carousel.nextPicture(_obj, _imgsrc, _defaults)}); _pre.on("click",function(){$.carousel.prePicture(_obj, _imgsrc, _defaults)}); }, /********************************************************** * 设置元素样式 * ***********************************************************/ setCss: function(_objElements,options){ for (var i = 0; i < _objElements.length; i++) { for(var cs in options){ _objElements.eq(i).css(cs, options[cs]); } } }, /********************************************************** * 设置定时器播放 * ***********************************************************/ loopImages: function(_obj, _imgsrc, _defaults){ window.carouselTimer = setInterval(function(){ _obj.find("img").each(function(){ if($(this).css("display") == "block"){ return index = $(this).index(); } }); ++index; _obj.find("img").eq(index).css({"display": "block"}).siblings("img").css({"display":"none"}); _obj.find("#carouselIndex li").eq(index).css({"background-color": _defaults.indexClick.backgroundColor}).siblings("li").css({"background":"none"}); if(index == _imgsrc.length){ index = 0; _obj.find("img").eq(0).css({"display":"block"}).siblings("img").css({"display":"none"}); _obj.find("#carouselIndex li").eq(0).css({"background-color": _defaults.indexClick.backgroundColor}).siblings("li").css({"background":"none"}); } }, _defaults.interval.period); }, /********************************************************** * 当点击下一张按钮 * ***********************************************************/ nextPicture: function(_obj, _imgsrc, _defaults){ clearInterval(window.carouselTimer); _obj.find("img").each(function(){ if($(this).css("display") == "block"){ return index = $(this).index(); } }); index = (index == _imgsrc.length - 1) ? 0 : ++index; _obj.find("img").eq(index).css({"display":"block"}).siblings("img").css({"display":"none"}); _obj.find("#carouselIndex li").eq(index).css({"background-color": _defaults.indexClick.backgroundColor}) .siblings("li").css({"background":"none"}); }, /********************************************************** * 当点击上一张按钮 * ***********************************************************/ prePicture: function(_obj, _imgsrc, _defaults){ clearInterval(window.carouselTimer); _obj.find("img").each(function(){ if($(this).css("display") == "block"){ return index = $(this).index(); } }); index = (index == 0 ) ? _imgsrc.length - 1 : --index; _obj.find("img").eq(index).css({"display":"block"}).siblings("img").css({"display":"none"}); _obj.find("#carouselIndex li").eq(index).css({"background-color": _defaults.indexClick.backgroundColor}) .siblings("li").css({"background":"none"}); }, /********************************************************** * 当底部的index被选中时 * ***********************************************************/ indexClick: function(_index, _obj, _imgsrc, _defaults){ _obj.find("img").eq(_index).css({"display":"block"}).siblings("img").css({"display":"none"}); _obj.find("#carouselIndex li").eq(_index).css({"background-color": _defaults.indexClick.backgroundColor}) .siblings("li").css({"background":"none"}); } } })(jQuery); ~~~ ### 轮播图插件调用。 首先包含jquery.js的库,引入此上面的插件文件。 下面是我测试时,所编写的Html文档,此插件非常简单易用,只需要定义一个div即可。 ~~~ <!doctype html> <html lang="en"> <head> <!--网站编码格式,UTF-8 国际编码,GBK或 gb2312 中文编码--> <meta charset="UTF-8"> <meta name="Keywords" content="关键词一,关键词二"> <meta name="Description" content="网站描述内容"> <meta name="Author" content=""> <title>Document</title> <style> #carousel{ width:1200px; height:350px; } </style> <!--css js 文件的引入--> </head> <body> <div id = "carousel"> </div> </body> </html> <script type = "text/javascript" src = "jquery-1.11.2.min.js"></script> <script type = "text/javascript" src = "js/carousel_2.js"></script> <script type = "text/javascript"> $(function(){ var $carousel = $("#carousel"); var imgSrc = ["images/banner-1.jpg", "images/banner-2.jpg", "images/banner-3.jpg","images/banner-4.jpg","images/banner-5.jpg"]; //$.carousel.carousel($carousel, imgSrc); //$.carousel.carousel($carousel, imgSrc, {"interval": {"period": 1000}}); $.carousel.carousel($carousel, imgSrc, {"a": {"display": "none"}}); // $.carousel.carousel($carousel, imgSrc,{"indexClick":{"backgroundColor": "#FF0000"}, // "li":{"border": "2px solid #09FF2E"}, // "prePicture":{"background":"url(images/alarm.png)"}}); // $.carousel.carousel($carousel, imgSrc,{"indexClick":{"backgroundColor": "#FF0000"}, // "li":{"border": "2px solid #09FF2E"}, // "prePicture":{"background":"url(images/alarm.png)"}, // "nextPicture":{"background":"url(images/alarm.png)"}}); }); </script> ~~~