国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端小白的學習之路(Vue2 四)

這篇具有很好參考價值的文章主要介紹了前端小白的學習之路(Vue2 四)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

提示:學習vue2的第四天,筆記記錄:混入(mixins),插槽(slot),過渡與動畫(transition)

目錄

一、混入(mixins)

二、插槽(solt)

1.匿名插槽

2.具名插槽

三、過渡與動畫(transition)?

1.過渡

1)單元素過渡

Ⅰ.通用類名

Ⅱ.指定類名

2)多元素過渡?

2.動畫?

1.自定義動畫

2.使用動畫庫?


一、混入(mixins)

混入(Mixin)是一種重用 Vue 組件中可復用功能的方法,它允許你在多個組件之間共享相同的代碼邏輯。通過混入,你可以將一組選項合并到組件中,這些選項可以包括數(shù)據(jù)、計算屬性、方法等。

基本步驟:

1.創(chuàng)建混入對象:首先,創(chuàng)建一個包含要復用的選項的混入對象。這個對象可以包含任何 Vue 組件中可用的選項。

const options = {
  data() {
      return {
          num: 100
      }
  },
  methods: {
      add() {
          this.num++;
      }
  },
  watch: {
      num(nValue) {
          console.log("值:", nValue);
      }
  },
  created() {
      console.log("初始化...")
  }
}

2.在組件中使用混入:在你想要使用混入的組件中,通過 mixins 選項將混入對象添加到組件中。?

// 組件A
const CompA = {
    data() {
        return {
            num: 1
        }
    },
    // 混入語法
    mixins: [
        options
    ],
    template: `
        <div>
            <h3>組件A</h3>
            <p>{{num}}</p>
            <button @click="add">按鈕</button>
        </div>
        `,
}
// 組件B
const CompB = {
    // 混入語法
    mixins: [
        options
    ],
    template: `
        <div>
            <h3>組件B</h3>
            <p>{{num}}</p>
            <button @click="add">按鈕</button>
        </div>
        `,
}

:?當組件data選項中的數(shù)據(jù)和mixins選項中的屬性和方法相同的情況,優(yōu)先使用的是組件的屬性和方法等?。雖然混入提供了一種方便的重用代碼的方法,但過度使用混入可能導致代碼變得難以理解和維護。因此,應該謹慎使用混入,避免濫用。

二、插槽(solt)

組件插槽(slot)是一種機制,允許組件接受額外的內(nèi)容作為其子組件,并且可以在組件內(nèi)部的特定位置渲染這些內(nèi)容。插槽使得組件更加靈活,可以根據(jù)需要插入不同的內(nèi)容。

1.匿名插槽

匿名插槽是最簡單的一種插槽,不需要任何特定的名稱。當在組件中寫入內(nèi)容時,如果沒有為插槽指定名稱,那么這個內(nèi)容會被放置到子組件中的默認插槽位置。在子組件中,可以使用 <slot> 元素來標記默認插槽的位置。

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        .header {
            width: 100%;
            box-sizing: border-box;
            padding: 0 15px;
            height: 60px;
            background-color: #ccc;
            display: flex;
            align-items: center;
            margin-bottom: 10px;
        }
        .header .left {
            width: 80px;
            height: 40px;
            background-color: red;
            text-align: center;
            line-height: 40px;
        }
        .header .left a , 
        .header .left span {
            color: #fff;
            text-decoration: none;
        }
    </style>
</head>
<body>
    <div id="app">
        <comp-header><span>搜狐  </span></comp-header>
        <comp-header><span>淘寶  </span></comp-header>
        <comp-header><span>京東  </span></comp-header>
        <comp-header><span>拼多多</span></comp-header>
    </div>
    <script src="./libs/vue@2.7.16/vue.js"></script>
    <script>

        // 匿名插槽
        // <slot></slot>
        // 編寫頭部組件
        const CompHeader = {
            template: `
                <header class="header">
                    <!-- 插槽 -->
                    <div class="left">
                        <slot></slot>
                    </div>
                </header>
            `
        }
        //禁止控制臺輸出日志信息
        Vue.config.productionTip = false;
        new Vue({
            //掛載容器
            el: "#app",
            // 注冊組件
            components: {CompHeader}
        })
    </script>
</body>
</html>

