键盘事件

  • 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是回车键的键码,将他的别名定义为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);
  • 应用
  • 应用 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>