js实现图片轮播图(一)

一.实现原理

(1)将所有图片放在一个父容器div里面,通过display属性来设置图片的出现与隐藏;

(2)轮播图分为手动轮播和自动轮播;

手动轮播的重点是每次点击图片下方的小圆圈,获得它的索引号,并让与之对应索引号的图片显示,并且此时的小圆圈为高亮显示;

自动轮播:利用定时器setInterval(),来每隔一定的时间来播放一次图片。

(3)所有的基础知识:dom操作,定时器,事件运用。

二.轮播图页面布局:

<div id="content">   <!-- 总的父容器 -->

      <div class="carousel-inner">  <!-- 包含图片的容器 -->
      	    <div class="item "><img src="./img/lunbo1.jpg" alt="第一张图片"></div>
            <div class="item"><img src="./img/lunbo2.jpg" alt="第二张图片"></div>
            <div class="item"><img src="./img/lunbo3.jpg" alt="第三张图片"></div>
      </div>
      
  	 <!-- 图片下方的指示圆圈-->
  	 <ul class="carousel-indicators">
  	 	<li id=‘pic1‘>●</li>
  	 	<li id=‘pic2‘>●</li>
  	 	<li id=‘pic3‘>●</li>
  	 </ul>
  	 
  	 <!-- 图片左右方来回滚动图片的左右箭头-->
  	 <a href="#" class="carousel-control prev"><span><</span></a>
  	 <a href="#"  class="carousel-control next"><span>></span></a>
  	 
  </div>

三.轮播图的css样式:

   #content{
    width: 100%;
    height:500px;
    position: relative;
}
.carousel-inner{
    position: relative;
    width: 100%;
    overflow: hidden; 
    height:500px; 
}

.carousel-inner>.item>img{
   display: block; 
    line-height: 1;   
    z-index: 1;
}

.carousel-indicators{
    position: absolute;
    bottom:10px;
    left:45%;
    z-index: 2;
    list-style-type: none;
}
.carousel-indicators li{
    display:inline-block;
    padding: 0 15px;
    font-size: 24px;
    color:#999;    
    cursor: pointer;
    z-index: 2;
      
}
 .active1{
    font-size: 28px;
    color:#fff;
}
.carousel-control{
    position: absolute;
    text-decoration:none;
    color: #999;
    font-weight: bold;
    opacity: .5;
    font-size: 40px;
    z-index: 3;

}
.carousel-control:hover{
    color:fff;
    text-decoration: none;
    opacity: .9;
    outline: none;
    font-size: 42px;
}

.prev{
    top: 30%;   
    left:20px; 
}
.next{
    top:30%;
    right: 20px;
}

四.轮播图的js实现代码:

window.onload = function(){

	//轮播初始化
	  var lunbo  = document.getElementById(‘content‘);
	  var imgs = lunbo.getElementsByTagName(‘img‘);	 
	  var uls = lunbo.getElementsByTagName(‘ul‘);
          var lis = lunbo.getElementsByTagName(‘li‘);

      //初始状态下,一个圆圈为高亮模式

	      lis[0].style.fontSize = ‘26px‘;
	      lis[0].style.color = ‘#fff‘;

	  //定义一个全局变量,用来进行自动轮播图片顺序的变化
	      var pic_index = 1;

	 //自动轮播.使用pic_time记录播放,可以随时使用clearInterval()清除掉。
	     var pic_time =  setInterval(autobofang,3000);

       //手动轮播
	    for(var i=0;i<lis.length;i++){      
      	    lis[i].addEventListener("mouseover",change,false);

            }
     
    
      function change(event){  

             var event=event||window.event;
             var target=event.target||event.srcElement; 
             var children = target.parentNode.children;           
		  	 for(var i=0;i<children.length;i++){
		  	 	 if(target == children[i]){	  		     
		  		        picChange(i);   
		  		   }              
              
		  
		  	  }
  	     } 
  	     //图片切换函数
  	     function picChange(i){   

  	     	//让所有图片都不显示,所有圆圈都为普通样式
  	     	for(var j=0;j<imgs.length;j++){
		  		    imgs[j].style.display = ‘none‘;		           	                            lis[j].style.fontSize = ‘24px‘;
		  		    lis[j].style.color = ‘#999‘;
		  		}

             //让选中的索引的图片显示,对应的圆圈高亮  
		   imgs[i].style.display = ‘block‘; 	  		   	   
		   lis[i].style.fontSize = ‘26px‘;
		   lis[i].style.color = ‘#fff‘;		   	  
		  		   	 
  	     }
         
         //自动播放的事件处理
	     function autobofang(){
	     
	     	if(pic_index >= lis.length){
	    		pic_index = 0;
	    	}

	    		change1(pic_index);
	    		pic_index++;
	      }
	     //自动播放的图片转化中的事件
	    function change1(index){	  	 
                  
		  	 picChange(index);

                  //鼠标移入ul标签,自动播放图片暂停

		  	  uls[0].addEventListener("mouseover",pause,false);

		   //鼠标移出ul标签,自动播放图片继续

		  	  uls[0].addEventListener("mouseout",go,false);
		  	       
		}
       
       //自动播放暂停函数

       function pause(event){
       	    var event=event||window.event;
            var target=event.target||event.srcElement;
            switch(target.id){
            	case "pic1":
                    
                    clearInterval(pic_time);          
                    

            	break;
            	case "pic2":
                        
                      clearInterval(pic_time);
            	  

            	break;
            	case "pic3":
                    
            	     clearInterval(pic_time);
                     

            	break;
            }
       	   
       }
     
        //自动播放图片继续函数

         function go(event){
       	    var event=event||window.event;
            var target=event.target||event.srcElement;                  
            switch(target.id){
            	case "pic1":
                       
            	      pic_index = 1;  
            	      pic_time =  setInterval(autobofang,3000);
		  	         

            	break;
            	case "pic2":

                   pic_index = 2;                     
                   pic_time = setInterval(autobofang,3000);

            	break;
            	case "pic3":

            	    pic_index = 3;            	     
                    pic_time = setInterval(autobofang,3000);           	

            	break;
            }
       	   
       }
       }

