国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

移動端網(wǎng)頁輪播圖

這篇具有很好參考價值的文章主要介紹了移動端網(wǎng)頁輪播圖。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、觸屏事件

在制作移動端網(wǎng)頁輪播圖之前,我們先補充一些移動端的基本觸屏事件及事件對象!

1.觸屏事件概述

移動端瀏覽器兼容性比較好,所以我們不需要考慮以前 JS 的兼容性問題,可以放心地使用原生 JS 書寫效果,但是移動端也有自己獨特的地方。比如觸屏事件,Android 和 IOS 都有。

移動端網(wǎng)頁輪播圖

<div></div>
<script>
    var div = document.querySelector('div');
    div.addEventListener('touchstart', function() {
        console.log('yes');
    })
</script>

這里PC端變移動端按下F12鍵,如圖點擊左邊第二個即可!

移動端網(wǎng)頁輪播圖

2.觸屏事件對象

上面的 touchstart、touchmove、touchend 三個事件都會有各自的事件對象。

移動端網(wǎng)頁輪播圖

① 如果觸摸的是同一個元素,那么前兩個相同,返回的都是正在觸摸該元素的手指數(shù);
② 手指離開的時候,前兩個都沒有了,只有 changedTouches;
③ 最常用的是第二個 targetTouches,重點記?。?br> ④ 可以比作一個數(shù)組,通過索引號獲得相應(yīng)的手指信息

3. 拖動元素

拖動元素三部曲:
(1)觸摸元素 touchstart:獲取手指初始坐標(biāo),同時獲得盒子初始位置;
(2)移動手指 touchmove:計算手指的滑動距離,并且移動盒子;
(3)離開手指 touchend。
注意手指移動也會觸發(fā)屏幕滾動,所以這里要阻止默認(rèn)的屏幕滾動 e.preventDefault()。

① touchstart、touchmove、touchend 可以實現(xiàn)拖動元素;
② 但是拖動元素需要得到當(dāng)前手指的坐標(biāo)值,我們可以使用 targetTouches[0] 里面的 pageX 和 pageY;
③ 拖動原理,手指移動中,計算出手指移動的距離,然后用盒子原來的 left 加上手指移動的距離就是現(xiàn)在的 left;
④ 手指移動的距離等于手指滑動后的 left 減去手指剛開始觸摸屏幕時的 left。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            position: absolute;
            left: 0;
            top: 100px;
            width: 200px;
            height: 200px;
            background-color: blueviolet;
        }
    </style>
</head>
<body>
    <div></div>
    <script>
        var div = document.querySelector('div');
        var startX = 0;
        var startY = 0;
        var endX = 0;
        var endY = 0; 
        var x = 0;
        var y = 0;
        div.addEventListener('touchstart', function(e) {
            startX = e.targetTouches[0].pageX;
            startY = e.targetTouches[0].pageY;
            x = this.offsetLeft;
            y = this.offsetTop;
        })
        div.addEventListener('touchmove', function(e) {
            var newLeft = x + e.targetTouches[0].pageX - startX;
            var newTop = y + e.targetTouches[0].pageY - startY;
            this.style.left = newLeft + 'px';
            this.style.top = newTop + 'px';
            e.preventDefault();
        })
    </script>
</body>
</html>

注意手指移動也會觸發(fā)屏幕滾動,為阻止默認(rèn)滾動,我們這里添加 e.preventDefault(),只讓 div 移動!

二、移動端輪播圖

1.案例分析

(1)自動播放
① 由于移動端兼容性較好,所以移動端想要實現(xiàn)輪播圖的自動播放非常簡單;
② 核心原理,使用 CSS 里面的 transform 和transition 屬性,實現(xiàn)圖片的滾動和過渡效果。
(2)無縫滾動
① 無縫滾動,需判斷圖片是否滾動到了最后一張或者是第一張,用索引號 index 去判斷;
② 我們的判斷條件是要等到圖片滾動完畢后再去判斷,此時需要添加過渡完成事件 transitionend;
③ 若滾動到最后一張,就將索引號設(shè)置為0;
④ 注意這里的索引號設(shè)置為0,但是圖片此時還沒有移動,在下一步圖片需要立馬跳到索引為0的位置,不能被看出來,所以這里不要添加過渡動畫,然后移動;
⑤ 同樣道理,如果索引號小于0,說明是倒著走的,也是不添加過渡地移動。
(3)小圓點跟隨
① 在做小圓圈跟隨圖片滾動的特效前,我們先了解一下 classList 屬性,返回元素的類名,該屬性可以給元素添加、移除或切換類,有以下方法:

