javascript - 触摸事件初始坐标

标签 javascript canvas touch

我正在寻找答案,但找不到任何答案。我的问题是:

我需要一个对象在触摸它时出现在 Canvas 上,并在取消触摸事件(抬起手指)时消失。 但是,我需要该对象具有原始触摸位置的初始坐标,这意味着我不希望它随着我的手指移动。

var can = document.getElementById('can');
var ctx = can.getContext('2d');

var WIDTH = can.width;
var HEIGHT = can.height;
var canX;
var canY;
var mouseIsDown = 0; 
var requestAnimFrame =  window.requestAnimationFrame ||
                    window.webkitRequestAnimationFrame ||
                    window.mozRequestAnimationFrame ||
                    window.oRequestAnimationFrame ||
                    window.msRequestAnimationFrame;


var image = new Image();
image.src = '1.png';


function init(){
    can.addEventListener("mousedown", mouseDown, false);
    can.addEventListener("mousemove", mouseXY, false);

    document.body.addEventListener("mouseup", mouseUp, false);
    loop();
}


function mouseUp() {
    mouseIsDown = 0;
    mouseXY();
}


function mouseDown() {
    mouseIsDown = 1;
    mouseXY();
}


function mouseXY(e) {
    if (!e)
        e = event;
    canX = e.pageX - can.offsetLeft;
    canY = e.pageY - can.offsetTop;
}


function loop(){
    if(mouseIsDown===1){
        draw();
    } else 
    ctx.clearRect(0,0,WIDTH, HEIGHT);
    requestAnimFrame(loop);
}


function draw(){
    ctx.clearRect(0,0,WIDTH, HEIGHT);
    ctx.drawImage(image,0,0,40,40,canX-20,canY-20,40,40);
}

最佳答案

您需要将初始鼠标/触摸位置存储在一对单独的变量中。

var initialCanX, initialCanY;

function mouseDown(e) {
    mouseIsDown = 1;

    initialCanX = e.pageX - can.offsetLeft;
    initialCanY = e.pageY - can.offsetTop;

    mouseXY(e);
}

然后,在绘图函数中,使用这些坐标来绘制第二个图像。

function draw(){
    ctx.clearRect(0, 0, WIDTH, HEIGHT);
    ctx.drawImage(image, canX, canY); // the moving image
    ctx.drawImage(image2, initialCanX, initialCanY); // the static image
}

关于javascript - 触摸事件初始坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18263018/

相关文章:

javascript - 使用带有 Promise 的 Express.js 端点

javascript - jQuery 使用相对值更改背景位置

c# - 如何使用 OnRender 事件但仅呈现到 WPF 中的控制区域?

javascript - 如何在连续循环中放大和缩小 Canvas 图像?

javascript - CSS :hover/:focus vs click event on (mobile) touch devices

android - 如何将触摸事件从 subview 传递给父 View ?

javascript - 如何通过调用不同的id函数来使用多个model box?

javascript - 我正在尝试制作一个将两个单词混合在一起的程序,但当我添加一个函数时它就停止工作

Canvas 或 ImageView 上的 Android 热图

javascript - 触摸事件在 Android PhoneGap WebView(甚至内置浏览器)中不起作用