javascript - 重力点不能与其他元素一起正常工作

标签 javascript jquery

有一个很棒的代码笔叫做 Gravity Points我非常喜欢它,并想在我的下一个项目中使用它,但事实证明,只有当它是页面上的唯一元素时它才能很好地工作。一旦开始在其上方和下方添加内容,它就会错误计算鼠标位置。

看看my fork here ,我在上面添加了内容。请注意,如果 Canvas 与屏幕完美对齐,则重力点会创建在正确的位置,但如果您在向上滚动到一半时单击 Canvas ,则重力点会向下创建几个像素。

我对 javascript 和 jquery 不是很好,虽然我能够理解它正在调用哪些函数以及哪些函数被用来绘制点,但我无法理解计算在哪里发生以及它与滚动位置。这个函数貌似是点击左键触发的,但是光标坐标是从哪里来的呢?

function mouseDown(e) {
        for (var i = gravities.length - 1; i >= 0; i--) {
            if (gravities[i].isMouseOver) {
                gravities[i].startDrag(mouse);
                return;
            }
        }
        gravities.push(new GravityPoint(e.clientX, e.clientY, G_POINT_RADIUS, {
            particles: particles,
            gravities: gravities
        }));
    }

那么有人可以看看它并提供一些见解吗?

最佳答案

<canvas> element 有自己的坐标系,与文档坐标系(mouseEvents 发送的坐标系)不同。
你需要做的是检查 Canvas 的边界框并删除它到你的 mouseEvents 坐标的偏移量:

canvas.onmousemove = function(mouseEvent){
  var rect = canvas.getBoundingClientRect(); 
  var x = mouseEvent.clientX - rect.left; 
  var y = mouseEvent.clientY - rect.top;
  // doSomething with x and y
  for (var i = gravities.length - 1; i >= 0; i--) {
    if (gravities[i].isMouseOver) {
      gravities[i].startDrag(mouse);
      return;
     }
   }
  gravities.push(new GravityPoint(x, y, G_POINT_RADIUS, {
    particles: particles,
    gravities: gravities
   }));
}

关于javascript - 重力点不能与其他元素一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33561143/

相关文章:

jquery - Ember.js 1.2.0 debounce 在 jquery 事件上无法按预期工作

javascript - 如何计算匿名对象数组中属性值的出现次数

javascript - 如何防止 onSelect 在已选择的项目上触发

php - 包含的 PHP 页面中的 jQuery 代码

javascript - 如何将数组元素组合到最后的一个警报框中

javascript - 如何用字符串日期填写日期选择器表单?

javascript - 递归添加对象属性

javascript - IE8 不显示 extjs 网格面板

javascript - 如何从数组中删除单个数据?

javascript - 在 JavaScript 中重新定义事件