掌握多一门技巧,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">
对于系统修饰符 ctrl、alt、shift 这些比较复杂的键使用而言,分两种情况因为这些键可以在按住的同时,去按其他键,形成组合快捷键当触发事件为 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是回车键的键码,将他的别名定义为autofelixvue.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-contextmenujsvue.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>
【相关视频教程推荐:vuejs入门教程、web前端入门】
以上就是【整理分享】vue开发必备的操作技巧,快来收藏吧!的详细内容。