原理:使用insertBefore和insertAfter方法调整图片顺序。

测试:firefox/chrome/IE11正常

已知不足:每次播放均使用了一次insertBefore和insertAfter,可考虑在最后一张图的时候将前几张图片整体后移。以后有空再优化。

1、HTML结构

alt的值将作为图片的描述信息出现在infobox里。

<div class="outerbox"><div><a href="http://www.baidu.com"><img src="img/img1.jpg" alt="JavaScript高级程序设计"></a><a href="http://www.w3school.com.cn/"><img src="img/img2.jpg" alt="油藏工程原理与方法"></a><a href="http://www.cnblogs.com/zczhangcui/"><img src="img/img3.jpg" alt="高等数学第六版上册"></a><a href="http://cn.bing.com/"><img src="img/img4.jpg" alt="银河帝国2:基地与帝国"></a><a href="http://cn.bing.com/academic/?FORM=Z9LH2"><img src="img/img5.jpg" alt="三体"></a><a href="http://cn.bing.com/dict/?FORM=HDRSC6"><img src="img/img6.jpg" alt="计算机科学导论"></a></div>
</div>

2、CSS

为方便轮播组件复用,大部分CSS样式包含在了jq组件中,所以在CSS中只需设置outerbox容器的高度和宽度。

.outerbox{height: 500px;width: 800px;
}

3、jquery轮播插件。

给每个图片设置了data-idx属性来标识它们,使infobox能够与每个图片对应。

