1. 程式人生 > >原生JS實現移動端輪播圖。

原生JS實現移動端輪播圖。

話不多說直接上程式碼。

html 結構

<div class="jd_banner">
    <!--圖片-->
    <ul class="jd_bannerImg clearfix">
        <li>
            <a href="javascript:;">
                <img src="./uploads/l1.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="javascript:;">
                <img src="./uploads/l2.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="javascript:;">
                <img src="./uploads/l3.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="javascript:;">
                <img src="./uploads/l4.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="javascript:;">
                <img src="./uploads/l5.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="javascript:;">
                <img src="./uploads/l6.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="javascript:;">
                <img src="./uploads/l7.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="javascript:;">
                <img src="./uploads/l8.jpg" alt="">
            </a>
        </li>
    </ul>
    <!--點標記-->
    <ul class="jd_bannerIndicator">
        <li class="active"></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</div>

css樣式

 <style>
        .jd_banner{
            width: 100%;
            overflow: hidden;
            position: relative;
        }
        /*.jd_bannerImg{
            width:800%;
        }*/
        .jd_bannerImg{
            width:800%;
            /*position: absolute;  如果使用absolute定位,會造成父容器無法獲取由子元素的撐開的高度*/
            position: relative;
            /*新增預設偏移*/
            /*transform: translateX(-10%);*/
            /*使用定位:使用百分比的時候是參照父容器的寬度*/
            /* left: -100%;*/
        }
        /*.jd_bannerImg > li{
            width:12.5%;
            float: left;
        }*/
        .jd_bannerImg > li{
            width:12.5%;
            float: left;
        }
        .jd_bannerImg > li img{
            /*1.設定為塊元素
            2.可以將文字的字型大小設定為0
            3.vertical-align:bottom*/
            display: block;
            width: 100%;
        }
        .jd_bannerIndicator{
            width: 128px;
            height: 10px;
            position: absolute;
            left: 50%;
            bottom: 5px;
            transform: translateX(-50%);
        }
        .jd_bannerIndicator > li{
            width: 6px;
            height: 6px;
            border-radius: 3px;
            border: 1px solid #fff;
            float: left;
            margin-left:10px;
        }
        .jd_bannerIndicator > li:first-of-type{
            margin-left:0;
        }
        .jd_bannerIndicator > li.active{
            background-color: #fff;
        }

    </style>

js

1.設定一下輪播的頁面結構,以及獲取一下需要用到的元素。

        /*獲取輪播圖結構*/
        var banner=document.querySelector(".jd_banner");
        /*獲取圖片容器*/
        var imgBox=banner.querySelector("ul:first-of-type");
        /*獲取原始的第一張圖片*/
        var first=imgBox.querySelector("li:first-of-type");
        /*獲取原始的最後一張圖片*/
        var last=imgBox.querySelector("li:last-of-type");
        /*在首尾插入兩張圖片   cloneNode:複製一個dom元素*/
        imgBox.appendChild(first.cloneNode(true));
        /*insertBefore(需要插入的dom元素,位置)*/
        imgBox.insertBefore(last.cloneNode(true),imgBox.firstChild);
        /*獲取所有圖片li元素*/
        var lis=imgBox.querySelectorAll("li");
        /*獲取li元素的數量*/
        var count=lis.length;
        /*.獲取banner的寬度*/
        var bannerWidth=banner.offsetWidth;
        /*設定圖片盒子的寬度*/
        imgBox.style.width=count*bannerWidth+"px";
        /*設定每一個li(圖片)元素的寬度*/
        for(var i=0;i<lis.length;i++){
            lis[i].style.width=bannerWidth+"px";
        }
        /*定義圖片索引:圖片已經有一個寬度的預設偏移*/
        var index=1;
        /*設定預設的偏移*/
        imgBox.style.left=-bannerWidth+"px";

2.實現自動輪播

var timerId;
        var startTime=function(){
            timerId=setInterval(function(){
                index++;
                imgBox.style.transition="left 0.5s ease-in-out";
                /*5.3 設定偏移*/
                imgBox.style.left=(-index*bannerWidth)+"px";
                /*5.4 判斷是否到最後一張,如果是則回到索引1的位置*/
                setTimeout(function(){
                    if(index==count-1){
                        index=1;
                        imgBox.style.transition="none";
                        /*偏移到指定的位置*/
                        imgBox.style.left=(-index*bannerWidth)+"px";
                        indicators[count - 3].classList.remove('active');
                        indicators[0].classList.add('active');
                    }
                },500);
            },1000);
        }
        startTime();

