1. 程式人生 > >用原生JS 寫Web首頁輪播圖

用原生JS 寫Web首頁輪播圖

get ext ++ posit containe add adding time 按鈕

目前自己在學習JS中,用目前學到的東西寫了一個輪播圖,能完整的實現輪播圖的功能,但是肯定還是有不完善的地方,也希望大家能留言交流,一起學習。

技術分享圖片

一、思路

首先將功能一個一個理順,主要功能分為三大塊:

(一)點擊左右按鈕,實現更換圖片並循環。

(二)圖片自動定時切換,當鼠標在圖片上時暫停切換,移出時恢復。

(三)輪播圖上導航點變換與點擊切換

二、實現

HTML和CSS的代碼如下:

<!doctype html>
<head>
	<title>輪播圖</title>
	<meta charset="utf-8">
	<style>
		*{
			padding:0;
			margin:0;
			box-sizing: content-box;
			text-decoration: none;
		}
		
		#container {
			width:600px;
			height:300px;
			border:1px red solid;
			overflow: hidden;
			position: relative;
		}
		
		#list {
			position: absolute;
			z-index: 1;
			width: 3000px;
		}
	
		#list img {
			width: 600px;
			height: 300px;
			padding: 0;
			margin: 0;
		}
		
		#prev {
			position: absolute;
			top: 40%;
			left: 0;
			height:70px;
			width: 30px;
			z-index: 2;
		}
		
		#next {
			position: absolute;
			top: 40%;
			right: 0;
			height:70px;
			width: 30px;
			z-index: 2;
		}
		
		#list-buttons {
			position: absolute;
			bottom: 5%;
			z-index: 2;
			width:600px;
			text-align: center;
		}
		
		#list-buttons span{
			display: inline-block;
			width: 10px;
			height: 10px;
			background-color: #ffffff;
			border-radius: 100%;
		}
      
        #list-buttons .on{
            background-color: #b2b2b2;
        }
	</style>
</head>
<body>
	<div id="container">
		<div id="list" style="left: 0px;"> <!-- 0px為初始位置 -->
			<img src="img-01.jpg" alt="1">
			<img src="img-02.jpg" alt="1">
			<img src="img-03.jpg" alt="1">
		</div>
		<div id="list-buttons">
			<span class="on"></span>
			<span></span>
			<span></span>
		</div>
		<div>
			<button id="prev" class="button" type="button"><</button>
			<button id="next" class="button" type="button">></button>
		</div>
	</div>
<body>

  

(一)左右按鈕切換圖片

首先取得操作切換圖片的元素:

var prev = document.getElementById(‘prev‘); 
var next = document.getElementById(‘next‘);

然後我用三張圖片組成了一串圖片條,以圖片條的左邊緣作為圖片的起始位置,通過不斷修改圖片的起始位置,從而讓圖片顯示在可顯示的區域裏。

這裏寫了兩個函數,分別對應左右的切換按鈕。

這裏圖片的寬段是600px,要點擊next按鈕讓圖片切換下一張,那就得在讓圖片條向左移動600px。為了讓切換的圖片能夠循環,當到達最後一張圖片的位置時,再點擊下一張按鈕,就會重置到第一張圖片,以此循環。

    var initial = parseInt(list.style.left); //listImage的初始數值

    function nextMove(){
        initial -= 600; //圖片向左滑動
          if(initial < -1200){
              initial = 0;
          }
        list.style.left = initial + ‘px‘;
        //調用dot函數,判斷當前點的位置
        dot(); 
      }
      
      function prevMove(){
        initial 
+= 600; //圖片向右滑動 if(initial > 0){ initial = -1200; } list.style.left = initial + ‘px‘; }

(二)圖片自動定時切換與當鼠標在圖片上時暫停切換,移出時恢復

要實現定時自動播放,那就得用window.setInterval()方法,在指定的時間間隔調用函數,同時將它返回的值賦給變量time,這裏就實現了自動切換。

var time = window.setInterval(nextMove, 2000);

.setInterval()方法還有一個對應的clearInterval()方法,用來取消調用函數。所以我就寫了一個函數,來判斷鼠標的狀態是移進還是移出,並給圖片區域綁定了事件處理程序,這樣當鼠標移進就會暫停,移出繼續。

     var container = document.getElementById(‘container‘);

    container.addEventListener(‘mouseenter‘, state, false);
      container.addEventListener(‘mouseleave‘, state, false);
      
      function state(eventName){
        switch(eventName.type){
          case ‘mouseenter‘:
            window.clearInterval(time);
            break;
            
          case ‘mouseleave‘:
            time = window.setInterval(nextMove, 2000);
            break;
        }
      }

(三)輪播圖上導航點變換與點擊切換

首先要實現點跟著圖片進行變換,所以聲明一個函數,判斷當前圖片條的位置,來對應設置相應位置的導航點樣式,並取消其他導航點的樣式。

   var listBtn = document.getElementsByTagName(‘span‘);

   function dot(){
        switch(initial){
          case 0:
            console.log(‘0px‘);
            listBtn[0].className = ‘on‘;
            listBtn[1].className = ‘‘;
            listBtn[2].className = ‘‘;
            break;

          case -600:
            console.log(‘-600px‘);
            listBtn[0].className = ‘‘;
            listBtn[1].className = ‘on‘;
            listBtn[2].className = ‘‘;
            break;

          case -1200:
            console.log(‘-1200px‘);
            listBtn[0].className = ‘‘;
            listBtn[1].className = ‘‘;
            listBtn[2].className = ‘on‘;
            break;
        }
      }

最後就是當點擊相應的導航點時,跳轉到對應的圖片上了。為此,我給每個導航點添加了一個索引屬性,再通過判斷點擊的是第幾個導航點,切換到對應的圖片位置就可以了。

for(let i = 0; i < listBtn.length; i++){
        listBtn[i].index = i;
        listBtn[i].addEventListener(‘click‘, function(){
          switch(listBtn[i].index){
            case 0:
              initial = 0;
              dot();
              list.style.left = ‘0px‘;
              break;
              
            case 1:
              initial = -600;
              dot();
              list.style.left = ‘-600px‘;
              break;
              
            case 2:
              initial = -1200;
              dot();
              list.style.left = ‘-1200px‘;
              break;
          }
        }, false);
      }

以上就是整個輪播圖的實現過程。

2018-07-20

用原生JS 寫Web首頁輪播圖