添加類,element.classList.add(‘類名’);
移除類,element.classList.remove(‘類名’);
切換類,element.classList.toggle(‘類名’);

添加類名是在后面追加類名,所以不會覆蓋掉以前的類名,注意類名前面不需要加點!
② 把帶有 current 類名的 li 選出來,去掉它的類名,remove;
③ 讓當(dāng)前索引號的 li 加上類名 current,add;
④ 小圓點跟隨變化也是等到過渡結(jié)束之后變化的,所以這個部分也要寫到 transitionend 事件里面。
(4)手指滑動
① 本質(zhì)就是 ul 跟隨手指移動,簡單來說就是移動端拖動元素;
② 觸摸元素 touchstart,此時獲取手指初始坐標(biāo);
③ 手指移動 touchmove,計算手指的滑動距離,并且移動盒子;
④ 手指離開 touchend,根據(jù)不同的滑動距離分不同的情況實現(xiàn)回彈效果;
⑤ 手指觸摸的時候就停止定時器;
⑥ 手指拖動的時候不需要動畫效果,所以取消過渡;
⑦ 回彈效果,如果移動距離小于某個像素就回彈到原來的位置,大于某個像素就切換到下一張或上一張;
⑧ 向左滑動 moveX 就是負(fù)的,向右滑動 moveX 就是正的,而我們這里要的移動距離必須是正的,所以加絕對值,Math.abs(moveX);
⑨ 當(dāng)移動距離滿足該像素時,向左滑動 index++,向右滑動 index–;
⑩ 手指離開屏幕時,恢復(fù)定時器,先把原來的定時器全部清除,再開設(shè)新的定時器,繼續(xù)第一步的自動播放。

2.代碼實現(xiàn)

① 網(wǎng)頁輪播圖.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link href="網(wǎng)頁輪播圖.css" rel="stylesheet"/>
    <script src="網(wǎng)頁輪播圖.js"></script>
</head>
<body>
    <div class="focus">
        <ul class="picture">
            <li><a><img src="picture//圖5.jpg"/></a></li>
            <li><a><img src="picture//圖1.jpg"/></a></li>
            <li><a><img src="picture//圖2.jpg"/></a></li>
            <li><a><img src="picture//圖3.jpg"/></a></li>
            <li><a><img src="picture//圖4.jpg"/></a></li>
            <li><a><img src="picture//圖5.jpg"/></a></li>
            <li><a><img src="picture//圖1.jpg"/></a></li>
        </ul>
        <ol class="circle">
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li class="current"></li>
        </ol>
    </div>
</body>
</html>

② 網(wǎng)頁輪播圖.css

* {
    margin: 0;
    padding: 0;
}
.focus {
    position: relative;
    width: 400px;
    height: 150px;
    margin: 50px auto;
    overflow: hidden;
}
.picture {
    position: absolute;
    top: 0;
    left: -400px;
    width: 700%;
}
.picture li {
    float: left;
    list-style: none;
}
.picture img {
    width: 400px;
    height: 150px;
}
.circle {
    position: absolute;
    width: 100px;
    height: 7px;
    right: 8px;
    bottom: 7px;
    list-style-type: none;
}
.circle li {
    float: right;
    width: 8px;
    height: 7px;
    margin: 0 3px;
    background-color: aliceblue;
    border-radius: 30%;
    transition: all .1s;
    cursor: pointer;
}
.circle .current {
    width: 12px;
    background-color: rgb(16, 136, 242);
}

③ 網(wǎng)頁輪播圖.js

