最近做个商品详情页面,页面需要使用图片水平滚动,后面找了个jquery插件“bxCarousel.js”,感觉挺轻巧,但是只能实现水平滚动。
经过使用,对该插件做了些修改,对于width、height、border建议在列表UL中的li 或 a 或img三个中设置内行样式或属性,这样可以减少很多麻烦。比如jquery的outerWidth可能获取不到border的宽度,甚至获取不到width,我认为这跟 js执行顺序有关,.bx_wrap .bx_container两个div是动态生成,而框架的元码 以下将贴出该插件源码var ow = li.outerWidth(true);获取li宽度是在这两个div之前,而文中却用了这两个div的class去定位li的样式,这导致获取样式在前,设置样式在后的。
css源码,html源码,并会对固定写法做特别说明。
//标示做了修改的,请跟源插件比较。 (function($) { $.fn.bxCarousel = function(options) { var defaults = { move: 4, display_num: 4, speed: 500, margin: 0, auto: false, auto_interval: 2000, auto_dir: 'next', auto_hover: false, next_text: 'next', next_image: '', prev_text: 'prev', prev_image: '', controls: true }; var options = $.extend(defaults, options); return this.each(function() { var $this = $(this); var li = $this.find('li'); var first = 0; var fe = 0; var last = options.display_num - 1; var le = options.display_num - 1; var is_working = false; var j = ''; var clicked = false; li.css({ 'float': 'left', 'listStyle': 'none', 'marginRight': options.margin }); var ow = li.outerWidth(true); wrap_width = (ow * options.display_num) - options.margin; var seg = ow * options.move; var init_seg=0;//做了修改 $this.wrap('<div class="bx_container"></div>').width(999999); if (options.controls) { if (options.next_image != '' || options.prev_image != '') { //做了修改 var controls_left = '<a href="" class="prev"><img src="' + options.prev_image + '"/></a>'; var controls_right = '<a href="" class="next"><img src="' + options.next_image + '"/></a>'; } else { //做了修改 var controls_left = '<a href="" class="prev">' + options.prev_text + '</a>'; var controls_right = '<a href="" class="next">' + options.next_text + '</a>'; } } $this.parent('.bx_container').wrap('<div class="bx_wrap"></div>').css({ 'position': 'relative', 'width': wrap_width, 'overflow': 'hidden' }).before(controls_left).after(controls_right);//做了修改 var w = li.slice(0, options.display_num).clone(); var last_appended = (options.display_num + options.move) - 1; $this.empty().append(w); get_p(); get_a(); $this.css({ 'position': 'relative', 'left': -(init_seg) }); $this.parent().siblings('.next').click(function() { slide_next(); clearInterval(j); clicked = true; return false; }); $this.parent().siblings('.prev').click(function() { slide_prev(); clearInterval(j); clicked = true; return false; }); if (options.auto) { start_slide(); if (options.auto_hover && clicked != true) { $this.find('li').live('mouseenter', function() { if (!clicked) { clearInterval(j); } }); $this.find('li').live('mouseleave', function() { if (!clicked) { start_slide(); } }); } } function start_slide() { if (options.auto_dir == 'next') { j = setInterval(function() { slide_next() }, options.auto_interval); } else { j = setInterval(function() { slide_prev() }, options.auto_interval); } } function slide_next() { if (!is_working) { is_working = true; set_pos('next'); $this.animate({ left: '-=' + seg }, options.speed, function() { $this.find('li').slice(0, options.move).remove(); $this.css('left', -(seg)); get_a(); is_working = false; }); } } function slide_prev() { if (!is_working) { is_working = true; set_pos('prev'); $this.animate({ left: '+=' + seg }, options.speed, function() { $this.find('li').slice( - options.move).remove(); $this.css('left', -(seg)); get_p(); is_working = false; }); } } function get_a() { var str = new Array(); var lix = li.clone(); le = last; for (i = 0; i < options.move; i++) { le++ if (lix[le] != undefined) { str[i] = $(lix[le]); } else { le = 0; str[i] = $(lix[le]); } } $.each(str, function(index) { $this.append(str[index][0]); }); } function get_p() { var str = new Array(); var lix = li.clone(); fe = first; for (i = 0; i < options.move; i++) { fe-- if (lix[fe] != undefined) { str[i] = $(lix[fe]); } else { fe = li.length - 1; str[i] = $(lix[fe]); } } $.each(str, function(index) { $this.prepend(str[index][0]); }); } function set_pos(dir) { if (dir == 'next') { first += options.move; if (first >= li.length) { first = first % li.length; } last += options.move; if (last >= li.length) { last = last % li.length; } } else if (dir == 'prev') { first -= options.move; if (first < 0) { first = li.length + first; } last -= options.move; if (last < 0) { last = li.length + last; } } } }); } })(jQuery);
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="keywords" content="图片滚动,jquery插件" /> <meta name="description" content="Helloweba演示平台,演示XHTML、CSS、jquery、PHP案例和示例" /> <title>jQuery+CSS实现的图片滚动效果</title> <style type="text/css"> <!--class名字“bx_wrap”是固定写法,与插件中的js相呼应--> .bx_wrap { margin-left:auto; margin-right:auto; width:294px; border:10px solid #d3d3d3 clear: both; overflow: hidden; background-color:blue; } .bx_wrap .bx_container{ height:70px; } .bx_wrap .bx_container ul li { text-align:center; position:relative; top:10px; } .bx_wrap .bx_container ul img { padding.bx_wrap .bx_container:0px;
} ul li a:hover { text-decoration:none; color:#f30 } .bx_wrap a.prev { width:20px; height:24px; position:relative; top:23.5px; display:block; float:left; text-indent:-999em; background:url(img/arr_left.gif) no-repeat; } <!--class名字“bx_container ”是固定写法,与插件中的js相呼应--> .bx_container { float:left; } .bx_wrap a.next { width:20px; height:24px; position:relative; top:23.5px; display:block; float:right; text-indent:-999em; background:url(img/arr_right.gif) no-repeat; } </style> <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript" src="bxCarousel.js"></script> <script type="text/javascript"> $(function(){ $('#demo1').bxCarousel({ display_num: 4, move: 1, auto: true, controls: false, margin: 10, auto_hover: true }); $('#demo2').bxCarousel({ display_num: 4, move: 4, margin: 10 }); }); </script> </head> <body> <ul id="demo2" style="margin:0px; padding:0px;"> <!--img写width和height属性,不要写样式--> <li><a href="#"><img alt="#" width="56" height="50" src="img/s1.jpg" style="border:0px solid #ddd;"></a></li>
<li><a href="#"><img alt="#" width="56" height="50" src="img/s2.jpg" style="border:0px solid #ddd;"></a></li>
<li><a href="#"><img alt="#" width="56" height="50" src="img/s3.jpg" style="border:0px solid #ddd;"></a></li>
<li><a href="#"><img alt="#" width="56" height="50" src="img/s4.jpg" style="border:0px solid #ddd;"></a></li>
<li><a href="#"><img alt="#" width="56" height="50" src="img/s5.jpg" style="border:0px solid #ddd;"></a></li>
<li><a href="#"><img alt="#" width="56" height="50" src="img/s6.jpg" style="border:0px solid #ddd;"></a></li>
</ul> </body> </html>
上面的代码可以直接运行,但是不要忘记导入jquery的库文件。