【问题标题】:Syncrhonous scrolling of 2 separate canvases on a single page在单个页面上同步滚动 2 个单独的画布
【发布时间】:2013-05-21 14:16:16
【问题描述】:

我有 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 页面上。

我们的想法是让它们都代表一个时间线。即它们都可以从左到右滚动,反之亦然。

我不久前创建了第一个画布,最近决定实现第二个画布。

当我在第二个画布中复制粘贴原始代码以模拟滚动部分时,我发现实际上,当我滚动时,只有原始画布会滚动,而新画布不会滚动。

如果我注释掉原始画布的代码,则新画布会滚动。

这让我想到,我试图实现的基于事件的滚动在其命名约定中存在某种形式的缺陷。 (因为鼠标点击被表示为一个事件,然后允许拖动;我的代码只注册了原始画布的拖动事件,而不是新画布)。

http://jsfiddle.net/przBL/3/

如果有人可以查看代码并告诉我哪里出错了,我将不胜感激??

目标:- 是点击任一画布,拖动鼠标,两幅画布同时滚动。

第一个画布:-

 // 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 事件上同步移动,并在鼠标启动时停止。

【问题讨论】:

    标签: javascript c#-4.0 html5-canvas


    【解决方案1】:

    您可以使用常见的鼠标处理程序来相同地滚动两个画布。

    请参阅下面的window.onmousemove,它使两个画布保持翻译同步。

     // 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 (e) {
         // dragging is set to false.
         dragging = false;
     }
    
    
     window.onmousemove = function(e) {
          var evt = e || event;
          if (dragging) {
              var delta = evt.offsetX - lastX;
              translated += delta;
              move(ctx,930,900);
              move(ctx1,915,600);
              lastX = evt.offsetX;
              timeline();
              pharm_line();
          }
      }
    
      // common code used to service either canvas
      function move(context,width,height){
          context.restore();
          context.clearRect(0, 0, width, height);
          context.save();
          context.translate(translated, 0);
      }
    

    【讨论】:

    • 老兄。你是男人!我尝试通过 MarKEatG MAIL 与您联系,但它说地址无法访问。错误的电子邮件地址。
    • 很高兴我能帮上忙!并不是要对我的电子邮件过于神秘——我只是不想成为垃圾邮件机器人的受害者。查看我的个人资料以获得更清晰的版本。
    • 哈哈,您的电子邮件字段似乎隐藏在公众面前。你能在我的页面上查看我的电子邮件吗?
    • 真的——啊?!你的地址也被隐藏了。它是:标记 stackoverflow 地址(所有一个“单词”没有空格),它位于 gmail 。是的,真的很长!
    • 一个问题,引入新的画布,然后在上面单独绘制效果很好。但是当我滚动时,画布 2 上的元素会消失,只有当我有一个 can.onmousedown 后跟一个 can.onmouseup 事件时才会重新出现。我有滚动 asp 按钮,它们执行相同的滚动,但 canvas2 上的所有元素都使用这些按钮消失。即使使用 canvas2 滚动也无济于事。我的问题有意义吗?
    猜你喜欢
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2016-03-26
    • 2021-01-19
    • 2020-02-20
    • 2020-09-30
    • 2021-09-23
    • 1970-01-01
    相关资源
    最近更新 更多