自定义事件与触发 Event()

参考:https://developer.mozilla.org/zh-CN/docs/Web/API/Event/Event
浏览器支持:
在这里插入图片描述
Event() 构造函数, 创建一个新的事件对象 Event。

语法
new Event(type, option);

参数说明:

  • type 是DOMString 类型,表示所创建事件的名称。
  • option 可设置以下属性:
    bubbles 默认值为 false,表示该事件是否冒泡。
    cancelable 默认值为 false, 表示该事件能否被取消。
    composed 默认值为 false,指示事件是否会在影子DOM根节点之外触发侦听器。

自定义一个 look 事件,然后触发这个事件:

// 创建一个支持冒泡且不能被取消的look事件
var ev = new Event("look", {"bubbles":true, "cancelable":false});
document.dispatchEvent(ev);

// 事件可以在任何元素触发,不仅仅是document
myDiv.dispatchEvent(ev);
示例

例1:模拟键盘按下空格键

//页面上绑定的键盘按下事件	
document.onkeydown = function(e){
	console.log('按下了键盘')
	if(e.keyCode == 32){
		console.log('按下了: 空格键')
	}
	if(e.altKey && e.keyCode == 32){
		console.log('按下了: alt+空格键')
	}	
	if(e.altKey && e.shiftKey && e.keyCode == 32){
		console.log('按下了: alt+shift+空格键')
	}
}

var ev = new Event('keydown');
document.dispatchEvent(ev)
/*情况1--控制台输出
按下了键盘
*/

var ev = new Event('keydown');
ev.which = ev.keyCode = 32;    //空格键键码
document.dispatchEvent(ev)
/*情况2--控制台输出
按下了键盘 
按下了: 空格键
*/


var ev = new Event('keydown');
ev.which = ev.keyCode = 32;    //空格键键码
ev.altKey = true;
document.dispatchEvent(ev)
/*情况3--控制台输出
按下了键盘
按下了: 空格键
按下了: alt+空格键
*/

var ev = new Event('keydown');
ev.which = ev.keyCode = 32;    //空格键键码
ev.altKey = true;
ev.shiftKey = true;
document.dispatchEvent(ev)
/*情况4--控制台输出
按下了键盘
按下了: 空格键
按下了: alt+空格键
按下了: alt+shift+空格键
*/

ctrlKey 若为true, 表示 ctrl 键被按下
altKey 若为true, 表示 alt 键被按下
shiftKey 若为true, 表示 shift 键被按下
metaKey 若为true, 表示 meta 键被按下(WIN中的window标志键,MAC中的小花瓣键)

例2:事件冒泡处理

<textarea id="text"></textarea>

<script type="text/javascript">
var text = document.getElementById('text');
text.onkeydown = function(e){		
	if(e.keyCode == 32){
		console.log('文本域中按下了空格键')
	}
}	
document.onkeydown = function(e){
	if(e.keyCode == 32){
		console.log('页面按下了空格键')
	}
}

var ev = new Event('keydown');
ev.which = ev.keyCode = 32;    //空格键键码
text.dispatchEvent(ev)		   //只触发文本域上的键盘按下事件
/*默认触发的事件是不冒泡的,控制台输出:
文本域中按下了空格键
*/

var ev = new Event('keydown',{ bubbles:true });
ev.which = ev.keyCode = 32;    //空格键键码
text.dispatchEvent(ev)		   //只触发文本域上的键盘按下事件
/*设置触发的事件冒泡,控制台输出:
文本域中按下了空格键
页面按下了空格键
*/
</script>

例3:自定事件并绑定到元素

<textarea id="text"></textarea>

<script type="text/javascript">
var text = document.getElementById('text');

text.addEventListener('look',function(){
	console.log('自定义事件绑定在 textarea 元素上')
},false);
document.addEventListener('look',function(){
	console.log('自定义事件绑定在 document 上')
},false);

var ev = new Event('look');

text.dispatchEvent(ev);       //触发 textarea 上的 look 事件
document.dispatchEvent(ev);   //触发 document 上的 look 事件
</script>

例4:模拟鼠标移动到指定位置

<div id="box" style="width: 300px;height: 200px;"></div>

<script>
var box = document.getElementById('box');
box.onmousemove = function(e){
	if(e.offsetX>150 && e.offsetY>100){
		box.style.background = 'blue'
	}else{
		box.style.background = '#fff'
	}
}

var ev = new Event('mousemove');
ev.offsetX = 200;
ev.offsetY = 150;
box.dispatchEvent(ev);	   //触发事件后box背景变成了蓝色
</script>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值