3.實現點標記

 var indicators=banner.querySelector("ul:last-of-type").querySelectorAll("li");
        var setIndicator=function(index){
            /*先清除其它li元素的active樣式*/
            for(var i=0;i<indicators.length;i++){
                indicators[i].classList.remove("active");
            }
            /*為當前li元素新增active樣式*/
            indicators[index-1].classList.add("active");
        }

4.實現手動輪播

 var startX,moveX,distanceX;
        /*標記當前過渡效果是否已經執行完畢*/
        var isEnd=true;
        /*為圖片新增觸控事件--觸控開始*/
        imgBox.addEventListener("touchstart",function(e){
            clearInterval(timerId);
            /*獲取當前手指的起始位置*/
            startX= e.targetTouches[0].clientX;
        });
        /*為圖片新增觸控事件--滑動過程*/
        imgBox.addEventListener("touchmove",function(e){
            if(isEnd==true){
                /*記錄手指在滑動過程中的位置*/
                moveX= e.targetTouches[0].clientX;
                distanceX=moveX-startX;
                /*為了保證效果正常,將之前可能新增的過渡樣式清除*/
                imgBox.style.transition="none";
                 /* 本次的滑動操作應該基於之前輪播圖已經偏移的距離*/
                imgBox.style.left=(-index*bannerWidth + distanceX)+"px";
            }
        });
        /*新增觸控結束事件*/
        imgBox.addEventListener("touchend",function(e){
            /*鬆開手指,標記當前過渡效果正在執行*/
            isEnd=false;
            /*獲取當前滑動的距離,判斷距離是否超出指定的範圍 100px*/
            if(Math.abs(distanceX) > 100){
                /*判斷滑動的方向*/
                if(distanceX > 0){//上一張
                    index--;
                }
                else{ //下一張
                    index++;
                }
                /*翻頁*/
                imgBox.style.transition="left 0.5s ease-in-out";
                imgBox.style.left=-index*bannerWidth+"px";
            }
            else if(Math.abs(distanceX) > 0){ //得保證使用者確實進行過滑動操作
                /*回彈*/
                imgBox.style.transition="left 0.5s ease-in-out";
                imgBox.style.left=-index*bannerWidth+"px";
            }
            /*將上一次move所產生的資料重置為0*/
            startX=0;
            moveX=0;
            distanceX=0;
        });
        /*webkitTransitionEnd:可以監聽當前元素的過渡效果執行完畢,當一個元素的過渡效果執行完畢的時候,會觸發這個事件*/
        imgBox.addEventListener("webkitTransitionEnd",function(){
            console.log("webkitTransitionEnd");
            /*如果到了最後一張(count-1),回到索引1*/
            /*如果到了第一張(0),回到索引count-2*/
            if(index==count-1){
                index=1;
                imgBox.style.transition="none";
                imgBox.style.left=-index*bannerWidth+"px";
            }
            else if(index==0){
                index=count-2;
                imgBox.style.transition="none";
                imgBox.style.left=-index*bannerWidth+"px";
            }
            /*設定標記*/
            setIndicator(index);
            setTimeout(function(){
                isEnd=true;
                clearInterval(timerId);
                startTime();
            },100);
        });

相關推薦

原生JS實現移動

話不多說直接上程式碼。html 結構<div class="jd_banner"> <!--圖片--> <ul class="jd_bannerImg clearfix"> <li>

原生js實現無縫滾動移動)-自動輪

想不依賴任何外掛和庫,就用原生js實現移動端自動輪播,發現網上的都不盡如人意,乾脆自己寫一個,程式碼有部分參考,廢話少說,上程式碼。 head部分,沒什麼好說的: <meta charset="utf-8"> <me

原生js實現淘寶,支援左右和跳轉(滑鼠點多快都不會亂)

用transform是因為這個比left的效能好。 這個是演示網址(不要直接存下來哦):https://shalltears.github.io/test-sowing-map/ 。 這個是完整程式碼下載地址,覺得還行的下載支援一下:https://download.csdn.ne

原生js實現網易

