1. 程式人生 > >原生JS實現輪播圖

原生JS實現輪播圖

要求:
在和上一任務同一目錄下面建立一個task0002_3.html檔案,在js目錄中建立task0002_3.js,並在其中編碼,實現一個輪播圖的功能。

圖片數量及URL均在HTML中寫好
可以配置輪播的順序(正序、逆序)、是否迴圈、間隔時長
圖片切換的動畫要流暢
在輪播圖下方自動生成對應圖片的小點,點選小點,輪播圖自動動畫切換到對應的圖片

html程式碼:

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8"
/>
<title></title> <style> div, ul, il, img, body { margin: 0px; padding: 0px; } #div1 { position: relative; overflow: hidden; height: 500px; width: 1000px; }
#div1 ul { position: relative; } #div1 ul li { float: left; list-style: none; } #div1 ul li img { height
: 300px
; }
#btn { position: absolute; width: 100%; text-align: center; } #btn a { cursor: pointer; /*讓滑鼠移入的時候滑鼠樣式改變*/ display: inline-block; width: 10px; height: 5px; background-color: #808080; margin-top:250px; } #btn a.active, #btn a:hover { background-color: white; }
</style> </head> <body> <div id="div1"> <ul id="ul"><!--為了動畫效果連貫 在列表開始加上末尾的圖片 在列表末尾加上開始的一張圖片--> <li> <img src="pic/3.jpg" /></li> <li> <img src="pic/1.jpg" /></li> <li> <img src="pic/2.jpg" /></li> <li> <img src="pic/3.jpg"/></li> <li> <img src="pic/1.jpgg" /></li> </ul> <div id="btn"> <a href="#"></a> <a href="#"></a> <a href="#"></a> </div> </div> <script src="js/task0002_3.js"></script> <script> window.onload = function () { var di = document.getElementById('div1'); var ul = di.getElementsByTagName('ul')[0]; var li = ul.getElementsByTagName('li'); var img = ul.getElementsByTagName('img'); var obtn = document.getElementById('btn'); var aa = obtn.getElementsByTagName('a'); var wid = screen.width; di.style.width = wid + 'px'; function reSize() {//把圖片的寬度調整到和螢幕寬度一致 for (i = 0; i < li.length; i++) { img[i].style.width = wid + 'px'; } ul.style.width = wid * li.length + 'px'; } reSize(); changeBtnStyle(aa); aa[0].addEventListener("click", met1); aa[1].addEventListener("click", met2); aa[2].addEventListener("click", met3); setInterval(loop, 1000, 50, 1,3); //設定圖片迴圈函式 setInterval(changeBtn, 100, aa,ul);//每隔0.1秒獲取當前圖片的序號 並讓其對應的按鈕改變樣式 } </script> </body> </html>

Js程式碼:

// JavaScript source code
var wid = screen.width; //獲取螢幕寬度
function getDis(ul) { //獲取列表的偏移量
    var dis;
    if (ul.currentStyle) {
        dis = ul.currentStyle["left"];
    } else {
        var res = window.getComputedStyle(ul, null);
        dis = res["left"];
    }
    dis = parseInt(dis);
    return dis;
}
function getNum(ul) { //計算當前播放的是第幾張圖片
    var dis = getDis(ul);
    dis = parseInt(dis * -1 / wid);
    return dis;
}
function an(from, to, time) { //動畫函式 from 是當前圖片的序號 to代表目標圖片序號 time為動畫執行時間
    var speed = -(to - from) * wid / time; //計算圖片的偏移速度
    var left = -from * wid;
    var interval;
    function move() {
        if (speed < 0) {  //當速度為負時 偏移量大於目標偏移量 則停止動畫
            if (left > -to * wid) {
                ul.style.left = left + 'px';
                left += speed;
            }
            else {
                left = -to * wid;
                ul.style.left = left + 'px';
                clearInterval(interval);
            }
        }
        else {//當速度為正時 偏移量小於目標偏移量 則停止動畫
            if (left < -to * wid) {
                ul.style.left = left + 'px';
                left += speed;
            }
            else {
                left = -to * wid;
                ul.style.left = left + 'px';
                clearInterval(interval);
            }
        }
    }
    interval = setInterval(move, 1); //迴圈播放
}
function getSec() {
    var now = new Date();
    return now.getSeconds(); //獲取現在時間秒數
}
function click(aa) {  //給按鈕新增點選事件 同時改變樣式
    for (i = 0; i < aa.length; i++) {
        aa[i].onclick = function () {
            for (j = 0; j < aa.length; j++)
            { aa[j].className = ' ' }
            this.className = 'active'
        }
    }
}
function loop(time, dir, len) {
 //實現每隔固定時間迴圈  引數為 動畫執行的時間,運動方向 +1為正方向 -1為負方向 len是當前圖片列表的長度 當圖片列表長度改變 修改len值即可
    var index = getNum(ul);
    var sec = getSec();
    if (sec % 5 == 0) { //設定為五秒迴圈一次
        if (dir > 0) { //方向為正時
            if (index < len) { 
                an(index, index + 1, time) 
            }
            else {//當動畫到最後一張圖片時,重第一張開始 
                an(1, 2, time);
            }
        }
        else { //方向為負
            if (index > 0) {
                an(index, index - 1, time)
            }
            else { //播放到第一張圖片時 從最後一張重新開始
                an(len - 1, len - 2, time);
            }
        }
    }
}
function met1() { //按鈕事件
    var dis = getNum(ul);
    an(dis, 1, 10);
}
function met2() { //按鈕事件
    var dis = getNum(ul);
    an(dis, 2, 10);
}
function met3() { //按鈕事件
    var dis = getNum(ul);
    an(dis, 3, 10);
}
function changeBtn(aa,ul) {  //改變按鈕樣式
    var index = getNum(ul) +2 ;
    index = index % aa.length; //獲取當前圖片對應的按鈕序號
    for (j = 0; j < aa.length; j++) //先把所有按鈕的樣式置為空
    { aa[j].className = ' ' }
    aa[index].className = 'active' //給當前的按鈕加上樣式
}

相關推薦

h5原生js實現

list sla head log startx creat ase hit eve 預覽地址:http://s.xnimg.cn/a90529/wap/wechatLive/test/slide.html <!DOCTYPE html> <html l

原生js實現原理分析

一、輪播圖需求 輪播圖需要實現左右翻頁的無縫連線 需要點選左右切換 需要實現跳轉 顯示當前位置的小圓點 二、輪播圖的原理 1.圖片移動實現原理: 利用浮動將所有所有照片依次排成一行,給這一長串圖片新增一個父級的遮罩,每次只顯示一張圖,其餘的都隱

原生js實現原理

輪播圖的原理1.圖片移動實現原理:利用浮動將所有所有照片依次排成一行,給這一長串圖片新增一個父級的遮罩,每次只顯示一張圖,其餘的都隱藏起來。對圖片新增絕對定位,通過控制left屬性,實現照片的移動。 2.圖片移動動畫原理:從a位置移動到b位置,需要先計算兩點之間的差值,通過差值和時間間隔,計算出每次移動的步

使用原生js實現效果

這幾天在逛網站的時候,發現很多網站都有輪播圖這個效果,所以我就仿照小米的官網用原生js寫了一個輪播圖效果,希望大家喜歡。 這是我釋出在github上的最後實現的效果:https://heternally.github.io/banner/ 下面我簡單跟大家說一下

原生js實現

今天分享一下簡單的輪播圖製作過程,用原生js實現。雖然網上有各種外掛製作的高大上又好用的輪播圖,但還是要清楚它的基本原理。 1.基本原理 將所有圖片並排放到一個div中,然後再放到展示視窗當中,讓裝有所有圖片的div通過改變left值,從而左右移動實現圖片切換。 2.htm

原生JS實現1---勻速動畫

                                JS實現輪播圖 專案實現結果圖: 需求:1 根據圖片動態新增小圓點            2 目標移動到小圓點輪播圖片            3 滑鼠離開圖片,定時輪播圖片;滑鼠在圖片上時暫

利用原生js實現效果

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js原生輪播圖</title> <style type="text

animate動畫、原生JS實現

寫在前面 最近在寫專案的時候,才發現自己對css3這部分的內容已經生疏了,複習css3的時候,看到animate屬性,就用其寫了個焦點輪播圖,當然自己也用原生JS碼了個,當然css3動畫無疑是錦上添花,還是要多總結啊,原始碼我們會在最後附上git地址,好了,下

原生JS實現的幾種方式

I 絕對定位+透明度 原理:首先,將所有輪播圖以絕對定位的方式定位父元素的相同位置;接著,實現上下鍵按鈕修改active的下標;最後,將所有圖片透明度重置為0,而被啟用的圖片透明度設定為1; 優點:實現最為簡單,程式碼量小,圖片過渡自然; 缺點:沒有左右滑

原生JS實現

要求: 在和上一任務同一目錄下面建立一個task0002_3.html檔案,在js目錄中建立task0002_3.js,並在其中編碼,實現一個輪播圖的功能。 圖片數量及URL均在HTML中寫好 可以配置輪播的順序(正序、逆序)、是否迴圈、間隔時長 圖片切換的

JS原生程式碼實現(無左右滑動,底下圓點按鈕)

先上效果圖: 由於動態圖太大,所以只能截圖了;大致效果,圖片輪播的過程中,底下的灰色提示漸漸出現; 現在來說實現思路:        HTML部分: <div id="content"> <img id="img1" /> &

js實現

display lex tee 添加 har scrip con tle win 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF

原生js實現

tex tom enter utf-8 定義 radi absolut tco query <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8">

原生js封裝

round this getc 行間樣式 gets -m ++ fun ted 原生js封裝輪播圖 對於初學js的同學來說,輪播圖還是一個難點,尤其是原生js封裝輪播圖代碼,下面是我之前做的一個輪播圖項目中封裝好的一些代碼,有需要的同學可以看一下,有什麽不懂的可以看註釋,

授人以漁式解析原生JS

需求與分析 需求:迴圈無縫自動輪播五張圖,按左右箭頭可以手動切換圖片,滑鼠點選輪播圖下面按鈕 1 2 3 4 5會跳轉到對應的第1 2 3 4 5張圖片。滑鼠放到輪播圖的圖片上時不再自動輪播並且左右箭頭顯示出來,滑鼠移開時左右箭頭隱藏掉並且自動輪播。 效果圖: 分析: 佈局:準備七張圖片

Jquery和純JS實現(一)--左右切換式

var cur = 0, //當前的圖片序號 imgLis = getElementsByClassName("imgList")[0].getElementsByTagName("li"), //獲取圖片組 imgLen = imgLis.length, //獲取圖片的

最簡單 最詳細的原生js

最簡單最詳細的原生js寫輪播圖 該輪播圖實現了自動輪播,圖片切換,滑鼠移入移出事件,佈局簡單,容易上手。希望能幫到大家。效果圖如下: 佈局擴充套件 裡面用了幾種方式實現了div的垂直居中,可見樣式程式碼註釋。 HTML

原生JS實現 效果

<div id="playImages" class="play"> <ul class="big_pic"> <div class="prev"></div> <div class

js實現--淡入淡出的效果。

window.onload = function(){ mv.app.toBanner(); }; var mv = {}; mv.tools = {}; mv.ui = {}; //淡入淡出也算是是一個公用元件 mv.ui.fadein = function(obj)

Jquery和純JS實現(二)--淡入淡出切換式

之前有寫過一篇輪播圖,是左右切換式的,可以參考 Jquery和純JS實現輪播圖(一)–左右切換式 今天分享一下淡入淡出式的輪播圖,同樣也是用純js和Jquery兩種方法來實現: JQUERY實現