window.addEventListener('load', function() {
    var focus = document.querySelector('.focus');
    var ul = focus.children[0];
    var ol = focus.children[1];
    var w = focus.offsetWidth;
    var index = 0;
    //1.輪播圖自動播放
    var timer = this.setInterval(function() {
        index++;
        var target = -index * w;
        //使用CSS里的transform和transition屬性實現(xiàn)圖片滾動和過渡
        ul.style.transition = 'all .3s';
        ul.style.transform = 'translateX('+ target +'px)';
    }, 2000);
    //2.無縫滾動,且去掉過渡效果
    ul.addEventListener('transitionend', function() {
        if (index >= ul.children.length - 2) {
            index = 0;
            ul.style.transition = 'none';
            var target = -index * w; 
            ul.style.transform = 'translateX('+ target +'px)';
        } else if(index < 0) {
            index = ul.children.length - 3;
            ul.style.transition = 'none';
            var target = -index * w; 
            ul.style.transform = 'translateX('+ target +'px)';
        }
        //3.小圓點跟隨圖片變化
        ol.querySelector('.current').classList.remove('current');
        var num = ol.children.length - index - 1;
        ol.children[num].classList.add('current');
    })
    //4.手指滑動輪播圖
    var startX = 0;
    var moveX = 0;
    var flag = false;
    ul.addEventListener('touchstart', function(e) {
        startX = e.targetTouches[0].pageX;
        //手指觸摸的時候就停止定時器
        clearInterval(timer);
    })
    ul.addEventListener('touchmove', function(e) {
        moveX = e.targetTouches[0].pageX - startX;
        var target = -index * w + moveX; 
        //手指拖動的時候不需要動畫效果,所以取消過渡效果
        ul.style.transition = 'none';
        ul.style.transform = 'translateX('+ target +'px)';
        flag = true;
        e.preventDefault();
    })
    ul.addEventListener('touchend', function() {
        //5.回彈效果,滑動距離大于70px才會切換下一張
        if (flag) {
            if (Math.abs(moveX) > 70) {
                if (moveX > 0) {
                    index--;
                } else {
                    index++;
                }
                var target = -index * w;
                ul.style.transition = 'all .3s';
                ul.style.transform = 'translateX('+ target +'px)';
            } else {
                var target = -index * w;
                ul.style.transition = 'all .3s';
                ul.style.transform = 'translateX('+ target +'px)';
            }
            }
        //6.手指離開,恢復(fù)定時器  
        clearInterval(timer);
        timer = setInterval(function() {
            index++;
            var target = -index * w;
            //使用CSS里的transform和transition屬性實現(xiàn)圖片滾動和過渡
            ul.style.transition = 'all .3s';
            ul.style.transform = 'translateX('+ target +'px)';
        }, 2000);
    })
})

3.運行結(jié)果

移動端網(wǎng)頁輪播圖
F12鍵切換到移動端哦!文章來源地址http://www.zghlxwxcb.cn/news/detail-402519.html

