自適應手機觸摸帶微放大效果輪播

前端入坑紀 39

今天碰到個如題的效果(原諒我這長長的一大段形容詞),本來是想隨意找個插件就完事的郑现。可誰料到找了老半天沒幾個合適的荧降〗芋铮看來我的“百度大法”級別還不夠啊。

那就遵從毛主席的話:自己動手朵诫,豐衣足食辛友!

OK,first things first剪返!項目鏈接

以后手機相關(guān)的頁面废累,都會上傳github github項目地址

小截圖一枚
HTML 結(jié)構(gòu)
    <div class="mainWrp">
        <div id="scrolWrp" class="clear">
            <div class="imgOurWrp" style="transform:translateX(1.5%)">
                <div class="imgOur on">
                    <a href="javascript:;">
                        ![](http://upload-images.jianshu.io/upload_images/4732938-5d1fdb712d35b112.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
                        <div class="innerPos">
                            ![](http://upload-images.jianshu.io/upload_images/4732938-ccee3dd866513a9f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
                            <p>點擊查看直播</p>
                        </div>
                    </a>
                </div>
                <div class="imgOur">
                    <a href="javascript:;">
                        ![](http://upload-images.jianshu.io/upload_images/4732938-815286c1bb342e9b.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
                        <div class="innerPos">
                            ![](http://upload-images.jianshu.io/upload_images/4732938-ccee3dd866513a9f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
                            <p>點擊查看直播</p>
                        </div>
                    </a>
                </div>
                <div class="imgOur">
                    <a href="javascript:;">
                        ![](http://upload-images.jianshu.io/upload_images/4732938-4350442578a67b9e.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
                        <div class="innerPos">
                            ![](http://upload-images.jianshu.io/upload_images/4732938-ccee3dd866513a9f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
                            <p>點擊查看直播</p>
                        </div>
                    </a>
                </div>
                <div class="imgOur">
                    <a href="javascript:;">
                        ![](http://upload-images.jianshu.io/upload_images/4732938-6576d651f156cf28.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
                        <div class="innerPos">
                            ![](http://upload-images.jianshu.io/upload_images/4732938-ccee3dd866513a9f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
                            <p>點擊查看直播</p>
                        </div>
                    </a>
                </div>
                <div class="imgOur">
                    <a href="javascript:;">
                        ![](http://upload-images.jianshu.io/upload_images/4732938-ac46e0e3414f981b.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
                        <div class="innerPos">
                            ![](http://upload-images.jianshu.io/upload_images/4732938-ccee3dd866513a9f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
                            <p>點擊查看直播</p>
                        </div>
                    </a>
                </div>
            </div>
        </div>
    </div>

其實輪播都是老套路, id 為#scrolWrp 的Div 包裹著 一個大過屏幕寬度很多的Div.imgOurWrp脱盲。然后讓Div.imgOurWrp的translateX跟著里面的輪播圖Div.imgOur變邑滨。

CSS 結(jié)構(gòu)
        body {
            padding: 0;
            margin: 0;
            border-top: 1px solid #f4f4f4;
            background-color: #F4F4F4;
        }
        
        p {
            padding: 0;
            margin: 0;
        }
        
        ul,
        li {
            padding: 0;
            margin: 0;
            list-style: none;
        }
        
        a {
            text-decoration: none;
            color: #525252;
        }
        
        img {
            vertical-align: middle;
        }
        
        .fl {
            float: left;
        }
        
        .fr {
            float: right;
        }
        
        .clear::after {
            display: block;
            content: "";
            clear: both;
        }
        
        .mainWrp {
            width: 100%;
            max-width: 640px;
            margin: 0 auto
        }
        
        #scrolWrp {
            margin: 3% 0;
            padding: 3% 0;
            overflow: hidden;
        }
        
        .imgOur {
            width: 16%;
            margin: 0 .5%;
            float: left;
        }
        
        .imgOur a {
            position: relative;
            display: block;
            overflow: hidden;
            width: 100%;
            border-radius: 6px;
        }
        
        .imgOur a img {
            width: 100%
        }
        
        .imgOurWrp {
            -webkit-transition: all 370ms linear;
            -moz-transition: all 370ms linear;
            transition: all 370ms linear;
        }
        
        .imgOurWrp>div.on {
            -webkit-transition: all 600ms ease-in;
            -moz-transition: all 600ms ease-in;
            transition: all 600ms ease-in;
            transform: scale3d(1.1, 1.1, 1.1);
        }
        
        .imgOur .innerPos img {
            width: 50%
        }
        
        .imgOurWrp {
            width: 500%;
        }
        
        .innerPos {
            position: absolute;
            top: 50%;
            left: 50%;
            text-align: center;
            line-height: 20px;
            color: #fff;
            transform: translate(-50%, -50%)
        }

所以 id 為 #scrolWrp 的Div 需要 overflowe:hidden;而里面的Div.imgOurWrp 寬度就要設(shè)置為屏幕的好多倍宾毒,這就看Div.imgOurWrp的數(shù)量是多少了驼修,我這里是5個,所以將Div.imgOurWrp 寬設(shè)為500%诈铛。然后因為Div.imgOurWrp在變換時要看到左右兩邊的同伴乙各,所以Div.imgOurWrp的寬度就相應的減少了,我這里是16%幢竹,加上左右margin0.5%就是17%耳峦。

JS 結(jié)構(gòu)
        // 獲取所有需要js操作的元素
        var scrolWrp = document.getElementById('scrolWrp');
        var scrolImgWrp = document.getElementsByClassName('imgOurWrp')[0];
        var scrolItem = scrolImgWrp.getElementsByClassName("imgOur");
        var indexNum = startX = endX = 0;


        // 傳入對應的輪播圖的順序號,然后變換對應位置
        function changeEft(num) {
            for (var i = 0; i < scrolItem.length; i++) {
                scrolItem[i].className = "imgOur";
            }
            scrolItem[num].className = "imgOur on";
            var numStr = 1.5 - (17 * num);
            scrolImgWrp.style.transform = "translateX(" + numStr + "%)";
        }

        // 觸摸發(fā)生時計算滑動的方向焕毫,已經(jīng)得出對應的輪播圖順序號
        scrolWrp.addEventListener("touchstart", function(evt) {
            startX = endX = evt.targetTouches[0].clientX;  // startX=endX 排除點擊的響應
        });
        scrolWrp.addEventListener("touchmove", function(evt) {
            endX = evt.targetTouches[0].clientX;
        });
        scrolWrp.addEventListener("touchend", function(evt) {

            // 47是一個滑動距離的范圍蹲坷,可以按自己喜好確定
            if (endX - startX > 47) {
                indexNum > 0 ? indexNum-- : indexNum = scrolItem.length - 1;
                changeEft(indexNum)
            } else if (endX - startX < -47) {
                indexNum < scrolItem.length - 1 ? indexNum++ : indexNum = 0;
                changeEft(indexNum)
            }
        });

輪播其實寫了很多了驶乾,這次因為輪播里要點擊跳出,然后就發(fā)現(xiàn)了需要排除點擊的動作循签,所以在touchstart時就的讓startX和endX同一個值级乐,那么如果沒有滑動產(chǎn)生的話,自然就不會進入之后if的判斷里了县匠,也就不會有變換效果發(fā)生风科。

好了,到此乞旦,本文告一段落贼穆!感謝您的閱讀!祝您和您的家人身體健康兰粉,闔家幸福故痊!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市玖姑,隨后出現(xiàn)的幾起案子愕秫,更是在濱河造成了極大的恐慌,老刑警劉巖客峭,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件豫领,死亡現(xiàn)場離奇詭異,居然都是意外死亡舔琅,警方通過查閱死者的電腦和手機等恐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來备蚓,“玉大人课蔬,你說我怎么就攤上這事〗汲ⅲ” “怎么了二跋?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長流昏。 經(jīng)常有香客問我扎即,道長,這世上最難降的妖魔是什么况凉? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任谚鄙,我火速辦了婚禮,結(jié)果婚禮上刁绒,老公的妹妹穿的比我還像新娘闷营。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布傻盟。 她就那樣靜靜地躺著速蕊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪娘赴。 梳的紋絲不亂的頭發(fā)上规哲,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音诽表,去河邊找鬼媳叨。 笑死,一個胖子當著我的面吹牛关顷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播武福,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼议双,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捉片?” 一聲冷哼從身側(cè)響起平痰,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伍纫,沒想到半個月后宗雇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡莹规,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年赔蒲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片良漱。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡舞虱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出母市,到底是詐尸還是另有隱情矾兜,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布患久,位于F島的核電站椅寺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蒋失。R本人自食惡果不足惜返帕,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望高镐。 院中可真熱鬧溉旋,春花似錦、人聲如沸嫉髓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至梧油,卻和暖如春苫耸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背儡陨。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工褪子, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人骗村。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓嫌褪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胚股。 傳聞我的和親對象是個殘疾皇子笼痛,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

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