1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      vue輪播組件怎么實(shí)現(xiàn)$children和$parent

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

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

      一、知識(shí)點(diǎn)涉及

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

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

      vue的 $children和 $parent

      3、css動(dòng)畫和形變

      二、開始寫組件

      1、先寫你的框,主組件

      這個(gè)是容器,負(fù)責(zé)組件定位和組件的整體運(yùn)作的

      html部分

       

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

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

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

      props: {
       // 時(shí)間間隔
       interval: {
        type: Number,
        default: 8000
       },
       //是否自動(dòng)播放
       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 {
        // 計(jì)時(shí)器
        timer: "",
        //子元素
        items: [],
        // 當(dāng)前顯示的元素
        active: 0
       };
      },

      看看就好,沒(méi)啥多說(shuō)的,我感覺(jué)挺清晰的

      2、寫你的子組件

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

      因?yàn)椋褐鹘M件主要負(fù)責(zé)動(dòng)畫運(yùn)作和容器的作用。定義好你要的參數(shù)之后,其實(shí)主組件你直接看代碼是不不符合編寫邏輯的

      有了主組件之后,我需要有子元素才能動(dòng)起來(lái),所以先把子元素加載進(jìn)來(lái)

      html部分

      
       
      

      js核心部分

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

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

      主組件的更新代碼

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

      css核心部分

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

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

      3、一般彈窗動(dòng)畫之類的編寫原理講解

      1、不能用display:none,因?yàn)槟菢釉厥侵苯语@示出來(lái)的,動(dòng)畫是無(wú)法有的。

      2、舉例:下方彈窗劃出

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

      所以我們要做的是在點(diǎn)擊顯示的時(shí)候把元素位移回來(lái)

      3、所以其實(shí)頁(yè)面上基本的動(dòng)畫都是先放在你看不到的地方,然后再通過(guò) transform

      形變css給移動(dòng)回來(lái)的。我這次的組件也是一樣的。

      4、主組件操作

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

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

      3、定時(shí)器部分

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

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

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

      //播放實(shí)際運(yùn)行函數(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;
      }

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

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

      5、主組件css部分

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

      三、組件文檔

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



      zIndexNumber2000組件層級(jí)



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



      dht-swiper-side-itemdht-swiper-side




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

      四、個(gè)人組件效果展示

      
       
        我是組件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);
       // 抖動(dòng)動(dòng)畫
       @keyframes mymove {
        0% {
         left: 0;
        }
        50% {
         left: 15px;
        }
        100% {
         left: 0;
        }
       }
      }
      

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


      分享標(biāo)題:vue輪播組件怎么實(shí)現(xiàn)$children和$parent
      網(wǎng)址分享:http://www.ef60e0e.cn/article/gpjioo.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        盐津县| 崇阳县| 宁都县| 达州市| 达州市| 恩平市| 日照市| 平陆县| 仪征市| 奎屯市| 额敏县| 陕西省| 岐山县| 探索| 新余市| 阳泉市| 赣州市| 台东市| 泸州市| 七台河市| 金塔县| 翁源县| 光山县| 富蕴县| 凌云县| 南通市| 无极县| 福鼎市| 武威市| 林口县| 迁安市| 全椒县| 衡南县| 友谊县| 德化县| 疏附县| 韶山市| 浦江县| 云安县| 古田县| 大同市|