mousewheel(和其他类型)的addEventListener不起作用

addEventListener for mousewheel (and other types) not working

本文关键字:addEventListener 不起作用 类型 其他 mousewheel      更新时间:2023-09-26

需要为画布元素实现放大/缩小(和平移)功能。这是我第一次尝试JavaScript事件,所以我不存在的经验可能是这里的问题。我不知道我使用的类型是否正确。使用了我在网上找到的。

function onLoad() {
var canvas;
var context;
var exampleFamilyTrees;
var topPerson;
var previousMousePosition;
var mousePosition
var pan;
var mouseDown;
var zoom;   
function initialise() {
    canvas = document.getElementById('canvas');
    if (!canvas) {
        alert('Error: Canvas element not found');
        return;
    }
    context = canvas.getContext('2d');
    if (!context) {
        alert('Error: Unable to get canvas context');
        return;
    }
    exampleFamilyTrees = new ExampleFamilyTrees();
    topPerson = exampleFamilyTrees.getFamilyTree(0);
    pan = new Vector(0, 0);
    zoom = 1;
    //context.translate(canvas.width*0.5, canvas.height*0.5);
}
function draw() {   
    context.save();
    context.translate(pan.getX(), pan.getY());
    context.scale(zoom, zoom);
    topPerson.draw(context);
    context.restore();
}
initialise();   
canvas.addEventListener('mousedown', onMouseDown, false);
canvas.addEventListener('mouseup', onMouseUp, false);
canvas.addEventListener('mousemove', onMouseMove, false);
canvas.addEventListener('mousewheel', onMouseWheel, false); 
function onMouseDown(event) {
    previousMousePosition = new Vector(event.clientX, event.clientY);
    mouseDown = true;
}
function onMouseUp(event) {
    mouseDown = false;
}   
function onMouseMove(event) {
    mousePosition = new Vector(event.clientX, event.clientY);
    if (mouseDown) {
        var difference = mousePosition.subtract(previousMousePosition);
        pan.add(difference);
    }
    previousMousePosition = mousePosition;
}
function onMouseWheel(event) {
    var wheelDelta = event.wheelDelta;
    if (wheelDelta > 0){
        zoom = zoom * 1.1;
    }
    else {
        zoom = zoom * 0.9;
    }
}
setInterval(draw, 1000/60);}

这些功能都不起作用。我想我的语法是错误的。控制台一点也不抱怨。

您的事件被正确绑定,iv'e准备了一个小提琴来演示它,我已经注释了关于VectorExampleFamilyTrees对象的所有代码,因为我没有它们的构造函数(不确定它是库还是您制作的东西),也为了使示例更简单,因为问题是关于事件处理程序不工作。

在注释掉这些行之前,我在控制台中遇到了一些关于这些对象(VectorExampleFamilyTrees)的错误。也许你也会犯这些错误,这就是为什么你的事件没有被绑定的原因。

如果您在运行fiddle后检查控制台,您可以看到要绑定的每个事件的日志。

相关文章:
  • 没有找到相关文章