【问题标题】:Stop a Function/ EventListener once another has been called调用另一个函数/事件侦听器时停止
【发布时间】:2013-12-02 20:13:57
【问题描述】:

我正在尝试使用 html5 画布编写绘图应用程序。

我已将图像设置为背景。使用 clearRect 动画的描边矩形用于从背景图像中选择一个正方形。在鼠标按下时,画布被转换和缩放,并且选定的图像正方形被绘制到画布上。

一旦选择了一个正方形,我想停止 clearRect 函数,以便我可以启动绘图函数。不幸的是,尽管查看了历史帖子,但我无法保留缩放后的图像,并且由于选择功能仍处于活动状态,它立即被清除。

这是我的 javascript 代码:

function doFirst(){
var x = document.getElementById('canvas')
canvas=x.getContext('2d');
canvas.strokeStyle = "red";
canvas.fillStyle="black";
canvas.font = "bold 36px Arial";
}

function select(e){
xPos=Math.floor(e.clientX/100)*100;
yPos=Math.floor(e.clientY/100)*100;
canvas.clearRect(0,0,500,800);
canvas.strokeRect(xPos+1,yPos+1,99,99);
}

function zoom(e) {
var xPos=e.clientX;
var yPos=e.clientY;
canvas.scale(5,5);
canvas.translate(-Math.floor(xPos/100)*100,-Math.floor(yPos/100)*100);
canvas.strokeStyle="transparent";
var pic= new Image();
pic.src = "tut.jpg";
pic.addEventListener ("load",function(){canvas.drawImage(pic,0,0)},false);
}

window.addEventListener ("load", doFirst, false);
window.addEventListener ("mousemove", select, false);
window.addEventListener ("mousedown", zoom, false);

非常感谢,

尼克

【问题讨论】:

    标签: javascript html canvas


    【解决方案1】:

    这个?

    window.removeEventListener ("mousemove", select, false);
    

    【讨论】:

    • 太棒了!删除..添加...啊!
    【解决方案2】:

    不太符合您的意思,但是当鼠标移动时,mousemove 侦听器每秒会触发多次?

    【讨论】:

    • 我希望 mousemove 监听器在我放大后停止 - coco 为我提供了一个非常优雅的解决方案。谢谢大家!
    【解决方案3】:

    试试这个:

    document.addEventListener("load", function(e){e.stopPropagation();doFirst}, true);
    document.addEventListener("mousemove", function(e){e.stopPropagation();select}, true);
    document.addEventListener("mousedown", function(e){e.stopPropagation();zoom}, true);
    

    【讨论】:

    • 这似乎是最好的解决方案。使我能够停止缩放并从缩放功能中选择功能 - removeEventListener 适用于选择功能,但由于某种原因不适用于缩放功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 2019-10-20
    • 1970-01-01
    相关资源
    最近更新 更多