// 定义了DOM对象的slideShow()方法,
// 调用条件:外层容器内部嵌套一个容器,内层容器内放入a标签包裹的img元素,
// 调用方法:$("外层容器").slideShow(形参),可传入0~1个实参,
// 实参说明:一个设定颜色和轮播间隔的对象。形如{color:"#ff7",time:5000},对象可接受0~2个属性。
;(function($){$.fn.extend({"slideShow":function(args){//如果传入一个包含设置参数的对象,那么覆盖默认值var settings=jQuery.extend({color:"#317EF3",time:5000}, args);var i,$outerbox=$(this),$imgs=$outerbox.find('img'),adTimer=null,$innerbox=$outerbox.children('div'),imgnum=$imgs.length,imgwidth=$outerbox.width(),imgheight=$outerbox.height();//给每个图片设置data-idx属性标识它们,使其能够和infobox相对应for(i=0;i<imgnum;i++){$imgs.eq(i).attr('data-idx', i);}//设置各个div的css样式
            $imgs.css({float: 'left',border: 'none'});$outerbox.css({overflow: 'hidden',position: 'relative'});$innerbox.css({width: imgwidth*imgnum+"px",position: 'absolute',left:'0',top:'0'});//在outerbox下新增一个显示alt的divvar infobox=$("<div class='infobox'></div>");$outerbox.append(infobox);var $infobox=$outerbox.children('.infobox');$infobox.css({position: 'absolute',left: '0',bottom:'0',width:imgwidth+10+"px",height:'13%'});var liheight=$infobox.height();var lists="";for(i=0;i<imgnum;i++){lists+="<li><a href=''><span></span></a></li>";}var ullists=$("<ul>"+lists+"</ul>");$infobox.append(ullists);$infobox.find('ul').css({height: liheight+"px",paddingLeft:'0',marginTop:'0',marginBottom:'0'});$infobox.find('li').css({display: 'inline-block',float:'left',marginRight:'3px',background: "rgba(0,0,0,0.4)",height:liheight+"px",width:(imgwidth-(imgnum-1)*3)/imgnum+"px",lineHeight:liheight+'px',verticalAlign:'middle'});$infobox.find('a').css({display: 'inline-block',width:$infobox.find('li').width()+"px",textAlign:'center'});$infobox.find('span').css({display:'inline-block',lineHeight:'1.1em',paddingLeft:liheight*0.2+"px",paddingRight:liheight*0.2+"px",verticalAlign: 'middle',color:'#ddd',fontSize:'12px',wordBreak:'break-all',height:'2.2em',overflow:'hidden'});//获得img上层a的href属性,赋给infobox里的a元素for(i=0;i<imgnum;i++){var link=$innerbox.children('a').eq(i).attr("href");var info=$innerbox.find('img').eq(i).attr("alt");$infobox.find('a').eq(i).attr('href', link);if(info){$infobox.find('span').eq(i).append(info);}else{$infobox.find('span').eq(i).append(i+1);}}//增加左右箭头var arrows=$('<div class="leftarrow arrow">&lt;</div><div class="rightarrow arrow">&gt;</div>');$outerbox.append(arrows);var $arrows=$outerbox.children('.arrow');$arrows.css({width:liheight*0.8+"px",height: liheight*1.5+"px",position:'absolute',top:(imgheight*0.5-liheight*0.75-10)+"px",background: "rgba(0,0,0,0.4)",textAlign:'center',lineHeight:liheight*1.45+'px',fontSize:'1.5em',color:'#ddd',cursor:'pointer'});$outerbox.children('.leftarrow').css('left', '0');$outerbox.children('.rightarrow').css('right', '0');//鼠标放在箭头上时,箭头变色$outerbox.children('.leftarrow').hover(function() {$(this).css('background', settings.color);}, function() {$(this).css('background', 'rgba(0,0,0,0.4)');});$outerbox.children('.rightarrow').hover(function() {$(this).css('background', settings.color);}, function() {$(this).css('background', 'rgba(0,0,0,0.4)');});//点击左右箭头var dataidx;$infobox.find('li').eq(0).css('backgroundColor', settings.color).siblings().css('background', 'rgba(0,0,0,0.4)');$outerbox.on('click', '.arrow', function(event) {if ($(event.target).hasClass('rightarrow')) {if (!$innerbox.is(':animated')) {dataidx=$innerbox.find('a:first').next("a").find('img').attr("data-idx");$infobox.find('li').eq(dataidx).css('backgroundColor', settings.color).siblings().css('background', 'rgba(0,0,0,0.4)');$innerbox.animate({left:-imgwidth}, "normal",function(){$innerbox.find('a:first').insertAfter($innerbox.find('a:last'));$innerbox.css('left', '0');});    }}if ($(event.target).hasClass('leftarrow')) {if (!$innerbox.is(':animated')) {$innerbox.find('a:last').insertBefore($innerbox.find('a:first'));$innerbox.css('left', -imgwidth);$innerbox.animate({left:0}, "normal");dataidx=$innerbox.find('a:first').find('img').attr("data-idx");$infobox.find('li').eq(dataidx).css('backgroundColor', settings.color).siblings().css('background', 'rgba(0,0,0,0.4)');}}});//自动轮播,鼠标放在div上时箭头出现,移走箭头消失$outerbox.hover(function() {$outerbox.find('.leftarrow').stop().animate({left:"0"},300);$outerbox.find('.rightarrow').stop().animate({right:"0"},300);$infobox.stop().animate({bottom:"0"}, 300);if (adTimer) {clearInterval(adTimer);}}, function() {$outerbox.find('.leftarrow').stop().animate({left:-liheight*0.8+"px"},300);$outerbox.find('.rightarrow').stop().animate({right:-liheight*0.8+"px"},300);$infobox.stop().animate({bottom:-(liheight-7)+"px"}, 300);adTimer=setInterval(function () {$outerbox.find('.rightarrow').trigger('click');},settings.time);}).trigger('mouseleave');//鼠标放在下方的颜色块上时移动图片$infobox.find('li').mouseover(function() {var index=$(this).index();var dataidx=$innerbox.find('a:first').find('img').attr("data-idx");$infobox.find('li').eq(index).css('backgroundColor', settings.color).siblings().css('background', 'rgba(0,0,0,0.4)');if(index-dataidx>0){for(i=0;i<Math.abs(index-dataidx);i++){$innerbox.find('a:first').insertAfter($innerbox.find('a:last'));}}else if(index-dataidx<0){for(i=0;i<Math.abs(index-dataidx);i++){$innerbox.find('a:last').insertBefore($innerbox.find('a:first'));}}});return this;}});
})(jQuery);

4、引入jq和该插件,并设置outerbox的宽度和高度,便可以实现滑动循环切换的轮播效果。

$(function(){$(".box").slideShow({color:'red'});
});

转载于:https://www.cnblogs.com/zczhangcui/p/6194351.html

滑动轮播图实现最后一张图片无缝衔接第一张图片相关推荐

  1. 图片首尾衔接自动轮播,实现最后一张图片无缝衔接第一张图片

    直接看效果吧,符合各位需求就拿走 上代码:主要就wxss来控制 .graphic-list{width: 100%;height: 280rpx;position: relative;backgrou ...

  2. 原生js进阶版轮播图实现(走马灯效果,无缝衔接)

    原生js进阶版轮播图实现(走马灯效果,无缝衔接) 利用原生js手写一个轮播图,是上一篇文章的简易版的一个进阶,本次轮播图主要是利用定位和定时器实现了走马灯效果,并且是左右轮播.实现过程与代码也是很简单 ...

  3. html 轮播图_JS拖拽专题(二)——「实战」滑动轮播图的那点事儿

    欢迎来到我的JS拖拽专题系列文章,更多精彩内容持续更新中,欢迎关注 :) 上一章节我们说到了在js中拖拽的基本原理,即我们在鼠标按下的时候计算出鼠标位置和物理的位置的差值,这个差值在移动的过程中不恒定 ...

  4. siwper vue 上下滑动分页_支持移动端的vue滑动轮播图插件vueswiper

    一款支持移动端的vue滑动轮播图插件vueswiper,演示页面给出了5中范例:基本例子.垂直滚动.不定宽度.无缝循环滚动.多层级滚动,每一种都可以通过鼠标拖动图片来滑动,可以点击按钮来增加页面查看效 ...

  5. vue纵向 轮播_vue滑动轮播图插件vueswiper

    插件描述:vue滑动轮播图插件,支持移动端拖拽滑动 vue-concise-slider,一个简单的滑动组件,配置简单,支持自适应/全屏+按钮+分页,同时兼容移动端和PC端 版本 v2.1.2 支持v ...

  6. 纯JS实现左右滑动轮播图

    效果图 (完整代码在最下面) 轮播图的功能要求 每次只显示一张图片 轮播图需要实现左右无缝切换 需要实现跳转(放在圆点显示对应图片) 当前图片的小圆点样式需要突出 当鼠标放在图片上时,轮播停止 在切换 ...

  7. php滑动轮播效果,js实现移动端手指滑动轮播图效果

    本文主要为大家分享一篇js原生实现移动端手指滑动轮播图效果的示例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧,希望能帮助到大家. 如下所示: Document html{heigh ...

  8. js轮播图片小圆点变化_纯js实现轮播图,详解(简单,无缝,小圆点,左右手动切换,自动轮动)...

    无论用什么语言开发可视化界面,都有一个叫轮播图的东西.我们现在有个需求,如图: slideshow1.PNG 左右切换按钮默认为隐藏,当鼠标进入图片时,左右切换按钮时显示的,当鼠标离开图片时左右切换按 ...

  9. 自动滑动图片html5,html+css+js 实现自动滑动轮播图

    轮播图 *{ margin: 0 auto; padding: 0; list-style: none;  //去圆点 } .one { width: 1200px; height:350px; ma ...

最新文章

  1. Emacs自带的小游戏
  2. webpack devServer
  3. JPA / Hibernate实体状态转换的初学者指南
  4. java迭代器逆序_迭代器
  5. HTML中id、name、class 区别
  6. MySQL计算表字段长度LENGTH
  7. 【系统自启动】使用windows自带工具管理开机启动项
  8. ++递归 字符串全排列_一文看懂全排列算法
  9. 颜值与特色并存!各大高校“中秋限定款”月饼刷屏,你酸了吗?
  10. 如何制作录屏gif动态图
  11. 计算机视觉大佬--何凯明
  12. 火灾报警(烟雾火焰检测)-STM8L
  13. desktop window manager
  14. 转:ARM 与RealView
  15. html格式转换word清除格式,Word2010怎么清除格式?word清除格式(图文)教程
  16. mybatis plus 常见问题Invalid bound statement (not found)
  17. WebQQ 2018(一)第一次登录
  18. 《黄帝内经》的理论体系
  19. 电脑(Windows)常用快捷键
  20. 黑马—private关键字-封装

热门文章

  1. c语言链表找姓,急啊!!!求救了 C语言编一个链表,输出姓名和学号就好
  2. 《一起学习rgbdSLAM》中g2o部分报错的问题
  3. php上传图片到文件夹,2018.09.14PHP获取页面上传的图片存到指定文件夹再存到数据库中...
  4. php代码中怎么插入地图,php插入地图
  5. 电脑记事本在哪_【锦囊站第002期】电脑一秒内完成文件搜索是如何实现的?
  6. qchart折现图_Qt Charts 动态实时折线图绘制
  7. php父类的静态变量,抽象父类中的PHP静态变量:问题是在示例代码中!
  8. 使用Python,OpenCV,本地二进制模式(LBP)进行人脸识别
  9. Linux那些事儿 之 戏说USB(13)接口是设备的接口(二)
  10. MSP430低功耗模式-while循环失效