五.效果图:

六.遇到的问题与不足

问题:当鼠标第一次移入ul标签时,自动轮播图片停止,鼠标移出,自动轮播继续,但是随着运行,轮播图片的变化速度越来越快,而且这时点击ul标签已经不起作用了。

问题原因:在后面停止轮播后再次轮播开始使用定时器的时候,没有给赋值给pic_time来记录,也就没有再次鼠标移到ul标签而清除定时器,因此导致再次点击ul标签不能暂停自动轮播播放,而且速度 越来越快。

不足:没有实现类似淘宝轮播图那样平滑过渡的无现滚动的效果,左右箭头的指示作用也没有完成。这些在后期会继续学习,继续来完善,来分享.

时间: 2024-10-20 02:12:24

js实现图片轮播图(一)的相关文章

定时图片轮播图

先是HTML部分 <div id="alternate"> <ul class="img_list clear"> <li><a href="#"><img src="1.jpg" /></a></li> <li><a href="#"><img src="2.jpg" /&

图片轮播图插件的使用 unslider!!!

1.百度图片轮播图unslider,第一个就会出现jquery unslider轮播图,点击进去,下载网站提供的文件,解压,内部有我们需要使用的各种js,图片等. 2.在自己的eclipse或者intellij idea中搭建一个可以正常运行的web工程 3.在WEB-INF下创建一个jsp文件夹,jsp文件夹下创建一个lunbo.jsp,颜色标记的代码是需要注意的!在WebRoot下创建js和img文件夹,存放js和所需要的图片. 页面的代码: <%@ page language="ja

原生JS实现简易轮播图

原生JS实现简易轮播图(渐变?) 最近做网页总是会用到轮播图,我就把之前写的轮播图单独拿出来吧,如果有...如果真的有人也需要也可以复制去用用啊..哈~.. window.onload = function() { var tab = 0; var loop_imgs = new Array("img/l1.jpg", "img/l2.jpg", "img/l3.jpg", "img/l4.jpg", "img/l5

JS+css3焦点轮播图PC端

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>js原生web轮播图</title> 6 <style> 7 *{ 8 margin:0; 9 padding:0; 10 list-style: none; 11 -moz-user-select: none;/*文字不可选

JS学习笔记--轮播图效果

希望通过自己的学习收获哪怕收获一点点,进步一点点都是值得的,加油吧!!! 本章知识点:index this for if else 下边我分享下通过老师教的方式写的轮播图,基础知识实现: 1.css代码 <style> ul, ol { padding:0; margin:0; } li { list-style:none; } #box { width:600px; height:350px; border:10px solid #ccc; margin:0 auto; position:r

原生 js 左右切换轮播图

使用方法: 可能很多人对轮播图感兴趣,下面奉上本人的 原生 js 轮播代码复制 js 到页面的最底部,样式在 css 里改,js 基本不用动,有什么不懂的可以 加本人 QQ172360937 咨询 或者留言都可以,这个是用 原生写的 轮播图,样式可以写自己喜欢的样式,什么都不用改,只改变样式就行,页面结构的id 要与js的相对应li随便加.li 随便加的意思就是说你可以加无数个图片.每个li 里装一个图片,或者是其他什么元素, <!doctype html> <html lang=&qu

photoSlider-html5原生js移动开发轮播图-相册滑动插件

简单的移动端图片滑动切换浏览插件 分别引用css文件和js文件 如: <link rel="stylesheet" type="text/css" href="css/photoSlider.min.css" /> <script src="js/photoSlider.min.js" type="text/javascript" charset="utf-8">

用JS做图片轮播

脚本之家 首页应用手游攻略教程 ﹤首页 >> 网络编程 >> JavaScript >> 网页特效 >> 图象特效 js 图片轮播(5张图片) 作者:mdxy-dxy 网上比较常见的用jquery实现的图片轮播效果代码. 演示地址:http://img.jb51.net/online/picPlayer/picplay.htm <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional/

CSS/HTML/JS实现图片轮播

实现原理 将点击的a标签的href属性值赋给img标签的src属性,这样有个好处,就是如果浏览器不支持js的话,点击a标签也可跳转到图片地址看到图片,不会影响内容的呈现 注:需要导入jquery库 html代码 <div class="banner"> <img src="1.png"> <ul> <li><a href="1.png">1</a></li> &l