Vue開發(fā)必備的操作技巧實例分析

今天小編給大家分享一下Vue開發(fā)必備的操作技巧實例分析的相關(guān)知識點,內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

10年積累的網(wǎng)站制作、成都網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有師宗免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

Vue開發(fā)必備的操作技巧實例分析

鍵盤事件

  • js 中我們通常通過綁定一個事件,去獲取按鍵的編碼,再通過 event 中的 keyCode 屬性去獲得編碼

  • 如果我們需要實現(xiàn)固定的鍵才能觸發(fā)事件時就需要不斷的判斷,其實很麻煩

let button = document.querySelector('button')

button.onkeyup = function (e) {
    console.log(e.key)
    if (e.keyCode == 13) {
        console.log('我是回車鍵')
    }
}
  • vue 中給一些常用的按鍵提供了別名,我們只要在事件后加上響應(yīng)的別名即可

  • vue 中常見別名有:up/向上箭頭down/向下箭頭、left/左箭頭、right/右箭頭、space/空格、tab/換行esc/退出、enter/回車、delete/刪除

// 只有按下回車鍵時才會執(zhí)行 send 方法
<input v-on:keyup.enter="send" type="text">
  • 對于 Vue 中未提供別名的鍵,可以使用原始的 key 值去綁定,所謂 key 值就是 event.key 所獲得的值

  • 如果 key 值是單個字母的話直接使用即可,如果是由多個單詞組成的駝峰命名,就需要將其拆開,用 - 連接

// 只有按下q鍵時才會執(zhí)行send方法
<input v-on:keyup.Q="send" type="text">

// 只有按下capslock鍵時才會執(zhí)行send方法
<input v-on:keyup.caps-lock="send" type="text">
  • 對于系統(tǒng)修飾符 ctrl、altshift 這些比較復(fù)雜的鍵使用而言,分兩種情況

  • 因為這些鍵可以在按住的同時,去按其他鍵,形成組合快捷鍵

  • 當(dāng)觸發(fā)事件為 keydown 時,我們可以直接按下修飾符即可觸發(fā)

  • 當(dāng)觸發(fā)事件為 keyup 時,按下修飾鍵的同時要按下其他鍵,再釋放其他鍵,事件才能被觸發(fā)。

// keydown事件時按下alt鍵時就會執(zhí)行send方法
<input v-on:keydown.Alt="send" type="text">

// keyup事件時需要同時按下組合鍵才會執(zhí)行send方法
<input v-on:keyup.Alt.y="send" type="text">
  • 當(dāng)然我們也可以自定義按鍵別名

  • 通過 Vue.config.keyCodes.自定義鍵名=鍵碼 的方式去進(jìn)行定義

// 只有按下回車鍵時才會執(zhí)行send方法
<input v-on:keydown.autofelix="send" type="text">
    
// 13是回車鍵的鍵碼,將他的別名定義為autofelix
Vue.config.keyCodes.autofelix=13

圖片預(yù)覽

  • 在項目中我們經(jīng)常需要使用到圖片預(yù)覽,viewerjs 是一款非常炫酷的圖片預(yù)覽插件

  • 功能支持包括圖片放大、縮小、旋轉(zhuǎn)、拖拽、切換、拉伸等

  • 安裝 viewerjs 擴展

npm install viewerjs --save
  • 引入并配置功能

//引入
import Vue from 'vue';
import 'viewerjs/dist/viewer.css';
import Viewer from 'v-viewer';

//按需引入
Vue.use(Viewer);

Viewer.setDefaults({
    'inline': true,
    'button': true, //右上角按鈕
    "navbar": true, //底部縮略圖
    "title": true, //當(dāng)前圖片標(biāo)題
    "toolbar": true, //底部工具欄
    "tooltip": true, //顯示縮放百分比
    "movable": true, //是否可以移動
    "zoomable": true, //是否可以縮放
    "rotatable": true, //是否可旋轉(zhuǎn)
    "scalable": true, //是否可翻轉(zhuǎn)
    "transition": true, //使用 CSS3 過度
    "fullscreen": true, //播放時是否全屏
    "keyboard": true, //是否支持鍵盤
    "url": "data-source",
    ready: function (e) {
        console.log(e.type, '組件以初始化');
    },
    show: function (e) {
        console.log(e.type, '圖片顯示開始');
    },
    shown: function (e) {
        console.log(e.type, '圖片顯示結(jié)束');
    },
    hide: function (e) {
        console.log(e.type, '圖片隱藏完成');
    },
    hidden: function (e) {
        console.log(e.type, '圖片隱藏結(jié)束');
    },
    view: function (e) {
        console.log(e.type, '視圖開始');
    },
    viewed: function (e) {
        console.log(e.type, '視圖結(jié)束');
        // 索引為 1 的圖片旋轉(zhuǎn)20度
        if (e.detail.index === 1) {
            this.viewer.rotate(20);
        }
    },
    zoom: function (e) {
        console.log(e.type, '圖片縮放開始');
    },
    zoomed: function (e) {
        console.log(e.type, '圖片縮放結(jié)束');
    }
})
  • 使用圖片預(yù)覽插件

  • 單個圖片使用

