首頁 >web前端 >Vue.js >【整理分享】Vue開發必備的操作技巧,快來收藏吧!

【整理分享】Vue開發必備的操作技巧,快來收藏吧!

青灯夜游
青灯夜游轉載
2022-07-21 20:13:191849瀏覽

掌握多一門技巧,Vue 程式效率就高一分,工欲善其事,必先利其器。這篇文章為大家整理分享一些必備Vue 的操作技巧,希望對大家有幫助!

【整理分享】Vue開發必備的操作技巧,快來收藏吧!

(學習影片分享:vue影片教學

鍵盤事件

  • js 中我們通常透過綁定一個事件,去取得按鍵的編碼,再透過event 中的keyCode 屬性去獲得編碼
  • 如果我們需要實作固定的鍵才能觸發事件時就需要不斷的判斷,其實很麻煩
let button = document.querySelector('button')

button.onkeyup = function (e) {
    console.log(e.key)
    if (e.keyCode == 13) {
        console.log('我是回车键')
    }
}
  • #vue 中給一些常用的按鍵提供了別名,我們只要在事件後面加上回應的別名即可
  • vue 中常見別名有:up/向上箭頭down/向下箭頭left/左箭頭right/右箭頭space/空格tab/換行esc/退出enter/回車delete/刪除
  • ##
// 只有按下回车键时才会执行 send 方法
<input v-on:keyup.enter="send" type="text">
    對於
  • Vue 中未提供別名的鍵,可以使用原始的key 值去綁定,所謂key 值就是event.key 所獲得的值
  • 如果
  • key 值是單字母的話直接使用即可,如果是由多個單字組成的駝峰命名,就需要將其拆開,用- 連接
// 只有按下q键时才会执行send方法
<input v-on:keyup.Q="send" type="text">

// 只有按下capslock键时才会执行send方法
<input v-on:keyup.caps-lock="send" type="text">
    對於系統修飾符
  • ctrlaltshift 這些比較複雜的鍵使用而言,分兩種情況
  • 因為這些鍵可以在按住的同時,去按其他鍵,形成組合快捷鍵
  • 當觸發事件為
  • keydown 時,我們可以直接按下修飾符即可觸發
  • 當觸發事件為
  • keyup 時,按下修飾鍵的同時要按下其他鍵,再釋放其他鍵,事件才能被觸發。
// keydown事件时按下alt键时就会执行send方法
<input v-on:keydown.Alt="send" type="text">

// keyup事件时需要同时按下组合键才会执行send方法
<input v-on:keyup.Alt.y="send" type="text">
    當然我們也可以自訂按鍵別名
  • 透過
  • Vue.config.keyCodes.自訂鍵名=鍵碼 的方式去進行定義
// 只有按下回车键时才会执行send方法
<input v-on:keydown.autofelix="send" type="text">
    
// 13是回车键的键码,将他的别名定义为autofelix
Vue.config.keyCodes.autofelix=13
圖片預覽

    在專案中我們經常需要使用到圖片預覽,
  • viewerjs 是一款非常酷的圖片預覽外掛程式
  • 功能支援包括圖片放大、縮小、旋轉、拖曳、切換、拉伸等
  • #安裝
  • 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, //当前图片标题
    "toolbar": true, //底部工具栏
    "tooltip": true, //显示缩放百分比
    "movable": true, //是否可以移动
    "zoomable": true, //是否可以缩放
    "rotatable": true, //是否可旋转
    "scalable": true, //是否可翻转
    "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, '图片显示结束');
    },
    hide: function (e) {
        console.log(e.type, '图片隐藏完成');
    },
    hidden: function (e) {
        console.log(e.type, '图片隐藏结束');
    },
    view: function (e) {
        console.log(e.type, '视图开始');
    },
    viewed: function (e) {
        console.log(e.type, '视图结束');
        // 索引为 1 的图片旋转20度
        if (e.detail.index === 1) {
            this.viewer.rotate(20);
        }
    },
    zoom: function (e) {
        console.log(e.type, '图片缩放开始');
    },
    zoomed: function (e) {
        console.log(e.type, '图片缩放结束');
    }
})
    使用圖片預覽外掛程式
  • 單一圖片使用
<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">应援</button>
        <button @click="stop">暂停</button>
        <h3>{{ msg }}</h3>
    </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已经赋值就返回
                if (this.timer) return;

                this.timer = setInterval(() => {
                    // msg分割为数组
                    var arr = this.msg.split('');
                    // shift删除并返回删除的那个,push添加到最后
                    // 把数组第一个元素放入到最后面
                    arr.push(arr.shift());
                    // arr.join('')吧数组连接为字符串复制给msg
                    this.msg = arr.join('');
                }, 100)
            },
            stop() {
                //清除定时器
                clearInterval(this.timer);
                //清除定时器之后,需要重新将定时器置为null
                this.timer = null;
            }
        }
    })
