将对象函数传递给事件侦听器 JavaScript
passing object function to eventlistener javascript
我正在尝试将成员函数附加到画布事件列表器。好像是吸收不了。下面是 html 代码中的片段。我确实想将我的事件关联到特定对象,并且不希望它是静态的。
<!DOCTYPE html>
<html>
<body>
<p>Graph</p>
<canvas id="canvasGraph" width="600" height="400" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.</canvas>
</br>
<p><button onclick="main()">Try it</button></p>
<script>
"use strict";
var cg;
function main()
{
var canvasElement = document.getElementById("canvasGraph");
cg = new CanvasClass(100, canvasElement);
//alert(cg.test);
cg.addGraphListener();
}
class CanvasClass
{
constructor(_testInt, _canvasElement)
{
this.test = _testInt;
this.canvasElement = _canvasElement;
}
getMousePos(evt)
{
var canvas = this.canvasElement;
var rect = canvas.getBoundingClientRect();
return {
x: evt.clientX - rect.left,
y: evt.clientY - rect.top
};
}
writeMessage(message) {
var canvas = this.canvasElement;
var context = canvas.getContext('2d');
context.clearRect(0, 0, canvas.width, canvas.height);
context.font = '18pt Calibri';
context.fillStyle = 'black';
context.fillText(message, 10, 25);
}
addGraphListener()
{
//alert(this.test);
this.canvasElement.addEventListener('click', this.testfunc, false); // Not as expected
this.canvasElement.addEventListener('click', this.listener, false);
this.canvasElement.addEventListener('click', CanvasClass.staticTest, false);
}
static staticTest()
{
alert(cg.test); // works but clumsy
}
testfunc()
{
alert(this.test); // object is not recognized
}
listener(evt)
{
//var mousePos = this.getMousePos(evt); // Uncaught TypeError: this.getMousePos is not a function
var mousePos = getMousePos(evt); // Uncaught ReferenceError: getMousePos is not defined
var message = 'Mouse position: ' + mousePos.x + ',' + mousePos.y;
this.writeMessage(message);
}
}
</script>
试试这个
CanvasClass.protype.addGraphListener = function()
{
var tfunc = this.listener;
this.canvasElement.addEventListener('click', function(event){
tfunc (evt);
}, false);
}
CanvasClass.protype.listener = function(evt)
{
var mousePos = this.getMousePos(evt);
var message = 'Mouse position: ' + mousePos.x + ',' + mousePos.y;
this.writeMessage(message);
}
CanvasClass.protype.getMousePos= function(evt)
{
var canvas = this.canvasElement;
var rect = canvas.getBoundingClientRect();
return {
x: evt.clientX - rect.left,
y: evt.clientY - rect.top
};
}
相关文章:
- 如何在for循环中添加事件侦听器
- 未命中服务器发送的事件侦听器
- 如何覆盖原型中的事件侦听器
- 无法将事件侦听器附加到画布
- 如何在d3.js中自定义事件侦听器
- 在es6中,将带有回调的事件侦听器设置为可迭代的
- 事件侦听器未在chrome扩展中的options.js中启动
- IE8更改文本区域上的事件侦听器不工作
- 将事件侦听器添加到文档,而不是签入元素存在,然后添加事件侦听器
- javascript删除事件侦听器
- 我应该/如何清除mousemove JQuery事件侦听器
- 在JQuery中使用谷歌地图Api事件/侦听器
- 如何使用我的Jquery代码创建委托事件侦听器
- 'mousemove'画布中的事件侦听器-指针仅在最后一个矩形中更改
- 为什么此事件侦听器不工作
- 是否可以在数字输入框中的小按钮中添加事件侦听器
- 在Google Chrome扩展中添加事件侦听器
- SVG元素在转换后会丢失事件侦听器
- jQuery事件侦听器多次启动
- 如何在不删除类似侦听器的情况下从父对象中删除jQuery事件侦听器