<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        基于vue2.0實現簡單輪播圖

        來源:懂視網 責編:小采 時間:2020-11-27 22:25:03
        文檔

        基于vue2.0實現簡單輪播圖

        基于vue2.0實現簡單輪播圖:因為之前一直在忙公司的項目,vue這塊就生疏了不少,正好借這個小demo復習下vue的知識。 先來個效果圖: 如圖所示,實現的就是一個間隔2.5s自動向左切換下一張的輪播圖,同時鼠標移入停止輪播,移出回復輪播; 而下方按鈕會根據當前圖片自動變紅且可以手動控
        推薦度:
        導讀基于vue2.0實現簡單輪播圖:因為之前一直在忙公司的項目,vue這塊就生疏了不少,正好借這個小demo復習下vue的知識。 先來個效果圖: 如圖所示,實現的就是一個間隔2.5s自動向左切換下一張的輪播圖,同時鼠標移入停止輪播,移出回復輪播; 而下方按鈕會根據當前圖片自動變紅且可以手動控

        因為之前一直在忙公司的項目,vue這塊就生疏了不少,正好借這個小demo復習下vue的知識。

        先來個效果圖:

        如圖所示,實現的就是一個間隔2.5s自動向左切換下一張的輪播圖,同時鼠標移入停止輪播,移出回復輪播;
        而下方按鈕會根據當前圖片自動變紅且可以手動控制當前圖片。

        思路:

        整個demo分為輪播圖片和控制span兩個部分。
        按照前端工程化的需求來說,這兩個部分應該解耦成兩個component最后再導入頁面比較合理,但由于demo較為簡單,
        作為練手就不搞那么復雜了,對項目有追求【強迫癥】的童鞋可以往組件化的目標靠,具體方法參考我之前的博文。

        第一步,先寫出整體框架:

        <template> 
         <div class="slide"> 
         <div class="slideshow"> 
         <ul> 
         <li v-for="(img, index) in imgArray" :key="index"> 
         <a href="#"> 
         <img :src='img'> 
         </a> 
         </li> 
         </ul> 
         </div> 
         <div class="bar"> 
         <span v-for="(item, index) in imgArray" :key="index"></span> 
         </div> 
         </div> 
        </template> 
        

        我們使用v-for列表渲染兩個部分,值得注意的是列表渲染最好要提供一個key值,至于為什么官方文檔說得很復雜,
        就我所知的是如果不加key值在使用transition-group也就是過渡效果的時候會出現bug,官方給出的建議也是盡可能
        在列表渲染的時候加上key值,百利無一害,養成習慣就好。

        第二步:

        在上一步我們渲染的是一個img數組,具體:

        data () { 
         return { 
         imgArray: [ 
         '../static/timg1.jpg', 
         '../static/timg2.jpg', 
         '../static/timg3.jpg', 
         '../static/timg4.jpg' 
         ] 
         } 
         } 
        

        然后實現輪播的原理就是創建一個變量與當前遍歷的index值比對,若相同則顯示,否則隱藏;
        同時下方按鈕index若也與變量相同則當前按鈕變為活躍狀態即背景變紅。

        <template> 
         <div class="slide"> 
         <div class="slideshow"> 
         <ul> 
         <li v-for="(img, index) in imgArray" v-show="index===mark" :key="index"> 
         <a href="#"> 
         <img :src='img'> 
         </a> 
         </li> 
         </ul> 
         </div> 
         <div class="bar"> 
         <span v-for="(item, index) in imgArray" :class="{ 'active':index===mark }" :key="index"></span> 
         </div> 
         </div> 
        </template> 
        

        第三步:

        創建定時器,每隔2.5s給變量mark+1,掛載到鉤子函數created:

        export default { 
         data () { 
         return { 
         mark: 0, //比對圖片索引的變量 
         imgArray: [ 
         '../static/timg1.jpg', 
         '../static/timg2.jpg', 
         '../static/timg3.jpg', 
         '../static/timg4.jpg' 
         ] 
         } 
         }, 
         methods: { 
         autoPlay () { 
         this.mark++; 
         if (this.mark === 4) { //當遍歷到最后一張圖片置零 
         this.mark = 0 
         } 
         }, 
         play () { 
         setInterval(this.autoPlay, 2500) 
         }, 
         change (i) { 
         this.mark = i 
         } 
         }, 
         created () { 
         this.play() 
         } 
        } 
        </script> 
        

        第四步:

        加上css文件,出現基本的效果。

        <style> 
         * { 
         margin: 0; 
         padding: 0; 
         list-style: none; 
         } 
         .slide { 
         width: 1024px; 
         height: 320px; 
         margin: 0 auto; 
         margin-top: 50px; 
         overflow: hidden; 
         position: relative; 
         } 
         .slideshow { 
         width: 1024px; 
         height: 320px; 
         } 
         li { 
         position: absolute; 
         } 
         img { 
         width: 1024px; 
         height: 320px; 
         } 
         .bar { 
         position: absolute; 
         width: 100%; 
         bottom: 10px; 
         margin: 0 auto; 
         z-index: 10; 
         text-align: center; 
         } 
         .bar span { 
         width: 20px; 
         height: 5px; 
         border: 1px solid; 
         background: white; 
         display: inline-block; 
         margin-right: 10px; 
         } 
         .active { 
         background: red !important; 
         } 
        </style> 
        

        第五步:

        現在我們得到的效果還是每隔一段時間圖片突然變成另外一張,用戶體驗很差,達不到輪播的效果。
        所以我們得加上過渡效果。
        html:

        <transition-group tag="ul" name="image"> 
         <li v-for="(img, index) in imgArray" v-show="index===mark" :key="index"> 
         <a href="#"> 
         <img :src='img'> 
         </a> 
         </li> 
        </transition-group> 

        css:

        .image-enter-active { 
         transform: translateX(0); 
         transition: all 1.5s ease; 
         } 
         .image-leave-active { 
         transform: translateX(-100%); 
         transition: all 1.5s ease; 
         } 
         .image-enter { 
         transform: translateX(100%); 
         } 
         .image-leave { 
         transform: translateX(0); 
         } 
        

        這里因為我們是給一個渲染列表加上過渡效果所以要使用transition-group而不是單元素的transition,否則會報錯。
        另外就是記得給transition-group加上tag="ul"屬性,不然就會被默認渲染成span了。
        css部分需要關聯name屬性值作為前綴。

        第六步:

        給下方按鈕增加切換圖片的點擊事件。
        最后我們再加上移入/移出實現關閉/打開定時器效果,即用戶鼠標停留當前圖片停止滾動,移出則繼續。

        <template> 
         <div class="slide" v-on:mouseover="stop()" v-on:mouseout="move()"> 
         <div class="slideshow"> 
         <transition-group tag="ul" name="image"> 
         <li v-for="(img, index) in imgArray" v-show="index===mark" :key="index"> 
         <a href="#"> 
         <img :src='img'> 
         </a> 
         </li> 
         </transition-group> 
         </div> 
         <div class="bullet"> 
         <span v-for="(item, index) in imgArray" :class="{ 'active':index===mark }" 
         @click="change(index)" :key="index"></span> 
         </div> 
         </div> 
        </template> 
         
        <script> 
        export default { 
         data () { 
         return { 
         timer: null, //定時器 
         mark: 0, //比對圖片索引的變量 
         imgArray: [ 
         '../static/timg1.jpg', 
         '../static/timg2.jpg', 
         '../static/timg3.jpg', 
         '../static/timg4.jpg' 
         ] 
         } 
         }, 
         methods: { 
         autoPlay () { 
         this.mark++; 
         if (this.mark === 4) { 
         this.mark = 0 
         } 
         }, 
         play () { 
         this.timer = setInterval(this.autoPlay, 2500) 
         }, 
         change (i) { 
         this.mark = i 
         }, 
         stop () { 
         clearInterval(this.timer) 
         }, 
         move () { 
         this.timer = setInterval(this.autoPlay, 2500) 
         } 
         }, 
         created () { 
         this.play() 
         } 
        } 
        </script> 
        

        這個地方卡了我很長時間,因為根據原生js定時器的思路在定義定時器的時候就應該設置變量,然后把這個變量傳到clearInterval函數里。
        問題在于vue函數里設置變量很不可取,存在定義域的問題,開啟定時器跟關閉定時器是兩個函數,不能共用一個變量。
        后來靈機一動,想到不如把變量寫在data里面?
        一試,成功!

        至此,輪播圖的功能基本實現。
        當然,項目做的比較簡陋也存在一些bug,如當一個切換動畫未完成前點擊另一個按鈕會出現神奇的交錯現象,由于時間關系還未解決,
        希望各位看官能提出寶貴的建議!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        基于vue2.0實現簡單輪播圖

        基于vue2.0實現簡單輪播圖:因為之前一直在忙公司的項目,vue這塊就生疏了不少,正好借這個小demo復習下vue的知識。 先來個效果圖: 如圖所示,實現的就是一個間隔2.5s自動向左切換下一張的輪播圖,同時鼠標移入停止輪播,移出回復輪播; 而下方按鈕會根據當前圖片自動變紅且可以手動控
        推薦度:
        標簽: VUE 輪播 簡單
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲欧美日韩自偷自拍| 中文字幕亚洲图片| 亚洲人成片在线观看| 国产福利视精品永久免费| 亚洲国产第一站精品蜜芽| 2022国内精品免费福利视频| 亚洲精品老司机在线观看| 五月婷婷免费视频| 亚洲国产V高清在线观看| 人成午夜免费大片在线观看| 四虎永久免费观看| 五月天婷婷免费视频| 亚洲人成精品久久久久| 99热这里有免费国产精品| 精品亚洲麻豆1区2区3区| 一个人看www在线高清免费看| 亚洲综合偷自成人网第页色| 国产老女人精品免费视频| 亚洲精品成人无限看| 久久aⅴ免费观看| 亚洲日本久久一区二区va| 精品久久免费视频| www免费黄色网| 亚洲va久久久噜噜噜久久狠狠| 69视频免费观看l| 在线精品亚洲一区二区| 免费一看一级毛片全播放| 9i9精品国产免费久久| 亚洲网红精品大秀在线观看| 好爽…又高潮了毛片免费看 | 亚洲电影在线播放| 成人免费一区二区三区在线观看| 免费的黄网站男人的天堂 | 亚洲国产精品13p| 精品熟女少妇a∨免费久久| 亚洲欧美乱色情图片| 久久久久亚洲AV无码专区桃色| 香港a毛片免费观看| 最新亚洲人成无码网站| 毛片免费观看的视频在线| 免费精品视频在线|