</script>

</html>
倒數計時

    對於倒數計時技巧,應用的地方很多
  • 比如很多搶購商品的時候,我們需要有一個倒數計時提醒用戶開搶時間
  • 其實就是每隔一秒鐘,去重新計算一下時間,並賦值到
  • 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天的秒数
            }
        },
        mounted() {
            this.Time() //调用定时器
        },
        methods: {
            // 天 时 分 秒 格式化函数
            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 + &#39;天&#39; + h + &#39;时&#39; + m + &#39;分&#39; + s + &#39;秒&#39;
            },
            //定时器没过1秒参数减1
            Time() {
                setInterval(() => {
                    this.seconds -= 1
                    this.countDown()
                }, 1000)
            },
        }
    })
</script>

</html>
自訂右鍵選單

    在專案中,我們有時需要自訂滑鼠右鍵出現的選項,而不是瀏覽器預設的右鍵選項
  • 對於如何實作右鍵選單,在
  • Vue 中其實很簡單,只要使用vue-contextmenujs 外掛程式即可
  • 安裝
  • vue-contextmenujs 外掛程式
npm install vue-contextmenujs
    引入
//引入
import Vue from 'vue';
import Contextmenu from "vue-contextmenujs"

Vue.use(Contextmenu);
    #使用方法
  • 可以使用
  • 可以為選項新增圖示
  • 可以使用
  • style 標籤自訂選項的樣式
  • 可以使用
  • disabled 屬性禁止選項可以點選
  • 可以使用
  • divided:true 設定選項的底線
  • 可以使用
  • children 設定子選項
<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: "前进", 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, // 鼠标事件信息
                    customClass: "custom-class", // 自定义菜单 class
                    zIndex: 3, // 菜单样式 z-index
                    minWidth: 230 // 主菜单最小宽度
                });
                return false;
            }
        }
    };
</script>
列印功能

    對於網頁支援列印功能,在許多專案中也較常見
  • 而Vue 中使用列印功能,可以使用
  • vue-print-nb 外掛程式
  • 安裝
  • vue-print-nb 外掛程式
npm install vue-print-nb --save
    引入列印服務
import Vue from 'vue'
import Print from 'vue-print-nb'
Vue.use(Print);
    使用
  • 使用
  • v-print 指令即可啟動列印功能
<div id="printStart">
    <p>红酥手,黄縢酒,满城春色宫墙柳。</p>
    <p>东风恶,欢情薄。</p>
    <p>一怀愁绪,几年离索。</p>
    <p>错、错、错。</p>
    <p>春如旧,人空瘦,泪痕红浥鲛绡透。</p>
    <p>桃花落,闲池阁。</p>
    <p>山盟虽在,锦书难托。</p>
    <p>莫、莫、莫!</p>
</div>
<button v-print="&#39;#printStart&#39;">打印</button>
JSONP請求

  • jsonp解決跨域 的主要方式之一
  • 所以學會在
  • vue 中使用jsonp 其實還是很重要的
  • #安裝
  • jsonp 擴充功能
npm install vue-jsonp --save-dev
    #註冊服務
// 在vue2中注册服务
import Vue from 'vue'
import VueJsonp from 'vue-jsonp'
Vue.use(VueJsonp)

// 在vue3中注册服务
import { createApp } from 'vue'
import App from './App.vue'
import VueJsonp from 'vue-jsonp'
createApp(App).use(VueJsonp).mount('#app')
    使用方法
  • 需要注意的是,在使用
  • jsonp 請求資料後,回呼並不是在then 中執行
  • 而是在自訂的
  • callbackName 中執行,並且需要掛載到window 物件上
<script>
export default {
  data() {...},
  created() {
    this.getUserInfo()
  },
  mounted() {
    window.jsonpCallback = (data) => {
        // 返回后回调
        console.log(data)
    }
  },
  methods: {
    getUserInfo() {
     this.$jsonp(this.url, {
      callbackQuery: "callbackParam",
      callbackName: "jsonpCallback"
     })
      .then((json) => {
          // 返回的jsonp数据不会放这里,而是在 window.jsonpCallback
          console.log(json)
      })  
    }
  }
 }
</script>
【相關影片教學推薦:

vuejs入門教學web前端入門#

以上是【整理分享】Vue開發必備的操作技巧,快來收藏吧!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除