前端基本功-網頁特效5 一、實現效果圖 二、分析佈局 主盒子裡分上下兩個小盒子(1和2)。 包含圖片的盒子佔兩張圖片的寬(3),處於上盒子中,當前圖片在上盒子(1)中,其它圖片在盒子(3)的右側等待播放。 下邊的盒子(2)

實現移動

1、移動端實現滑動切換輪播圖,主要由touch(touchstart,touchmove,touchend)事件實現。在touch事件中可以通過 e.touches[0].clientX獲取當前觸控點的位置,在touchend事件中沒有e.touches[0].clientX值 var banner=

利用swiper外掛實現移動

準備: swiper.min.css swiper.min.js swiper.min.css: head 標籤內引入 swiper.min.js: 標籤前引入 CSS 部分 /* swiper start*/ .swiper-container {

原生js實現簡單移動

1、程式碼部分   分為四個檔案:   slideshow.html   slideshow.css   base.js   slideshow.js 1.1、slideshow.html <!DOCTYPE html> <html lang="en"&g

原生js實現簡單的移動效果

近期接觸了移動端html5和css3,想加入些輪播圖,於是在網上搜集整理了一些資料,經自己補充改進使之較為完善 原生JavaScript 移動端web輪播圖片 實現功能 索引小圓點 過渡滑動動畫的定時輪播 移動端可以滑動切換圖片 滑動距離不夠則吸附回去 效果圖

原生 js 實現移動 Touch

小編推薦:Fundebug專注於JavaScript、微信小程式、微信小遊戲,Node.js和Java實時BUG監控。真的是一個很好用的bug監控費服務,眾多大佬公司都在使用。 Touch 輪播圖 touch輪播圖其實就是通過手指的滑動,來左右切換輪播圖,下面我們通過一個

移動實現

1:HTML樣式<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-s

移動

gin eight 輪播 body art text start fun con <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

原生js仿網易

win cli font inline move 創建 ica tle 默認 <!-- HTML部分 --> <div id="wrap"> <div class="picBox"> <!-- 圖片區域 -->

原生JS實現移動模組的左右滑動切換效果,基於vue、stylus

原生JS實現移動端模組的左右滑動動畫效果,基於vue、stylus 大概實現方案: 手指touch螢幕的整個過程,會派發touchstart、touchmove、touchend三個事件,對這三個事件設定相應函式,通過移動過程中位置的變化計算出偏移值,進行對應的設定。 注:

原生js】詳解之無縫滾動

前言:輪播圖,是網站首頁中最常見的一種圖片切換特效,作為前端開發者,我相信很多開發者都直接呼叫了JQuery中的封裝好的方法實現圖片輪播,省事簡單。所以我今天想介紹一下原生js程式碼實現的圖片輪播。

swipe 移動

轉自 https://blog.csdn.net/qq_31648761/article/details/78320898 下載連結:https://codeload.github.com/thebird/Swipe/zip/2.0.0,下載後解壓,直接執行index.html檔案,在

JS實現簡單的(非常簡單,一看就懂)

主要思路:先將需要輪播的4張圖使用絕對定位讓其重疊在banner這個盒子中,然後遍歷所有的圖片將其隱藏,再獲取當前圖片的index值,根據當前的index值設定當前的圖片顯示出來。設定間歇定時器setI

原生JavaScript實現豎直

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="日常封裝函式.js"

JS實現無縫滾動的原理

NPU func etl () initial body position com hidden 用JS實現無縫滾動輪播圖的方法有很多,我自己瞎琢磨了一個, 原理非常簡單,就是點擊按鈕的一瞬間,把 ul 拉到某一個位置, 然後再滑動,這樣就成了無縫滑動 為

原生JS相容移動

關於輪播圖 : 原生JS 相容IE9+等各大瀏覽器 相容移動端 自適應(根據圖片原比例) 左右箭頭切換 點選索引切換 移動端滑動切換 只需修改圖片路徑 <!DOCTYPE html> <html lang="

JS實現某東移動web

移動web輪播圖 參考例項,可以從中儲存輪播圖的圖片,這裡我們放入uploads的資料夾下,將八張圖片一次改為l1.jpg,l2.jpg… https://m.jd.com/ HTML 這裡要放入十張圖片,因為手指滑動的時候要從第一張滑動到最後一張,是無