画布中的鼠标偏移量[fabric.js]
Mouse offset in canvas [fabric.js]
我已经读了3-5个关于鼠标偏移的主题,但我仍然不知道哪里一团糟。
就我而言,60%的情况下一切都很好。在其他40%的鼠标是偏移的。在这里演示。
有时对象位置与鼠标行为无关。(IE和Chrome最糟糕)
我尝试过编辑样式表和父div,但什么都没有。最糟糕的是:我看不出任何规律。如果有任何帮助,我将不胜感激。
您可以这样做:
canvas.on("after:render", function(){ canvas.calcOffset() });
我只在创建画布后才这样做。当没有调整大小事件时,这是临时调用。那个就是bug出现的时候。
由于页面上其他元素的位置,画布偏移值可能会发生变化。
您只需要在画布中添加导致问题的元素后或在代码中调用canvas.renderAll()
方法后调用canvas.calcOffset()
。
每当画布在HTML文档中移动时,就会出现此偏移问题。例如,如果在画布上方添加高度为10px的元素,则在首次渲染画布后,对象将偏移10px。每当画布在HTML文档中重新定位时,都会添加此代码,它应该会重新计算鼠标交互:
canvas.on("after:render", function(){
canvas.calcOffset();
});
Fabric.js会在调整窗口大小时自动调用此方法,这就是为什么您在该事件中看不到问题的原因。
真是难以置信!我已经修复了这个错误。你永远不会相信我…
页面顶部的代码如下:
<div class="logo">
<a href="/"><img src="logo.png" alt="" /></a>
</div>
此代码与canvas没有合理的关系。这个类有简单的css:{float: left; margin: 10px 0 0 0;}
但由于某些原因,此代码强制在画布中偏移鼠标。我把这个代码重新制作成:
<div class="logo">
<a href="/" class="logoHref"></a><!--- image is in css bg --->
</div>
现在一切都很顺利。
我看不出这些事件之间有任何关联,但事实就是事实。那对我来说是非常艰难的一天…
画布中对象的偏移定位很可能是由DOM操作更改的画布和子对象的原始坐标引起的。
我发现的一个简单的解决方案是确保我在添加任何对象后立即设置添加到画布中的对象的坐标。例如,如果你假设该对象是一个图像,你可以执行以下操作:
var canvas = new fabric.Canvas();
var image = new Image();
canvas.add( image );
image.center() // Optional if you wish the object centered on canvas
image.setCoords();
希望这能有所帮助。祝你好运
- 使用fabric.js从矩形区域获取对象,并将该区域绘制到画布上
- Fabric.js-更改矩形填充
- Dropdown在fabric js的Materialize设计中不起作用
- 如何在fabric js中向多边形添加图像
- fabric js多边形集合坐标
- 在fabric.js中以PNG格式下载Canvas,给出网络错误
- 在fabric.js中使用一个组作为遮罩
- 以编程方式将fabric-js-canvas的图像替换为hq图像,并重新计算其他对象的坐标和大小
- 如何通过Fabric.js只点击实际内容来选择对象
- Cufon-builder-font-js文件在Fabric.js中不起作用
- fabric.js中的文本对齐方式未按预期工作
- fabric.js:使用 Image.set() 调整图像大小是否会降低图像质量
- 使用Fabric.js选择画布上的所有对象
- Canvas仅使用fabric.js在点击事件时渲染自定义Web字体
- drawImage() in fabric js
- Fabric.js函数将对象从A点移动到B点
- Fabric.js文本转换不起作用
- 检查Fabric.js中的Canvas是否为空
- 如何在Fabric.js上获取鼠标坐标
- 如何使用Fabric.js创建多个形状