<template>
  <div>
    <viewer>
      <img :src="cover" style="cursor: pointer;" height="80px">
    </viewer>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      cover: "//www.autofelix.com/images/cover.png"
    }
  }
}
</script>
  • 多個圖片使用

<template>
  <div>
    <viewer :images="imgList">
      <img v-for="(imgSrc, index) in imgList" :key="index" :src="imgSrc" />
    </viewer>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      imgList: [
        "//www.autofelix.com/images/pic_1.png",
        "//www.autofelix.com/images/pic_2.png",
        "//www.autofelix.com/images/pic_3.png",
        "//www.autofelix.com/images/pic_4.png",
        "//www.autofelix.com/images/pic_5.png"
      ]
    }
  }
}
</script>

跑馬燈

  • 這是一款好玩的特效技巧

  • 比如你在機場接人時,可以使用手機跑馬燈特效,成為人群中最靚的仔

  • 跑馬燈特效其實就是將最前面的文字刪除,添加到最后一個,這樣就形成了文字移動的效果

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>跑馬燈</title>
    <style type="text/css">
        #app {
            padding: 20px;
        }
    </style>
</head>

<body>
    <div id="app">
        <button @click="run">應(yīng)援</button>
        <button @click="stop">暫停</button>
        <h4>{{ msg }}</h4>
    </div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.0/dist/vue.min.js"></script>
<script>
    new Vue({
        el: "#app",
        data: {
            msg: "飛兔小哥,飛兔小哥,我愛飛兔小哥~~~",
            timer: null // 定時器
        },
        methods: {
            run() {
                // 如果timer已經(jīng)賦值就返回
                if (this.timer) return;

                this.timer = setInterval(() => {
                    // msg分割為數(shù)組
                    var arr = this.msg.split('');
                    // shift刪除并返回刪除的那個,push添加到最后
                    // 把數(shù)組第一個元素放入到最后面
                    arr.push(arr.shift());
                    // arr.join('')吧數(shù)組連接為字符串復(fù)制給msg
                    this.msg = arr.join('');
                }, 100)
            },
            stop() {
                //清除定時器
                clearInterval(this.timer);
                //清除定時器之后,需要重新將定時器置為null
                this.timer = null;
            }
        }
    })
</script>

</html>

倒計時

  • 對于倒計時技巧,應(yīng)用的地方很多

  • 比如很多搶購商品的時候,我們需要有一個倒計時提醒用戶開搶時間

  • 其實就是每隔一秒鐘,去重新計算一下時間,并賦值到 DOM

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>倒計時</title>
</head>

<body>
    <div id="app">
        <div>搶購開始時間:{{count}}</div>
    </div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.0/dist/vue.min.js"></script>
<script>
    new Vue({
        el: "#app",
        data() {
            return {
                count: '', //倒計時
                seconds: 864000 // 10天的秒數(shù)
            }
        },
        mounted() {
            this.Time() //調(diào)用定時器
        },
        methods: {
            // 天 時 分 秒 格式化函數(shù)
            countDown() {
                let d = parseInt(this.seconds / (24 * 60 * 60))
                d = d < 10 ? "0" + d : d
                let h = parseInt(this.seconds / (60 * 60) % 24);
                h = h < 10 ? "0" + h : h
                let m = parseInt(this.seconds / 60 % 60);
                m = m < 10 ? "0" + m : m
                let s = parseInt(this.seconds % 60);
                s = s < 10 ? "0" + s : s
                this.count = d + '天' + h + '時' + m + '分' + s + '秒'
            },
            //定時器沒過1秒?yún)?shù)減1
            Time() {
                setInterval(() => {
                    this.seconds -= 1
                    this.countDown()
                }, 1000)
            },
        }
    })
</script>

</html>

自定義右鍵菜單

  • 在項目中,我們有時候需要自定義鼠標(biāo)右鍵出現(xiàn)的選項,而不是瀏覽器默認(rèn)的右鍵選項

  • 對于如何實現(xiàn)右鍵菜單,在 Vue 中其實很簡單,只要使用 vue-contextmenujs 插件即可

  • 安裝 vue-contextmenujs 插件

npm install vue-contextmenujs
  • 引入

//引入
import Vue from 'vue';
import Contextmenu from "vue-contextmenujs"

