我有 2 幅画布:-
<canvas id="myCanvas" width="915" height="650" style="border: 2px double #000000;"></canvas>
<canvas id="pharmacy" width="915" height ="320" style ="border:2px double #000000;"></canvas>
它们是单独的画布,在同一个 aspx 页面上。
这个想法是让它们都代表一个时间线。即它们都可以从左到右滚动,反之亦然。
不久前我创建了第一个画布,最近决定实现第二个画布。
当我在第二个画布中复制粘贴原始代码以模拟滚动部分时,我发现实际上,当我滚动时,只有原始画布会滚动而新画布不会滚动。
如果我注释掉原始画布的代码,那么新画布会滚动。
这让我想到,我试图实现的基于事件的滚动在其命名约定中存在某种形式的缺陷。(因为鼠标单击表示为一个事件,然后允许拖动;我的代码只注册了原始画布的拖动事件,而不是新画布)。
如果有人可以查看代码并让我知道我哪里出错了,我将不胜感激?
目标:- 是单击任一画布,拖动鼠标,两个画布同时滚动。
第一张画布:-
// when mouse is clicked on canvas
window.onmousedown = function (e) {
var evt = e || event;
// dragging is set to true.
dragging = true;
lastX = evt.offsetX;
}
// when mouse is clicked again and the canvas is deselected
window.onmouseup = function () {
// dragging is set to false.
dragging = false;
}
// when mouse is dragging the canvas sideways
can.onmousemove = function (e) {
var evt = e || event;
if (dragging) {
var delta = evt.offsetX - lastX;
translated += delta;
//console.log(translated);
ctx.restore();
ctx.clearRect(0, 0, 930, 900);
ctx.save();
ctx.translate(translated, 0);
lastX = evt.offsetX;
timeline();
}
}
第二张画布:-
// when mouse is clicked on canvas
window.onmousedown = function (e) {
var evt = e || event;
// dragging is set to true.
dragging = true;
lastX = evt.offsetX;
}
// when mouse is clicked again and the canvas is deselected
window.onmouseup = function () {
// dragging is set to false.
dragging = false;
}
// when mouse is dragging the canvas sideways
can1.onmousemove = function (e) {
var evt = e || event;
if (dragging) {
var delta = evt.offsetX - lastX;
translated += delta;
//console.log(translated);
ctx1.restore();
ctx1.clearRect(0, 0, 915, 600);
ctx1.save();
ctx1.translate(translated, 0);
lastX = evt.offsetX;
pharm_line();
}
}
现在我希望 can 和 can1 在任何 mousedown 和 mousemove 事件上同步移动,并在鼠标启动时停止。