在上面的案例中<comp-header>?組件中的<span>搜狐</span>等內(nèi)容就會被插入匿名插槽中

2.具名插槽

與匿名插槽不同,在組件中寫入的內(nèi)容會根據(jù)name屬性插入到用v-solt綁定了相同名稱的插槽中

<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        .header {
            width: 100%;
            box-sizing: border-box;
            padding: 0 15px;
            height: 60px;
            background-color: deepskyblue;
            display: flex;
            align-items: center;
            margin-bottom: 10px;
        }

        .header .left {
            width: 80px;
            height: 40px;
            /* background-color: red; */
            text-align: center;
            line-height: 40px;
        }

        .header .left a,
        .header .left span {
            color: #fff;
            text-decoration: none;
        }

        .header .center {
            flex-grow: 1;
        }

        .header .center input {
            width: 100%;
            height: 40px;
            border-radius: 20px;
            border: 0;
            outline: none;
            box-sizing: border-box;
            padding-left: 15px;
        }

        .header .right {
            width: 50px;
            height: 40px;
            /* background-color: blue; */
            text-align: center;
            line-height: 40px;
        }

        .header .right a {
            color: #fff;
            text-decoration: none;
        }
    </style>
</head>

<body>
    <div id="app">
        <comp-header>
            <!-- 代表left插槽 -->
            <template v-slot:left>
                <span>LOGO</span>
            </template>

            <!-- 代表center插槽 -->
            <template v-slot:center>
                <input type="text" placeholder="請輸入關(guān)鍵字">
            </template>
            
            <!-- 代表right插槽 -->
            <template #right>
                <a href="#">登錄</a>
            </template>
        </comp-header>

    </div>
    <script src="./libs/vue@2.7.16/vue.js"></script>
    <script>
        // 具名插槽
        // <slot name="left"></slot>
        // 編寫頭部組件
        const CompHeader = {
            template: `
                <header class="header">
                    <!-- 插槽 -->
                    <div class="left">
                        <slot name="left"></slot>
                    </div>
                    <div class="center">
                        <slot name="center"></slot>
                    </div>
                    <div class="right">
                        <slot name="right"></slot>
                    </div>
                </header>
            `
        }
        //禁止控制臺輸出日志信息
        Vue.config.productionTip = false;
        new Vue({
            //掛載容器
            el: "#app",
            // 注冊組件
            components: { CompHeader }
        })
    </script>
</body>

</html>

在上面的案例中,v-solt:left中的logo就會 被插入到name='left'的插槽中去?

三、過渡與動畫(transition)?

1.過渡

過渡(Transition)是一種在元素在插入、更新或刪除時,在其內(nèi)部進行過渡的方式,就是為元素的行為增加過渡效果。

1)單元素過渡

通過內(nèi)置組件<transition>?可以對單個元素進行過渡動畫,可以在元素插入、更新或刪除時觸發(fā)動畫效果。它通過設(shè)置不同的 CSS 類名來實現(xiàn)動畫效果。

Ⅰ.通用類名

沒有設(shè)置name屬性的<transition>組件過渡效果都會執(zhí)行?.v-?開頭的類名中設(shè)置的過渡效果。

<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue</title>
    <link rel="stylesheet" href="./libs/bootstrap/css/bootstrap.css">
    <style>
        /* 入場類名 */
        /* 入場之前的樣式 */
        .v-enter {
            transform: translateX(-100%);
            opacity: 0;
        }
        /* 入場過程中的樣式 */
        .v-enter-active {
            transition: all .5s;
        }
        .v-enter-to {
            transform: translateX(0px);
            opacity: 1;
        }


        /* 離場類名 */
        /* 離場之前的樣式 */
        .v-leave {
            transform: translateY(0px);
            opacity: 1;
        }
        /* 離場過程中的樣式 */
        .v-leave-active {
            transition: all .5s;
        }
        /* 離場后的樣式 */
        .v-leave-to {
            transform: translateY(-100%);
            opacity: 0;
        }

    </style>
</head>

