【整理分享】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 + '天' + h + '时' + m + '分' + s + '秒'             },             //定时器没过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);
  • 使用方法
  • 可以使用 <i class="icon"></i> 可以给选项添加图标
  • 可以使用 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="'#printStart'">打印</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>

商匡云商
Logo
注册新帐户
对比商品
  • 合计 (0)
对比
0
购物车