成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Vue中實(shí)現(xiàn)輪播圖效果的代碼怎么寫

本文小編為大家詳細(xì)介紹“Vue中實(shí)現(xiàn)輪播圖效果的代碼怎么寫”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Vue中實(shí)現(xiàn)輪播圖效果的代碼怎么寫”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

創(chuàng)新互聯(lián)建站專注于昔陽企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,成都商城網(wǎng)站開發(fā)。昔陽網(wǎng)站建設(shè)公司,為昔陽等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站策劃,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

Vue 過渡

Vue 的過渡系統(tǒng)是內(nèi)置的,在元素從 DOM 中插入或移除時(shí)自動(dòng)應(yīng)用過渡效果。

過渡的實(shí)現(xiàn)要在目標(biāo)元素上使用 transition 屬性,具體實(shí)現(xiàn)參考Vue2 過渡

下面例子中我們用到列表過渡,可以先學(xué)習(xí)一下官方的例子

要同時(shí)渲染整個(gè)列表,比如使用 v-for,我們需要用到 <transition-group> 組件

Vue 輪播圖

我們先看這樣一個(gè)列表

<ul>
 <li v-for="list in slideList">
  <img :src="list.image" :alt="list.desc">
 </li>
</ul>

這個(gè)列表要從實(shí)例(見文章末尾)中獲取了三張圖片,要使其中的圖片產(chǎn)生輪播,我們需要用 <transition-group> 組件替換其中的 ul 標(biāo)簽,從而實(shí)現(xiàn)過渡組件的功能,完整的組件 DOM 內(nèi)容如下,下面分段解釋一下

<div class="carousel-wrap" id="carousel">
  // 輪播圖列表
  <transition-group tag="ul" class='slide-ul' name="list">
   <li v-for="(list,index) in slideList" :key="index" v-show="index===currentIndex" @mouseenter="stop" @mouseleave="go">
    <a :href="list.clickUrl" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
     <img :src="list.image" :alt="list.desc">
    </a>
   </li>
  </transition-group>
  // 輪播圖位置指示
  <div class="carousel-items">
   <span v-for="(item,index) in slideList.length" :class="{'active':index===currentIndex}" @mouseover="change(index)"></span>
  </div>
</div>

對應(yīng)的數(shù)據(jù)結(jié)構(gòu)如下:

data: {
  slideList: [
    {
      "clickUrl": "#",
      "desc": "nhwc",
      "image": "http://dummyimage.com/1745x492/f1d65b"
    },
    {
      "clickUrl": "#",
      "desc": "hxrj",
      "image": "http://dummyimage.com/1745x492/40b7ea"
    },
    {
      "clickUrl": "#",
      "desc": "rsdh",
      "image": "http://dummyimage.com/1745x492/e3c933"
    }
  ],
  currentIndex: 0,
  timer: ''
},

在使用 v-for 時(shí),應(yīng)給對應(yīng)的元素綁定一個(gè) key 屬性,相當(dāng)于 index 標(biāo)識,在 <transition-group> 組件中,key 是必須的,這樣一個(gè)輪播圖的 DOM 結(jié)構(gòu)就完成了

接下來我們看看輪播函數(shù)的實(shí)現(xiàn),再來看組件中的 li 元素

<li v-for="(list,index) in slideList" :key="index">
  <a :href="list.clickUrl" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
   <img :src="list.image" :alt="list.desc">
  </a>
</li>

上面通過 v-for 渲染了 li 列表,并在其中插入了包含可點(diǎn)擊跳轉(zhuǎn)的圖片,接下來看看如何實(shí)現(xiàn)輪播,輪播圖的樣式直接在后面給出大家 sass 代碼,父元素 ul 設(shè)置 position: relative;overflow: hidden 后,li 大小設(shè)為和父元素相同,absolute 定位固定在父元素中,要讓 li 按照順序顯示,需要用到 v-show 或 v-if 處理,通過 index 值來改變當(dāng)前顯示的 li ,本例 v-show 綁定條件 index===currentIndex,用定時(shí)器改變 currentIndex 實(shí)現(xiàn)輪播

<li v-for="(list,index) in slideList" :key="index" v-show="index===currentIndex" @mouseenter="stop" @mouseleave="go">
  <a :href="list.clickUrl" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
   <img :src="list.image" :alt="list.desc">
  </a>
</li>

實(shí)例中的方法:

//在下個(gè)tick執(zhí)行等待圖片加載完成后再
this.$nextTick(() => {
 this.timer = setInterval(() => {
  this.autoPlay()
 },4000)
}),
go() {
 this.timer = setInterval(() => {
  this.autoPlay()
 },4000)
},
stop() {
 clearInterval(this.timer)
 this.timer = null
},
change(index) {
 this.currentIndex = index
},
autoPlay() {
 this.currentIndex++
 if (this.currentIndex > this.slideList.length - 1) {
  this.currentIndex = 0
 }
}

DOM 中為每個(gè)輪播 li 元素綁定事件 @mouseenter="stop" @mouseleave="go" 事件,使輪播鼠標(biāo)移入時(shí)停止,移出時(shí)再次開始。

輪播圖現(xiàn)在位置指示,綁定類名 active 改變顏色,綁定 change() 方法,鼠標(biāo)移到指示點(diǎn)時(shí)跳轉(zhuǎn)輪播圖

<div class="carousel-items">
 <span v-for="(item,index) in slideList.length" :class="{'active':index===currentIndex}" @mouseover="change(index)"></span>
</div>

sass 樣式代碼

.carousel-wrap {
 position: relative;
 height: 453px;
 width: 100%;
 overflow: hidden;
 // 刪除
 background-color: #fff;
}

.slide-ul {
 width: 100%;
 height: 100%;
 li {
  position: absolute;
  width: 100%;
  height: 100%;
  img {
   width: 100%;
   height: 100%;
  }
 }
}

.carousel-items {
 position: absolute;
 z-index: 10;
 top: 380px;
 width: 100%;
 margin: 0 auto;
 text-align: center;
 font-size: 0;
 span {
  display: inline-block;
  height: 6px;
  width: 30px;
  margin: 0 3px;
  background-color: #b2b2b2;
  cursor: pointer;
 }
 .active {
  background-color: $btn-color;
 }
}

滑動(dòng)動(dòng)畫設(shè)置,知識點(diǎn)詳見 Vue 教程中的 過渡 css 類名

.list-enter-active {
 transition: all 1s ease;
 transform: translateX(0)
}

.list-leave-active {
 transition: all 1s ease;
 transform: translateX(-100%)
}

.list-enter {
 transform: translateX(100%)
}

.list-leave {
 transform: translateX(0)
}

完整 Vue 實(shí)例如下

new Vue({
 el: '#carousel',
 data: {
  slideList: [
    {
      "clickUrl": "#",
      "desc": "nhwc",
      "image": "http://dummyimage.com/1745x492/f1d65b"
    },
    {
      "clickUrl": "#",
      "desc": "hxrj",
      "image": "http://dummyimage.com/1745x492/40b7ea"
    },
    {
      "clickUrl": "#",
      "desc": "rsdh",
      "image": "http://dummyimage.com/1745x492/e3c933"
    }
  ],
  currentIndex: 0,
  timer: ''
 },
 methods: {
  this.$nextTick(() => {
   this.timer = setInterval(() => {
    this.autoPlay()
   },4000)
  }) 
  go() {
   this.timer = setInterval(() => {
    this.autoPlay()
   },4000)
  },
  stop() {
   clearInterval(this.timer)
   this.timer = null
  },
  change(index) {
   this.currentIndex = index
  },
  autoPlay() {
   this.currentIndex++
   if (this.currentIndex > this.slideList.length - 1) {
    this.currentIndex = 0
   }
  }
 }
})

讀到這里,這篇“Vue中實(shí)現(xiàn)輪播圖效果的代碼怎么寫”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前題目:Vue中實(shí)現(xiàn)輪播圖效果的代碼怎么寫
標(biāo)題網(wǎng)址:http://jinyejixie.com/article2/ggggic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)營銷型網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航標(biāo)簽優(yōu)化、ChatGPT、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
庆城县| 五莲县| 拉萨市| 七台河市| 庆元县| 黔南| 成武县| 锡林浩特市| 长治市| 安徽省| 卢湾区| 龙州县| 聂拉木县| 连云港市| 南雄市| 峡江县| 望都县| 浑源县| 民丰县| 樟树市| 凤冈县| 潜江市| 东城区| 合江县| 芷江| 靖安县| 山阴县| 阳新县| 海阳市| 福泉市| 安仁县| 称多县| 垫江县| 临颍县| 本溪市| 大兴区| 宜章县| 义马市| 搜索| 博爱县| 墨脱县|