<body>
    <div id="app">
        <div class="container mt-2">
            <div class="btn btn-success" @click="isShow=true">入場(顯示)</div>
            <div class="btn btn-danger" @click="isShow=false">離場(隱藏)</div>

            <transition>
                <div v-if="isShow" class="bg-primary mt-2" style="height: 200px;"></div>
            </transition>

        </div>
        

    </div>
    <script src="./libs/vue@2.7.16/vue.js"></script>
    <script>


        //禁止控制臺輸出日志信息
        Vue.config.productionTip = false;
        new Vue({
            //掛載容器
            el: "#app",
            // 數(shù)據(jù)
            data(){
                return {
                    isShow: true 
                }
            },


        })
    </script>
</body>

</html>
Ⅱ.指定類名

通過在<transition>中設(shè)置name屬性可以調(diào)用?.name-? 開頭的專屬類名中的過渡效果。

<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue</title>
    <link rel="stylesheet" href="./libs/bootstrap/css/bootstrap.css">
    <style>
        /* 設(shè)置transition組件的name屬性為demo后 */
         /* 入場類名 */
        /* 入場之前的樣式 */
        .demo-enter {
            transform: translateX(-100%) rotate(180deg);
            opacity: 0;
        }
        /* 入場過程中的樣式 */
        .demo-enter-active {
            transition: all .5s;
        }
        .demo-enter-to {
            transform: translateX(0px)  rotate(0deg);
            opacity: 1;
        }


        /* 離場類名 */
        /* 離場之前的樣式 */
        .demo-leave {
            transform: translateY(0px)  rotate(0deg);
            opacity: 1;
        }
        /* 離場過程中的樣式 */
        .demo-leave-active {
            transition: all .5s;
        }
        /* 離場后的樣式 */
        .demo-leave-to {
            transform: translateY(-100%) rotate(180deg);
            opacity: 0;
        }
    </style>
</head>

<body>
    <div id="app">
        <div class="container mt-2">
            <div class="btn btn-success" @click="isShow=true">入場(顯示)</div>
            <div class="btn btn-danger" @click="isShow=false">離場(隱藏)</div>

            <transition name="demo">
                <div v-if="isShow" class="bg-primary mt-2" style="height: 200px;"></div>
            </transition>
        </div>
        

    </div>
    <script src="./libs/vue@2.7.16/vue.js"></script>
    <script>


        //禁止控制臺輸出日志信息
        Vue.config.productionTip = false;
        new Vue({
            //掛載容器
            el: "#app",
            // 數(shù)據(jù)
            data(){
                return {
                    isShow: true 
                }
            },


        })
    </script>
</body>

</html>

2)多元素過渡?

通過內(nèi)置組件<transition-group> 組件用于對多個相同類型的元素進行過渡動畫,例如列表中的項。它也通過設(shè)置不同的 CSS 類名來實現(xiàn)動畫效果。使用方法與 <transition> 類似,主要區(qū)別在于添加了 tag 屬性指定了渲染元素的標簽,默認為 span。

<template>
  <div>
    <transition-group name="list" tag="ul">
      <li v-for="(item, index) in items" :key="index">{{ item }}</li>
    </transition-group>
    <button @click="addItem">添加項</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: ['Item 1', 'Item 2', 'Item 3']
    };
  },
  methods: {
    addItem() {
      this.items.push(`Item ${this.items.length + 1}`);
    }
  }
};
</script>

<style>
/* 定義過渡效果的 CSS 類 */
.list-enter-active, .list-leave-active {
  transition: transform 0.5s;
}
.list-enter, .list-leave-to {
  transform: translateY(30px);
  opacity: 0;
}
</style>

2.動畫?

1.自定義動畫

通過@keyframes來自定義動畫,利用enter-active,leave-active這些屬性設(shè)置過渡

<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue</title>
    <link rel="stylesheet" href="./libs/bootstrap/css/bootstrap.css">
    <style>
        /* 入場類名 */
        .enter-box {
            animation: enter-ani .5s  forwards;
        }

        /* 離場類名 */
        .leave-box {
            animation: leave-ani .5s  forwards;
        }
        

        /* 自定義動畫 */
        /* 入場動畫 */
        @keyframes enter-ani {
            0% {
                transform: scale(.5) rotate(180deg);
                opacity: 0;
            }
            100% {
                transform: scale(1) rotate(0deg);
                opacity: 1;
            }
        }
        /* 離場動畫 */
        @keyframes leave-ani {
            0% {
                transform: scale(1) rotate(0deg);
                opacity: 1;
            }
            100% {
                transform: scale(.5) rotate(180deg);
                opacity: 0;
            }
        }
    </style>