到了這里,關(guān)于移動端網(wǎng)頁輪播圖的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Javascript移動端觸屏滑動事件詳解

    移動端的觸屏滑動事件其實就是touch事件,主要分為以下四種: touchstart: //手指放到屏幕上時觸發(fā) touchmove: //手指在屏幕上滑動式觸發(fā) touchend: //手指離開屏幕時觸發(fā) touchcancel: //系統(tǒng)取消touch事件的時候觸發(fā),這個好像比較少用 每個觸摸事件被觸發(fā)后,會生成一個event對象,e

    2024年04月11日
    瀏覽(13)
  • 教你用JavaScript制作輪播圖

    教你用JavaScript制作輪播圖

    歡迎來到我的小院,我是霍大俠,恭喜你今天又要進(jìn)步一點點了! 我們來用JavaScript編程實戰(zhàn)案例,做一個輪播圖。圖片每3秒自動輪換,也可以點擊左右按鍵輪播圖片,當(dāng)圖片到達(dá)最左端或最右端時,再點擊左右鍵圖片彈回最初始的圖片或最末尾的圖片。通過實戰(zhàn)我們將學(xué)會

    2024年02月11日
    瀏覽(23)
  • 【案例分享 | 旅游出行app】Axure制作banner輪播圖交互效果

    【案例分享 | 旅游出行app】Axure制作banner輪播圖交互效果

    哈嘍,大家好!今天給大家介紹如何使用Axure軟件制作banner輪播圖的交互效果。 【預(yù)覽地址含下載】電腦打開鏈接:https://wh9x1s.axshare.com/ 【完整案例作品預(yù)覽含下載】:https://fx2z9z.axshare.com 【視頻教程】:嗶哩嗶哩視頻 首先,讓我們來看下效果展示:進(jìn)入頁面后自動輪播圖

    2024年02月19日
    瀏覽(24)
  • 制作輪播圖經(jīng)驗分享——element ui走馬燈的使用(附源碼,效果截圖)

    制作輪播圖經(jīng)驗分享——element ui走馬燈的使用(附源碼,效果截圖)

    先附上效果圖: ??element ui鏈接地址:Carousel 走馬燈 | Element Plus (gitee.io) 源碼: 這里我使用的是靜態(tài)圖片(本地) 經(jīng)驗分享: 在制作輪播圖的時候經(jīng)常會發(fā)現(xiàn)圖片大小不一,這時候可以在img標(biāo)簽里加上width:100%;height:100%即可實現(xiàn)圖片鋪滿。 當(dāng)然,這只是輪播圖的一種,還

    2024年02月11日
    瀏覽(24)
  • 教程6 Vue3+Element Plus el-carousel制作輪播圖(后面有修改樣式的方法)

    教程6 Vue3+Element Plus el-carousel制作輪播圖(后面有修改樣式的方法)

    (1)引入Element開發(fā)環(huán)境 (2)自動引入Element (3)在配置文件中進(jìn)行配置,本人使用的是Vit構(gòu)建工具 如果使用Vite作為構(gòu)建工具,配置文件為vite.config.js,配置方法如下: (4)Element Plus全局引入 main.ts中增加下面的代碼: (1)運行效果 (2)Rotation.vue參考代碼 (3)卡片式輪

    2024年02月06日
    瀏覽(46)
  • 輪播圖,用vue來寫一個簡單的輪播圖

    輪播圖,用vue來寫一個簡單的輪播圖

    寫的很簡單,就是一個小練習(xí),哈哈哈,下面的幾張圖分別是輪播圖的第一張,中間圖,最后一張的效果圖。 使用了vue 中的屬性綁定 v-bind ,v-show 以及 事件監(jiān)聽 v-on 指令。 思路: 1.vue實例中聲明一個data屬性imgArr,用于存放每張輪播圖的地址, 2.同時定義一個默認(rèn)起始索引in

    2024年02月16日
    瀏覽(24)
  • 前端Vue自定義簡單實用輪播圖封裝組件 快速實現(xiàn)輪播圖

    前端Vue自定義簡單實用輪播圖封裝組件 快速實現(xiàn)輪播圖

    前端Vue自定義簡單實用輪播圖封裝組件 快速實現(xiàn)輪播圖, 閱讀全文下載完整代碼請關(guān)注微信公眾號: 前端組件開發(fā) 效果圖如下: 使用方法 HTML代碼實現(xiàn)部分

    2024年02月10日
    瀏覽(36)
  • 前端項目-05-輪播圖banner和Floor組件開發(fā)-全局輪播圖組件抽取

    前端項目-05-輪播圖banner和Floor組件開發(fā)-全局輪播圖組件抽取

    目錄 1-輪播圖模塊數(shù)據(jù)開發(fā) 2-floor組件開發(fā) 3-抽取全局輪播圖組件 輪播圖需要用到swiper插件,先安裝5.4.5版本的swiper: npm ?install --save swiper@^5.4.5 --force 模擬從服務(wù)器獲取數(shù)據(jù); 1-編寫mockRequests的js文件和之前編寫的request的js文件類似,就修改一下baseURL,我們模擬的數(shù)據(jù)請求路

    2023年04月08日
    瀏覽(19)
  • 解決微信小程序swiper輪播圖撐不滿有留白 實現(xiàn)swiper輪播圖撐滿父容器

    解決微信小程序swiper輪播圖撐不滿有留白 實現(xiàn)swiper輪播圖撐滿父容器

    問題 :如下圖,swiper輪播圖兩側(cè)會有留白,沒有撐滿swiper 失敗的嘗試 : 1.調(diào)整圖片尺寸 2.設(shè)屬性設(shè)置image的mode為scaleToFill 3.設(shè)置item的屬性 都沒能實現(xiàn)將圖片填充滿輪播圖,圖片會有右側(cè)和底部兩塊留白 通過調(diào)試器查看到image區(qū)域很小,懷疑是image本身屬性的問題 隨后嘗試在

    2024年04月25日
    瀏覽(102)
  • vue卡片輪播圖

    vue卡片輪播圖

    我的項目是vue3的,用的swiper8

    2024年02月14日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包