js原生實(shí)現(xiàn)移動(dòng)端手指滑動(dòng)輪播圖效果

html部分

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="./index.css">
    <title>Document</title>
</head>

<body>
    <div class="content" id="bootPage">
        <div class="wrapOne" id="wrapOne">
            <ul class="boxOne" id="boxOne">
                <li>
                    <div class="box1 box2"><img class="imgPath" src="../../image/one.png"></div>
                </li>
                <li>
                    <div class="box1 box3"><img class="imgPath" src="../../image/two.png"></div>
                </li>
                <li>
                    <div class="box1 box4"><img class="imgPath" src="../../image/three.png"></div>
                </li>
                <li>
                    <div class="box1 box5">
                        <img class="imgPath" src="../../image/four.png">
                        <div class="entry">進(jìn)入老板助手</div>
                    </div>
                </li>
            </ul>
        </div>
    </div>
</body>

</html>
<script src="./index.js"></script>

css部分(使用了less)

*,
::before,
::after {
    padding: 0;
    margin: 0;
    -webkit-box-sizing: border-box;
    /*兼容移動(dòng)端主流瀏覽器*/
    box-sizing: border-box;
    -webkit-tap-highlight-color: transparent;
    /*清除移動(dòng)端點(diǎn)擊高亮效果*/
}

/*清除浮動(dòng)*/
.clearfix::before,
.clearfix::after {
    content: "";
    display: block;
    height: 0;
    line-height: 0;
    visibility: hidden;
    clear: both;
}

.content {
    width: 100%;
    // height: 100%;
    margin: 0;
    overflow: hidden;

    .wrapOne {
        position: relative;
        overflow: hidden;
    }

    .wrapTwo {
        position: relative;
        overflow: hidden;
    }

    .wrapThree {
        position: relative;
        overflow: hidden;
    }

    .wrapFour {
        position: relative;
        overflow: hidden;
    }

    .boxOne {
        position: absolute;
        list-style: none;
        left: 0;
        top: 0;
        padding: 0;
        margin: 0;
    }

    .boxTwo {
        position: absolute;
        list-style: none;
        left: 0;
        top: 0;
        padding: 0;
        margin: 0;
    }

    .boxThree {
        position: absolute;
        list-style: none;
        left: 0;
        top: 0;
        padding: 0;
        margin: 0;
    }

    .boxFour {
        position: absolute;
        list-style: none;
        left: 0;
        top: 0;
        padding: 0;
        margin: 0;
    }

    li {
        float: left;
    }

    // .box1 {
    //     .px2rem(1950);
    //     height: @px2rem;
    // }

    .box5 {
        position: relative;
    }

    .entry {
        .px2rem(300);
        width: @px2rem;
        border: 1px solid rgba(182, 192, 201, 1);
        font-family: SourceHanSansCN-ExtraLight;
        // font-weight: bold;
        color: rgba(182, 192, 201, 1);
        text-align: center;
        position: absolute;
        left: 50%;
        transform: translateX(-50%);
    }

    .entry {
        .px2rem(108);
        height: @px2rem;
        line-height: @px2rem;
    }

    .entry {
        .px2rem(40);
        font-size: @px2rem;
    }

    .entry {
        .px2rem(20);
        border-radius: @px2rem;
    }

    .entry {
        top: 88%;
    }

js部分

window.onload=function(){
        var aLi = document.querySelectorAll(".boxOne li");
        var boxOne = document.querySelector('.boxOne');
        var wrap = document.querySelector('.wrapOne');
        // var aLiWidth = boxOne.offsetWidth;
        var viewHeight = document.documentElement.clientHeight;
        var viewWidth = document.documentElement.clientWidth;
        console.log('屏幕高度', viewHeight)
        console.log('屏幕寬度', viewWidth)
        var aLiWidth = viewWidth;
        console.log('aLiWidth: ' + aLiWidth)
        wrap.style.height = viewHeight + 'px';
        // 設(shè)置盒子的寬度
        boxOne.style.width = aLi.length * 100 + '%';
        for (var i = 0; i < aLi.length; i++) {
            aLi[i].style.width = 1 / aLi.length * 100 + '%';
        };
        // 初始化手指坐標(biāo)點(diǎn)
        var startPoint = 0;
        var startEle = 0;
        var disX = 0;
        //手指按下
        wrap.addEventListener("touchstart", function (e) {
            startPoint = e.changedTouches[0].pageX;
            // console.log(startPoint);
            startEle = boxOne.offsetLeft;
            // console.log(startEle)
        });
        //手指滑動(dòng)
        wrap.addEventListener("touchmove", function (e) {
            var currPoint = e.changedTouches[0].pageX;
            disX = currPoint - startPoint;
            if (Math.abs(disX) > 30 && Math.abs(disX) < 150) {
                // console.log('滑動(dòng)距離', Math.abs(disX), disX)
                if (disX > 0) {
                    disX = disX + 150
                } else if (disX < 0) {
                    disX = disX - 150
                }
                var left = startEle + disX;
                // console.log(left)
                boxOne.style.left = left + 'px';

            }
        });
        //當(dāng)手指抬起的時(shí)候,判斷圖片滾動(dòng)離左右的距離谁撼,當(dāng)
        wrap.addEventListener("touchend", function (e) {
            var left = boxOne.offsetLeft;
            // 判斷正在滾動(dòng)的圖片距離左右圖片的遠(yuǎn)近末早,以及是否為最后一張或者第一張
            var currNum = Math.round(-left / aLiWidth);
            currNum = currNum >= (aLi.length - 1) ? aLi.length - 1 : currNum;
            currNum = currNum <= 0 ? 0 : currNum;
            boxOne.style.left = -currNum * wrap.offsetWidth + 'px';
        })
}

參考:https://blog.csdn.net/weixin_42805130/article/details/81870160

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撮胧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吆玖,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碌嘀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡歪架,警方通過(guò)查閱死者的電腦和手機(jī)股冗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)和蚪,“玉大人止状,你說(shuō)我怎么就攤上這事烹棉。” “怎么了怯疤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵峦耘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我旅薄,道長(zhǎng)辅髓,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任少梁,我火速辦了婚禮洛口,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凯沪。我一直安慰自己第焰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布妨马。 她就那樣靜靜地躺著挺举,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烘跺。 梳的紋絲不亂的頭發(fā)上湘纵,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音滤淳,去河邊找鬼梧喷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脖咐,可吹牛的內(nèi)容都是我干的铺敌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼屁擅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼偿凭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起派歌,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弯囊,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后硝皂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體常挚,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年稽物,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片折欠。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贝或,死狀恐怖吼过,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咪奖,我是刑警寧澤盗忱,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站羊赵,受9級(jí)特大地震影響趟佃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昧捷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一闲昭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧靡挥,春花似錦序矩、人聲如沸楼镐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)郎汪。三九已至膊存,卻和暖如春链快,著一層夾襖步出監(jiān)牢的瞬間凉敲,已是汗流浹背着倾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工拧簸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留令蛉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓狡恬,卻偏偏與公主長(zhǎng)得像珠叔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子弟劲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容