我正在尝试删除侦听器定义中的事件侦听器:
canvas.addEventListener('click', function(event) {
click++;
if(click == 50) {
// remove this event listener here!
}
// More code here ...
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?这=事件......谢谢.
我不希望mousemove事件发生任何不必要的循环.所以我对性能/最佳实践感兴趣,什么mousemove才是最好的运行方式mousedown == true呢?目前我正在使用:
var pressedMouse = false;
myObject.addEventListener("mousedown", function(e){
mouseDownFunction(e);
pressedMouse = true;
myObject.onmousemove = function(e) {
if(pressedMouse == true){
mouseMoveFunction(e);
}
}
});
myObject.addEventListener("mouseup", function(e){
pressedMouse = false;
});
Run Code Online (Sandbox Code Playgroud)
mouseMoveFunction()因为pressedMouse变量而没有被调用.可onmousemove事件从如果触发防止mousedown不用呢?
我import { SMS } from '@ionic-native/sms';在我的 ionic 3 聊天应用程序中尝试过。但document.removeEventListener('onSMSArrive');不工作。
这是我正在使用的软件包
"@ionic-native/sms": "^4.3.0",
"@ionic-native/core": "^4.3.0",
"cordova-sms-plugin": "^0.1.11",
Run Code Online (Sandbox Code Playgroud)
问题是,当我第一次访问我的页面时,它工作正常,并且当我收到手机短信时收到消息。但是,如果我返回另一个页面并返回该页面,我会在函数中收到两次相同的消息。我认为事件监听器没有删除,当我再次导航到该页面时,另一个监听器正在添加到文档中。
这是我的代码
我在页面加载时添加事件侦听器,并在页面卸载时删除它。
public ionViewWillEnter() {
this.smsService.startMessageListner();
}
public ionViewWillLeave() {
this.smsService.stopMessageListner();
}
Run Code Online (Sandbox Code Playgroud)
这是我服务中的startMessageListner()和功能。stopMessageListner()
public startMessageListner()
{
--- some works do here ---
this.startListner();
}
public startListner()
{
this.recieveMessage().then((message) => {
--- receives message here and when after
navigating multiple times I receives
multiple same messages here---
}
}
public recieveMessage() {
if (!window.SMS) { …Run Code Online (Sandbox Code Playgroud) event-listener typescript cordova-plugins ionic-native ionic3
我像这样创建一个锤子实例:
var el = document.getElementById("el");
var hammertime = Hammer(el);
Run Code Online (Sandbox Code Playgroud)
然后我可以添加一个监听器:
hammertime.on("touch", function(e) {
console.log(e.gesture);
}
Run Code Online (Sandbox Code Playgroud)
但是我无法删除此侦听器,因为以下内容不执行任何操作:
hammertime.off("touch");
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?如何摆脱锤子听众?hammer.js文档目前很差,所以除了存在方法.on()和事物之外什么都没解释.off().我不能使用jQuery版本,因为这是一个性能关键的应用程序.
JSFiddle展示这个:http://jsfiddle.net/LSrgh/1/
我试图removeEventListener在我的角度组件中: Javascript removeEventListener 不工作
...
ngOnInit() {
document.addEventListener('visibilitychange', () =>this.handleVisibleState(), true);
}
ngOnDestroy() {
document.removeEventListener('visibilitychange', () => this.handleVisibleState(), true);
}
handleVisibleState() {
let vis = document.visibilityState === 'visible';
this.configsService.update_collab_visible(vis);
}
...
Run Code Online (Sandbox Code Playgroud)
addEventListener即使在上述作品之后ngOnDestroy ()
如何从角度组件中的文档解除可见性状态?
private visibilityChangeCallback: () => void;
ngOnInit() {
this.visibilityChangeCallback = () => this.handleVisibleState();
document.addEventListener('visibilitychange', this.handleVisibleState, true);
}
ngOnDestroy() {
document.removeEventListener('visibilitychange', this.handleVisibleState, true);
}
handleVisibleState() {
let vis = document.visibilityState === 'visible';
console.log(typeof this.configsService); // undefined
this.configsService.update_collab_visible(vis);
}
Run Code Online (Sandbox Code Playgroud)
结果:
错误类型错误:无法读取未定义的属性“update_collab_visible”
我试图在用户离开页面而不保存时添加提示。
这是我的代码:
componentDidUpdate() {
if (!this.props.data.get('is_data_saved')) {
window.addEventListener('beforeunload', function(e) {
e.returnValue = 'Data may not be saved'
}, true);
} else {
window.removeEventListener('beforeunload', function(e) {
e.returnValue = 'Data may not be saved'
}, true);
console.log('REMOVED')
}
}
Run Code Online (Sandbox Code Playgroud)
我在控制台中得到“已删除”,但即使已保存表单,仍然会弹出提示。是不是因为我把事件监听器放在了错误的组件中?
我在JavaScript中创建了一个类,它在启动类时执行与特定任务相关的键调用(按键).
类有一个函数'receaveKey',这个函数由addEventListener引用
document.addEventListener("keypress",this.receaveKey.bind(this));
Run Code Online (Sandbox Code Playgroud)
这适用于我,但我的类有另一个功能"退出"当这个被调用时,我想删除该事件监听器,我尝试了这个,但确实有效.
document.removeEventListener("keypress",this.receaveKey.bind(this));
Run Code Online (Sandbox Code Playgroud)
注意: - 我也试过这个但是有问题我不能给出类的启动对象的引用,因为当使用类的'函数'按键时我也必须做一些任务.
document.addEventListener("keypress",staticClassReceaveKey);
document.removeEventListener("keypress",staticClassReceaveKey);
Run Code Online (Sandbox Code Playgroud)
注意: - 我也试过这个
document.addEventListener("keypress",this.receaveKey);
document.removeEventListener("keypress",this.receaveKey);
Run Code Online (Sandbox Code Playgroud)
但是当使用类的方法作为引用函数时,没有找到任何运气,因为没有删除监听器
javascript ×5
events ×2
typescript ×2
angular ×1
hammer.js ×1
html5 ×1
ionic-native ×1
ionic3 ×1
listener ×1
mousedown ×1
mousemove ×1
reactjs ×1