</head>

<body>
    <div id="app">
        <div class="container mt-2">
            <div class="btn btn-success" @click="isShow=true">入場(顯示)</div>
            <div class="btn btn-danger" @click="isShow=false">離場(隱藏)</div>

            <!-- 處理動畫,利用enter-active,leave-active這些屬性設(shè)置 -->
            <!-- 1) 自定義動畫 -->
            <transition
                enter-active-class="enter-box"
                leave-active-class="leave-box"
                >
                <div v-if="isShow" class="bg-primary mt-2" style="height: 200px;"></div>
            </transition>
        </div>
        

    </div>
    <script src="./libs/vue@2.7.16/vue.js"></script>
    <script>
        //禁止控制臺輸出日志信息
        Vue.config.productionTip = false;
        new Vue({
            //掛載容器
            el: "#app",
            // 數(shù)據(jù)
            data(){
                return {
                    isShow: true 
                }
            },
        })
    </script>
</body>

</html>

2.使用動畫庫?

使用別人設(shè)置好的動畫可以輕松實現(xiàn)好看的動畫效果。

動畫庫:https://animate.style/

<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue</title>
    <!-- 動畫庫 -->
    <link rel="stylesheet" href="./libs/animate.min.css">

</head>

<body>
    <div id="app">
        <div class="container mt-2">
            <div class="btn btn-success" @click="isShow=true">入場(顯示)</div>
            <div class="btn btn-danger" @click="isShow=false">離場(隱藏)</div>

            <!-- 2) 使用動畫庫 -->
            <transition
                enter-active-class="animate__animated  animate__backInLeft"
                leave-active-class="animate__animated  animate__fadeOutUp"
                >
                <div v-if="isShow" class="bg-warning mt-2" style="height: 200px;"></div>
            </transition>
        </div>
        

    </div>
    <script src="./libs/vue@2.7.16/vue.js"></script>
    <script>
        //禁止控制臺輸出日志信息
        Vue.config.productionTip = false;
        new Vue({
            //掛載容器
            el: "#app",
            // 數(shù)據(jù)
            data(){
                return {
                    isShow: true 
                }
            },
        })
    </script>
</body>

</html>

?文章來源地址http://www.zghlxwxcb.cn/news/detail-848905.html

?

