真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

vue輪播組件怎么實現(xiàn)$children和$parent

這篇文章主要介紹了vue輪播組件怎么實現(xiàn)$children和$parent的相關(guān)知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇vue輪播組件怎么實現(xiàn)$children和$parent文章都會有所收獲,下面我們一起來看看吧。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:空間域名、虛擬主機、營銷軟件、網(wǎng)站建設(shè)、新野網(wǎng)站維護、網(wǎng)站推廣。

一、知識點涉及

1、vue組件化開發(fā)

2、vue組件嵌套組,就是兩個組件相互耦合,然后必須配合使用的那種。參考elementUI里面的表單組件(分為from組件,item組件)或者輪播組件。

vue的 $children和 $parent

3、css動畫和形變

二、開始寫組件

1、先寫你的框,主組件

這個是容器,負責(zé)組件定位和組件的整體運作的

html部分

 

主要兩個鼠標(biāo)事件: mouseenter和 mouseleave

第一個就是鼠標(biāo)在元素上負責(zé)停止定時器,第二個就是鼠標(biāo)離開重啟定時器

對應(yīng)的props和監(jiān)聽

props: {
 // 時間間隔
 interval: {
  type: Number,
  default: 8000
 },
 //是否自動播放
 autoplay: {
  type: Boolean,
  default: true
 },
 zIndex: {
  type: Number,
  default: 2000
 },
 // x軸變化
 axisx: {
  type: Number,
  default: 1000
 }
},
watch: {
 autoplay(val) {
  val ? this.startTimer() : this.stopTimer();
 }
},
data() {
 return {
  // 計時器
  timer: "",
  //子元素
  items: [],
  // 當(dāng)前顯示的元素
  active: 0
 };
},

看看就好,沒啥多說的,我感覺挺清晰的

2、寫你的子組件

這里必須跳躍一下,為什么呢?

因為:主組件主要負責(zé)動畫運作和容器的作用。定義好你要的參數(shù)之后,其實主組件你直接看代碼是不不符合編寫邏輯的

有了主組件之后,我需要有子元素才能動起來,所以先把子元素加載進來

html部分


 

js核心部分

created() {
 //元素創(chuàng)建和需要更新父元素屬性
 this.$parent && this.$parent.updateItems();
},
beforeMount() {},
mounted() {},
destroyed() {
 //元素銷毀和需要更新父元素屬性
 this.$parent && this.$parent.updateItems();
},

這里主要是創(chuàng)建元素的時候需要把元素加入主組件的items中,銷毀的時候同樣進行更新

主組件的更新代碼

// 更新元素
updateItems() {
 this.items = this.$children.filter(
  // 更新元素需要確認為指定的子元素
  child => child.$options.name === "dhtSwiperSideItem"
 );
},

css核心部分

css部分主要是定義動畫效果,和基礎(chǔ)css,主要是看動畫部分

.dht-swiper-side-item {
 position: absolute;
 transition: all 1s ease;
 transform: translateX(1000px);
 // 抖動動畫
 @keyframes mymove {
  0% {
   left: 0;
  }
  50% {
   left: 15px;
  }
  100% {
   left: 0;
  }
 }
}

3、一般彈窗動畫之類的編寫原理講解

1、不能用display:none,因為那樣元素是直接顯示出來的,動畫是無法有的。

2、舉例:下方彈窗劃出

其實在寫這些彈窗的時候元素已經(jīng)在頁面上面加載好了,只是被我們隱藏到顯示器之外了。

所以我們要做的是在點擊顯示的時候把元素位移回來

3、所以其實頁面上基本的動畫都是先放在你看不到的地方,然后再通過 transform

形變css給移動回來的。我這次的組件也是一樣的。

4、主組件操作

1、回顧一下,剛才我們先寫了主組件,主組件加載子組件,子組件會調(diào)用主組件函數(shù),讓主組件去更新自己的items,提前存好。方便使用

2、既然我們主組件拿到了子組件了,那么就可以直接操作子組件進行操作,其實核心原理在于主組件之間操作子組件。(我看了elementUI源碼的走馬燈部分,寫的比我復(fù)雜。)

3、定時器部分

//開始計時器
startTimer() {
 //預(yù)先執(zhí)行一次,保證不會出現(xiàn)第一次運行延遲雙倍實際
 this.play();
 // 攔截處理
 if (this.interval <= 0 || !this.autoplay || this.timer) return;
 this.timer = setInterval(() => {
  this.play();
 }, this.interval);
},

這塊其實沒啥,除了預(yù)先的攔截剩下的就是啟動定時器,然后運行動畫播放函數(shù)

4、核心播放函數(shù)部分

//播放實際運行函數(shù)
play() {
 let len = this.items.length - 1;
 let now = this.active > len ? 0 : this.active;
 let old = this.active - 1 < 0 ? 0 : this.active - 1;
 //console.log("當(dāng)前", now, "老的", old);
 //關(guān)閉老元素
 this.items[old].show = false;
 this.items[old].itemStyle = {
  transition: "all 1.5s ease",
  transform: `translateX(${this.axisx}px)`
 };
 //顯示新元素
 this.items[now].show = true;
 this.items[now].itemStyle = {
  transition: "all 1.5s ease",
  transform: "translateX(0)",
  animation: "mymove 1.5s 2"
 };
 //記錄數(shù)據(jù)
 this.active = now + 1;
}

這個其實很簡單,每次運行的時候處理一下數(shù)據(jù),拿到當(dāng)前要運行的子元素id和老的元素,當(dāng)前的展示,老的移動回去。最后記錄一下新的id

這里有一個坑點:就是animation部分,記得運行2次,不然只是一次會導(dǎo)致下面的元素看不到抖動效果。原因是在移動的時候就抖動完畢了。

5、主組件css部分

.dht-swiper-side {
 position: absolute;
 z-index: 2000;
 right: 0;
 display: flex;
 flex-flow: row;
 width: 100%;
}

三、組件文檔

dht-swiper-side側(cè)邊輪播組件intervalNumber5000時間間隔,默認5秒轉(zhuǎn)換一次必須給該組件指定寬度,否則無法正常顯示。內(nèi)部子元素展示做最側(cè)位置主要由該組件的寬度定義
autoplayBooleanTRUE是否自動播放,咱不支持false



zIndexNumber2000組件層級



axisxNumber1000隱藏的子元素位置,px單位,默認1000。當(dāng)內(nèi)部元素寬度過大時可以調(diào)節(jié)該參數(shù)



dht-swiper-side-itemdht-swiper-side




dht-swiper-side的子組件,用于存放內(nèi)容

四、個人組件效果展示


 
  我是組件1
      我是組件2
      我是組件3       我是組件4   .main {  width: 500px;  .item {   width: 100px;   height: 100px;   background: #009966;   border: #409eff 1px solid;   text-align: center;   line-height: 100px;  } }

主組件全部代碼






.dht-swiper-side {
 position: absolute;
 z-index: 2000;
 right: 0;
 display: flex;
 flex-flow: row;
 width: 100%;
}

子組件全部代碼






.dht-swiper-side-item {
 position: absolute;
 transition: all 1s ease;
 transform: translateX(1000px);
 // 抖動動畫
 @keyframes mymove {
  0% {
   left: 0;
  }
  50% {
   left: 15px;
  }
  100% {
   left: 0;
  }
 }
}

關(guān)于“vue輪播組件怎么實現(xiàn)$children和$parent”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“vue輪播組件怎么實現(xiàn)$children和$parent”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站標(biāo)題:vue輪播組件怎么實現(xiàn)$children和$parent
網(wǎng)頁鏈接:http://weahome.cn/article/gpjioo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部