vue在某页面监听键盘输入事件
需求:在某一网页,通过上下左右键控制一些操作
实现:
1.基本代码:
因为没有绑定特定的元素.所以我们将事件绑定到document上.
//当前页面监视键盘输入
document.onkeydown = function(e) {
console.log('键盘输入了')
//事件对象兼容
let e1 = e || event || window.event || arguments.callee.caller.arguments[0]
//键盘按键判断:左箭头-37;上箭头-38;右箭头-39;下箭头-40
//左
if (e1 && e1.keyCode == 37) {
this.decrease()
} else if (e1 && e1.keyCode == 38) {
this.nowStudent--
} else if (e1 && e1.keyCode == 39) {
this.increase()
} else if (e1 && e1.keyCode == 40) {
this.nowStudent++
}
}
2.何时何处绑定:
其他绑定特定元素的函数,都是直接绑定在行内,也就是说创建时就绑定了
<input @keyup.enter="function">
而我们则需要把这个事件绑定过程放在created钩子中,理由很简单.在这个钩子里可以确定你想绑定的元素已经构建完成
created() {
this.getHomework()
//当前页面监视键盘输入
document.onkeydown = function(e) {
console.log('键盘输入了')
//事件对象兼容
let e1 = e || event || window.event || arguments.callee.caller.arguments[0]
//键盘按键判断:左箭头-37;上箭头-38;右箭头-39;下箭头-40
//左
if (e1 && e1.keyCode == 37) {
this.decrease()
} else if (e1 && e1.keyCode == 38) {
this.nowStudent--
} else if (e1 && e1.keyCode == 39) {
this.increase()
} else if (e1 && e1.keyCode == 40) {
this.nowStudent++
}
}
},
3.this指向修正
完成以上两步,还不行.会报错.this.getHomework正常,console.log也会执行,但是onkeydown的this会出错.
Uncaught TypeError: this.decrease is not a function
原因是created钩子里的this是vue对象,但是,onkerdown这个函数本身又形成了一个"作用域",this指向了调用onkeydown的对象.而onkeydown里面的decrease()是methods里面的一个函数,所以this的指向出错
解决方案
用一个全局变量把this保存起来再用
created() {
this.getHomework()
var that = this
//当前页面监视键盘输入
document.onkeydown = function(e) {//事件对象兼容
let e1 = e || event || window.event || arguments.callee.caller.arguments[0]
//键盘按键判断:左箭头-37;上箭头-38;右箭头-39;下箭头-40
//左
if (e1 && e1.keyCode == 37) {
that.decrease()
} else if (e1 && e1.keyCode == 38) {
that.nowStudent--
} else if (e1 && e1.keyCode == 39) {
that.increase()
} else if (e1 && e1.keyCode == 40) {
that.nowStudent++
}
}
}
vue在某页面监听键盘输入事件的更多相关文章
- [C#]非阻塞监听键盘输入
摘要 最近需要调研监控用户键盘输入的内容,然后收集数据进行用户行为分析.然后就用控制台程序弄了一个demo. 代码如下 class Program { static void Main(string[ ...
- 如何在ArcMap中监听键盘鼠标事件(转)
如何在ArcMap中监听键盘鼠标事件(转) Link: http://www.cnblogs.com/dyllove98/p/3155551.html 昨天有个朋友想要实现一个功能,就是在ArcMap ...
- vue 监听键盘回车事件 @keyup.enter || @keyup.enter.native
vue运行为v-on在监听键盘事件时,添加了特殊的键盘修饰符:\ <input v-on:keyup.13="submit"> vue还非常贴心地给出了常用按键的别名, ...
- 如何在ArcMap中监听键盘鼠标事件
昨天有个朋友想要实现一个功能,就是在ArcMap中编辑数据的时候,能够通过快捷键自动设置预定义的属性,比如,选中若干要素,按A键,就自动填充属性,按B键,则又自动填充另外的属性字段. 单就这个功能而言 ...
- java 图形化工具Swing 监听键盘输入字符触发动作getInputMap();getActionMap();
双缓冲技术的介绍: 所有的Swing组件默认启用双缓冲绘图技术.使用双缓冲技术能改进频繁重绘GUI组件的显示效果(避免闪烁现象)JComponent组件默认启用双缓冲,无须自己实现双缓冲.如果想关闭双 ...
- Vue监听键盘回车事件
在写页面时遇见了登录页需要加一个键盘回车事件. vue 的 v-on中有这样的修饰符 <input v-on:keyup.enter="submit"> 即<in ...
- js及vue监听键盘回车事件
js document.onkeydown = (event) => { var e = event || window.event; if(e && e.keyCode==13 ...
- 【土旦】vue 解决ios H5底部输入框 获取焦点时弹出虚拟键盘挡住输入框 以及监听键盘收起事件
问题描述 im聊天H5页面,在iOS系统下,inpu获取焦点弹出系统虚拟键盘时,会出现挡住input的情况,十分影响用户体验. bug图 解决方法: html: <input type=&quo ...
- Winform下WebBrowser 编辑模式 监听键盘按键事件
最近使用 WebBrowser 做了个富文本编辑器(其实网上有很多很多).例如下面这个玩意(不要在意界面神马的) WebBrowser在编辑模式下可以有一些HTML标签的功能,改变字体大小颜色等等等. ...
随机推荐
- 编译使用nginx
nginx-1.18.0 ./configure --prefix=$HOME/nginx --with-http_ssl_module make -j32; make install [fangju ...
- Java_map
1 package Test; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 public class MapTest { 7 p ...
- [gym102268E]Expected Value
令$X$为移动次数,答案即$\sum_{i=0}^{\infty}P(X>i)$,后者记作$S_{i}$ 关于$S_{i}$,令$f_{i,j}$表示走了$i$步后位于$j$且未到达过$k$的概 ...
- [bzoj2743]采花
预处理出每一个点下一个相同颜色的位置,记为next,然后将询问按左端点排序后不断右移左指针,设要删除i位置,就令f[next[next[i]]+1,同时还要删除原来的标记,即令f[next[i]]-1 ...
- [atAGC048E]Strange Relation
考虑对于$\{a_{i+1},...,a_{n}\}$,在其前面插入$a_{i}$对$x_{i}$的影响(不考虑$a_{1}$到$a_{i-1}$): 1.$x_{i}=0$,因为其前面没有数字了 2 ...
- CF1553 部分题解
CF1553D Backspace 题目传送门. 题意简述:给定 \(s,t\),现在要依次输入 \(s\) 中的字符.对于每个字符 \(s_i\),你可以选择输入 \(s_i\) 或者使用退格键,判 ...
- 比对软件Blast,Blast+,Diamond比较
1. Blast (1)格式化数据库 formatdb -i db.seq -p T -o T -l logfile 主要参数: -i 输入需要格式化的源数据库名称 -p 文件类型,是核苷酸序列数据库 ...
- 毕业设计之LVS+keealive 负载均衡高可用实现
环境介绍 centos6.9最小化安装 主机名 IPADDR lvsA.load.quan.bbs 192.168.111.131 lvsB.load.quan.bbs 192.168.111.132 ...
- 在前端页面中使用Markdown并且优化a标签
近期在自己的项目中加入了对 Markdown 语法 的支持,主要用到的是markedjs这个项目.该项目托管在github上,地址为:https://github.com/markedjs/marke ...
- flink-----实时项目---day07-----1.Flink的checkpoint原理分析 2. 自定义两阶段提交sink(MySQL) 3 将数据写入Hbase(使用幂等性结合at least Once实现精确一次性语义) 4 ProtoBuf
1.Flink中exactly once实现原理分析 生产者从kafka拉取数据以及消费者往kafka写数据都需要保证exactly once.目前flink中支持exactly once的sourc ...