到了這里,關(guān)于前端小白的學習之路(Vue2 四)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 前端學習---vue2--指令修飾符詳解

    前端學習---vue2--指令修飾符詳解

    寫在前面: 前端感覺系統(tǒng)學起來還行,我也不曉得我是咋快速入門1個月就開始看實習公司代碼的。然后現(xiàn)在開始系統(tǒng)復習,然后感覺有的封裝的還可以,不過就是我不曉得,像這個指令修飾符,其實說邏輯難寫,倒是也沒有,就是簡單不用自己寫. 就像后端判斷字符串是否為

    2024年02月14日
    瀏覽(27)
  • Vue.js 3 項目開發(fā):邁向現(xiàn)代化前端開發(fā)的必經(jīng)之路

    Vue.js 3 項目開發(fā):邁向現(xiàn)代化前端開發(fā)的必經(jīng)之路

    隨著前端技術(shù)的不斷發(fā)展,Vue.js作為一種輕量級的JavaScript框架,已經(jīng)逐漸成為了前端開發(fā)者的首選。Vue.js 3有哪些新特性、優(yōu)勢以及如何高效地進行項目開發(fā)呢? Vue.js是一種用于構(gòu)建用戶界面的漸進式框架。它的核心庫專注于視圖層,易于與其他庫或現(xiàn)有項目集成。Vue.js 3是

    2024年01月23日
    瀏覽(33)
  • 持續(xù)不斷更新中... 自己整理的一些前端知識點以及前端面試題,包括vue2,vue3,js,ts,css,微信小程序等

    答: 在普通的前端項目工程中,在script標簽中增加setup即可使用api 使用setup()鉤子函數(shù) 答: 不要在計算屬性中進行異步請求或者更改DOM 不要直接修改computed的值 區(qū)別: 計算屬性值基于其響應式依賴被緩存,意思就是只要他之前的依賴不發(fā)生變化,那么調(diào)用他只會返回之前緩

    2024年02月11日
    瀏覽(58)
  • 前端學習---vue2--選項/數(shù)據(jù)--data-computed-watch-methods-props

    前端學習---vue2--選項/數(shù)據(jù)--data-computed-watch-methods-props

    寫在前面: vue提供了很多數(shù)據(jù)相關(guān)的。 簡單的說就是進行雙向綁定的區(qū)域。 vue實例的數(shù)據(jù)對象,會把data的數(shù)據(jù)轉(zhuǎn)換成getter和setter,從而可以進行響應式的變化, vue實例創(chuàng)建后,可以通過vm.$data.x獲取data里面的x,但同時vue實例也代理了其中的對象,所以我們一般使用簡單的

    2024年02月14日
    瀏覽(59)
  • 前端小白的學習之路(CSS3 三)

    提示:過渡屬性transition,動畫屬性animation,轉(zhuǎn)化屬性transform,裁剪屬性clip-path,倒影屬性box-reflect,模糊度屬性filter? 目錄 一、transition ?二、animation ?三、transform ?四、clip-path? ?五、box-reflect? 六、filter? 過渡:以看見標簽從一個屬性變化到另一個屬性值的過程。 transition-pro

    2024年03月19日
    瀏覽(27)
  • 前端小白的學習之路(ES6 一)

    提示:聲明:let與const,長度單位:em與rem,vw與wh,解構(gòu)賦值,箭頭函數(shù)(簡介) 目錄 一、ES6介紹 二、letconst 1.let 1) 用 let 聲明的變量不能提前引用 2) 不允許重復聲明變量 3) 可以產(chǎn)生塊級作用域 { } ? 總結(jié) 2.const 三、?長度單位 1.em與rem 1).em 2).rem 2.vw與vh 四、?解構(gòu)賦

    2024年04月15日
    瀏覽(26)
  • 【前端vue面試】vue2

    【前端vue面試】vue2

    computed 有緩存,基于響應式依賴數(shù)據(jù)(基于data中聲明過或者父組件傳遞的props中的數(shù)據(jù))發(fā)生改變,才會重新進行計算 數(shù)據(jù)變,直接會觸發(fā)相應的操作 watch監(jiān)聽引用類型,需要添加deep:true深度監(jiān)聽,拿不到oldVal(舊值),因為新值和老值指針相同。 v-show 和v-if 都是做條件隱

    2024年02月08日
    瀏覽(22)
  • Vue2簡單使用及相關(guān)基礎(chǔ)知識概念(適合小白入門,看完就能上手)

    Vue2簡單使用及相關(guān)基礎(chǔ)知識概念(適合小白入門,看完就能上手)

    MVC模式(同步通信為主):Model、View、Controller MVP模式(異步通信為主):Model、View、Presenter MVVM模式(異步通信為主):Model、View、ViewModel(目前主要的模式) 2.1 概念 MVVM是一種軟件架構(gòu)設(shè)計模式。MVVM的核心是ViewModel層,負責轉(zhuǎn)換Model層中的數(shù)據(jù)對象來讓數(shù)據(jù)變得更加容易

    2024年02月07日
    瀏覽(20)
  • Vue2 系列:vue.config.js 參數(shù)配置

    1. publicPath 默認值:\\\'/\\\' 說明:部署應用包時的基本 URL,例:https://www.my-app.com/my-app/,則設(shè)置 publicPath 為 /my-app/ 提示:1. 當使用基于 HTML5 history.pushState 的路由時 2.當使用 pages 選項構(gòu)建多頁面應用時。 2. outputDir 默認值:\\\'dist\\\' 說明:打包目錄。 提示:目標目錄在構(gòu)建之前會被

    2024年02月11日
    瀏覽(52)
  • 【前端框架】Vue2合集

    【前端框架】Vue2合集

    1、Vue概念 vue 是一個用于構(gòu)建用戶界面的漸進式框架,由數(shù)據(jù)驅(qū)動 vue 的兩種使用方式 vue 核心包開發(fā):局部模塊改造 vue 核心包與 vue 插件 工程化開發(fā):整站 開發(fā) 2、 創(chuàng)建實例 1、準備容器 2、導包 3、創(chuàng)建Vue實例 4、指定配置項 = 渲染數(shù)據(jù) 3、插值表達式 插值表達式語法:

    2024年01月19日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包