Vue.use(Contextmenu);
  • 使用方法

  • 可以使用 <i class="icon"></i> 可以給選項添加圖標(biāo)

  • 可以使用 style 標(biāo)簽自定義選項的樣式

  • 可以使用 disabled 屬性禁止選項可以點擊

  • 可以使用 divided:true 設(shè)置選項的下劃線

  • 可以使用 children 設(shè)置子選項

<style>
    .custom-class .menu_item__available:hover,
    .custom-class .menu_item_expand {
        background: lightblue !important;
        color: #e65a65 !important;
    }
</style>


<template>
    <div style="width:100vw;height:100vh" @contextmenu.prevent="onContextmenu"></div>
</template>

<script>
    import Vue from 'vue'
    import Contextmenu from "vue-contextmenujs"
    Vue.use(Contextmenu);

    export default {
        methods: {
            onContextmenu(event) {
                this.$contextmenu({
                    items: [
                        {
                            label: "返回",
                            onClick: () => {
                                // 添加點擊事件后的自定義邏輯
                            }
                        },
                        { label: "前進(jìn)", disabled: true },
                        { label: "重載", divided: true, icon: "el-icon-refresh" },
                        { label: "打印", icon: "el-icon-printer" },
                        {
                            label: "翻譯",
                            divided: true,
                            minWidth: 0,
                            children: [{ label: "翻譯成中文" }, { label: "翻譯成英文" }]
                        },
                        {
                            label: "截圖",
                            minWidth: 0,
                            children: [
                                {
                                    label: "截取部分",
                                    onClick: () => {
                                        // 添加點擊事件后的自定義邏輯
                                    }
                                },
                                { label: "截取全屏" }
                            ]
                        }
                    ],
                    event, // 鼠標(biāo)事件信息
                    customClass: "custom-class", // 自定義菜單 class
                    zIndex: 3, // 菜單樣式 z-index
                    minWidth: 230 // 主菜單最小寬度
                });
                return false;
            }
        }
    };
</script>

打印功能

  • 對于網(wǎng)頁支持打印功能,在很多項目中也比較常見

  • 而 Vue 中使用打印功能,可以使用 vue-print-nb 插件

  • 安裝 vue-print-nb 插件

npm install vue-print-nb --save
  • 引入打印服務(wù)

import Vue from 'vue'
import Print from 'vue-print-nb'
Vue.use(Print);
  • 使用

  • 使用 v-print 指令即可啟動打印功能

<div id="printStart">
    <p>紅酥手,黃縢酒,滿城春色宮墻柳。</p>
    <p>東風(fēng)惡,歡情薄。</p>
    <p>一懷愁緒,幾年離索。</p>
    <p>錯、錯、錯。</p>
    <p>春如舊,人空瘦,淚痕紅浥鮫綃透。</p>
    <p>桃花落,閑池閣。</p>
    <p>山盟雖在,錦書難托。</p>
    <p>莫、莫、莫!</p>
</div>
<button v-print="'#printStart'">打印</button>

JSONP請求

  • jsonp解決跨域 的主要方式之一

  • 所以學(xué)會在 vue 中使用 jsonp 其實還是很重要的

  • 安裝 jsonp 擴展

npm install vue-jsonp --save-dev
  • 注冊服務(wù)

// 在vue2中注冊服務(wù)
import Vue from 'vue'
import VueJsonp from 'vue-jsonp'
Vue.use(VueJsonp)

// 在vue3中注冊服務(wù)
import { createApp } from 'vue'
import App from './App.vue'
import VueJsonp from 'vue-jsonp'
createApp(App).use(VueJsonp).mount('#app')
  • 使用方法

  • 需要注意的是,在使用 jsonp 請求數(shù)據(jù)后,回調(diào)并不是在 then 中執(zhí)行

  • 而是在自定義的 callbackName 中執(zhí)行,并且需要掛載到 window 對象上

<script>
export default {
  data() {...},
  created() {
    this.getUserInfo()
  },
  mounted() {
    window.jsonpCallback = (data) => {
        // 返回后回調(diào)
        console.log(data)
    }
  },
  methods: {
    getUserInfo() {
     this.$jsonp(this.url, {
      callbackQuery: "callbackParam",
      callbackName: "jsonpCallback"
     })
      .then((json) => {
          // 返回的jsonp數(shù)據(jù)不會放這里,而是在 window.jsonpCallback
          console.log(json)
      })  
    }
  }
 }
</script>

以上就是“Vue開發(fā)必備的操作技巧實例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文標(biāo)題:Vue開發(fā)必備的操作技巧實例分析
本文路徑:http://muchs.cn/article38/ghjosp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站面包屑導(dǎo)航、企業(yè)網(wǎng)站制作、響應(yīng)式網(wǎng)站、定制網(wǎng)站、App設(shè)計

廣告

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

1成都定制網(wǎng)站建設(shè)