键盘事件
- 在
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>
相干vue实战视频解说:进入学习
跑马灯
- 这是一款好玩的特效技巧
- 比方你在机场接人时,能够应用手机跑马灯特效,成为人群中最靓的仔
- 跑马灯特效其实就是将最后面的文字删除,增加到最初一个,这样就造成了文字挪动的成果
<!DOCTYPE html><html lang="en"><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/[email protected]/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 lang="en"><head> <meta charset="UTF-8"> <title>倒计时</title></head><body> <div id="app"> <div>抢购开始工夫:{{count}}</div> </div></body><script src="https://cdn.jsdelivr.net/npm/[email protected]/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);
<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>