现在的网页中,焦点图几乎是一块必备的元素了,无论淘宝,百度,还是腾讯,到处可见焦点图或是轮播图的身影,如果每次都是重头写一遍js,那未免太麻烦,多写几次估计都能背下来了。但在工作中,有时候效率很重要,对代码进行适当的封装可以使我们的工作事半功倍。
下面是一个我自己封装的焦点轮播图插件。功能方面,可左右翻页,可点击小的控制按钮翻页,当然,考虑到有时候设计图并没有这些元素,插件也自然把这两项功能封装成了可有可无。可控制循自动播放时间间隔和每次滚动所用时间,以及是否自动播放。调用方法如下:
1 2 3 4 5 6 7 8 9 10 |
$("#banner").sliderBanner({ next:".next", //下一帧按钮 prev:".prev", //上一帧按钮 showBox:".show ul", //滑块区 control:".control", //控制小点 conliClass:"sel", //控制小点当前帧样式 moveTime:600, //每一帧变化时的滑动时间,不设置时默认600ms autoTime:3000, //自动播放间隔时间,不设置时默认3000ms autoPlay:true //是否自动播放,不设置时默认为true }); |
当然,针对这个插件,有一个局限性,就是布局是固定结构的,这里所说的固定,是为了保证所有元件都在选择的ID盒子中,以实现多个轮播块之间互不影响。整体的布局应遵循下面这个层级关系。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<div class="banner" id="banner"> <a class="prev" href="javascript:void(0);"></a> <div class="show"> <ul class="clearfix"> <li> <a href="javascript:void(0);"> <img src="images/d8cb8a41a99c186d5d050d.jpg" alt="heheh"> <p>1贵州省委统战部2015年工作风生水起 亮点频出</p> </a> </li> <li> <a href="javascript:void(0);"> <img src="images/d8cb8a41a99c186d5d050d.jpg" alt="heheh"> <p>2贵州省委统战部2015年工作风生水起 亮点频出</p> </a> </li> <li> <a href="javascript:void(0);"> <img src="images/d8cb8a41a99c186d5d050d.jpg" alt="heheh"> <p>3贵州省委统战部2015年工作风生水起 亮点频出</p> </a> </li> <li> <a href="javascript:void(0);"> <img src="images/d8cb8a41a99c186d5d050d.jpg" alt="heheh"> <p>4贵州省委统战部2015年工作风生水起 亮点频出</p> </a> </li> </ul> </div> <a class="next" href="javascript:void(0);"></a> </div> |
样式方面,有几个相对定位和绝对定位也是必须的,这个我想大家都知道,不通过定位,是无法实现移动效果的,只能实现渐隐与渐现之类。之所以没把绝对定位的盒子层放到js中去自动添加,是为了防止当网页中该js文件加载失败时,焦点图的整个布局还是保持着一种良好的视觉,只是没有滚动而已,以不至于整个页面给人一种差的用户体验。样式部分:
1 2 3 4 5 6 7 8 9 10 11 |
.banner{width: 330px;height: 245px;position: relative;overflow: hidden;} .banner .show{width: 330px;height: 245px;overflow: hidden;} .banner .show ul{width: 2500px;position: absolute;top: 0;left: 0;} .banner .show ul li{display: block;float: left;} .banner .show ul li a{display: block;position: relative;font-size: 14px;} .banner .show ul li a img{width: 330px;height: 240px;} .banner .show ul li a p{display: block;width: 100%;height: 22px;background: url(images/pbg.png);position: absolute;left: 0;bottom: 0;font-family: "宋体";line-height: 22px;text-align: center;color: #fff;font-size: 13px;} .banner .show ul li a:hover p{text-decoration: underline;} .banner .prev,.banner .next{display: block;cursor: pointer;width: 20px;height: 40px;position: absolute;z-index: 5;top: 102px;background: url(images/arrow.png);} .banner .prev{left: 0;background-position: 0 0;} .banner .next{right: 0;background-position: -48px 0;} |
其实这部分是完全没必要贴出来的,因为设计图不同,样式就不同,贴出来的目的,无非是让前来阅读的人知道前面所说的那几个相对定位和绝对定位的关系。
后注:本人学js才一年多,上面的代码全部由我自己编写的网页中复制过来,代码能力可谓初出茅庐,如新手有看不懂的,还望理解,如果是大牛,莫见笑。当然了,大牛应该是不会看这种文章的,幻灯片这种小功能,闭着眼睛都能实现。
下面附上插件源码,如果有需要的朋友,还望在使用过程当中保留版权为谢。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
/* * sliderBanner 1.0 * Copyright (c) 2015 Veznlee * Date: 2015-12-17 * QQ:1328560691 * 简单的图片轮播,可控制自动播放与否及时间,左右点击功能可控,小图控制功能可控,可实现多屏。 */ ;(function($){ $.fn.sliderBanner = function(cjson){ var defaults = { autoPlay:true, //默认自动播放 autoTime:3000, //间隔时间3000 moveTime:600 //播放时间600 }; var opts = $.extend({},defaults, cjson), $this = $(this), g_next = $this.find(opts.next), //下一张 g_prev = $this.find(opts.prev), //上一张 g_showBox = $this.find(opts.showBox), //轮播区 g_control = $this.find(opts.control), //控制小图 g_conliClass = opts.conliClass, //控制小图选中样式 animateEnd = 1, timer = null; function addIndex(){ var showli = g_showBox.find("li"); for (var i=0; i<showli.length; i+=1){ showli.eq(i).attr("index",i); }; }; addIndex(); function nextscroll() { var offset = (g_showBox.find("li").outerWidth(true)) * -1; g_showBox.stop(true,true).animate({ left: offset }, opts.moveTime, function() { var firstItem = g_showBox.find("li").first(); g_showBox.append(firstItem); $(this).css("left", "0px"); if (g_control){ circle(); }; }); }; function circle() { var currentItem = g_showBox.find("li").first(); var currentIndex = currentItem.attr("index"); g_control.find("li").removeClass(g_conliClass); g_control.find("li").eq(currentIndex).addClass(g_conliClass); }; function auto(){ timer = setInterval(function(){ nextscroll(); },opts.autoTime); }; if(g_prev){ g_prev.click(function() { if (timer){ clearInterval(timer); }; g_showBox.stop(true,true); var offset = (g_showBox.find("li").outerWidth(true) * -1); var lastItem = g_showBox.find("li").last(); g_showBox.prepend(lastItem); g_showBox.css("left", offset); g_showBox.animate({ left: "0px" }, opts.moveTime, function() { if (g_control){ circle(); }; }); }).mouseout(function(){ if (opts.autoPlay){ auto(); }; }); }; if(g_next){ g_next.click(function() { if (timer){ clearInterval(timer); }; g_showBox.stop(true,true); nextscroll() }).mouseover(function(){ if (timer){ clearInterval(timer); }; }).mouseout(function(){ if (opts.autoPlay){ auto(); }; }); }; if(g_control){ g_control.find("li").mouseover(function() { clearInterval(timer); g_showBox.stop(true,true); if (animateEnd == 0) { return } $(this).addClass(g_conliClass).siblings().removeClass(g_conliClass); var nextindex = $(this).index(); var currentindex = g_showBox.find("li").first().attr("index"); var curr = g_showBox.find("li").first().clone(); if (nextindex > currentindex) { for (var i = 0; i < nextindex - currentindex; i++) { var firstItem = g_showBox.find("li").first(); g_showBox.append(firstItem) } g_showBox.prepend(curr); var offset = (g_showBox.find("li").outerWidth(true)) * -1; if (animateEnd == 1) { animateEnd = 0; g_showBox.stop().animate({ left: offset }, opts.moveTime, function() { g_showBox.find("li").first().remove(); g_showBox.css("left", "0px"); animateEnd = 1 }) } } else { var curt = g_showBox.find("li").last().clone(); for (var i = 0; i < currentindex - nextindex; i++) { var lastItem = g_showBox.find("li").last(); g_showBox.prepend(lastItem) } g_showBox.append(curt); var offset = (g_showBox.find("li").outerWidth(true)) * -1; g_showBox.css("left", offset); if (animateEnd == 1) { animateEnd = 0; g_showBox.stop().animate({ left: "0px" }, opts.moveTime, function() { g_showBox.find("li").last().remove(); animateEnd = 1 }) } } }).mouseout(function(){ if (opts.autoPlay){ auto(); }; }); }; if(opts.autoPlay){ auto(); }; g_showBox.mouseover(function(){ if (timer){ clearInterval(timer); }; }).mouseout(function(){ if (opts.autoPlay){ auto(); }; }); } })(jQuery); |
插件很实用,收下了