javascript-使用fabricjs在画布上添加“出血区域”?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-使用fabricjs在画布上添加“出血区域”?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3668字,纯文字阅读大概需要6分钟。
内容图文
![javascript-使用fabricjs在画布上添加“出血区域”?](/upload/InfoBanner/zyjiaocheng/668/be48d31fdc084398a634de1c88d58ff1.jpg)
我正在使用fabricjs(1.7.20),并希望创建一种“出血区域”,在该区域中用户无法使用画布周围的一些空间;如果您愿意,可以使用一种“墙”来阻止对象移动到画布墙的侧面.我该怎么做?
var canvas = new fabric.Canvas("c");
canvas.setHeight(350);
canvas.setWidth(350);
canvas.add(new fabric.IText("Some text", {
top: 25,
}));
var circle = new fabric.Circle({
radius: 20, fill: 'green', left: 100, top: 100
});
var triangle = new fabric.Triangle({
width: 20, height: 30, fill: 'blue', left: 150, top: 150
});
canvas.add(circle, triangle);
canvas {
border: 1px solid #dddddd;
margin-top: 10px;
border-radius: 3px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.20/fabric.min.js"></script>
<canvas id="c"></canvas>
这是向我建议的,这是我最近得到的.我正在寻找这样做,但是距画布的边界为10px.
canvas.on('object:moving', function (e) {
var obj = e.target;
// if object is too big ignore
if(obj.currentHeight > obj.canvas.height || obj.currentWidth > obj.canvas.width){
return;
}
obj.setCoords();
// top-left corner
if(obj.getBoundingRect().top < 0 || obj.getBoundingRect().left < 0){
obj.top = Math.max(obj.top, obj.top-obj.getBoundingRect().top);
obj.left = Math.max(obj.left, obj.left-obj.getBoundingRect().left);
}
// bot-right corner
if(obj.getBoundingRect().top+obj.getBoundingRect().height > obj.canvas.height || obj.getBoundingRect().left+obj.getBoundingRect().width > obj.canvas.width){
obj.top = Math.min(obj.top, obj.canvas.height-obj.getBoundingRect().height+obj.top-obj.getBoundingRect().top);
obj.left = Math.min(obj.left, obj.canvas.width-obj.getBoundingRect().width+obj.left-obj.getBoundingRect().left);
}
});
解决方法:
您可以通过以下方式添加一个10像素的出血区域:在确定对象是否从“出血”区域移出的条件下加上/减去10(我实际上更喜欢称其为“填充”),然后添加/从计算中减去将对象重新定位在填充边界内的位置.
这是一个有效的更新示例:
var padding = 10;
var canvas = new fabric.Canvas("c");
canvas.setHeight(350);
canvas.setWidth(350);
canvas.add(new fabric.IText("Some text", {
top: 25,
}));
var circle = new fabric.Circle({
radius: 20,
fill: 'green',
left: 100,
top: 100
});
var triangle = new fabric.Triangle({
width: 20,
height: 30,
fill: 'blue',
left: 150,
top: 150
});
canvas.add(circle, triangle);
canvas.on('object:moving', function(e) {
var obj = e.target;
// if object is too big ignore
if (obj.currentHeight > obj.canvas.height - padding * 2 ||
obj.currentWidth > obj.canvas.width - padding * 2) {
return;
}
obj.setCoords();
// top-left corner
if (obj.getBoundingRect().top < padding ||
obj.getBoundingRect().left < padding) {
obj.top = Math.max(obj.top, obj.top - obj.getBoundingRect().top + padding);
obj.left = Math.max(obj.left, obj.left - obj.getBoundingRect().left + padding);
}
// bot-right corner
if (obj.getBoundingRect().top + obj.getBoundingRect().height > obj.canvas.height - padding ||
obj.getBoundingRect().left + obj.getBoundingRect().width > obj.canvas.width - padding) {
obj.top = Math.min(
obj.top,
obj.canvas.height - obj.getBoundingRect().height + obj.top - obj.getBoundingRect().top - padding);
obj.left = Math.min(
obj.left,
obj.canvas.width - obj.getBoundingRect().width + obj.left - obj.getBoundingRect().left - padding);
}
});
canvas {
border: 1px solid #dddddd;
margin-top: 10px;
border-radius: 3px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.20/fabric.min.js"></script>
<canvas id="c"></canvas>
在第一行中,我定义了一个变量“ padding”,它表示所需的填充大小.这样,如果您以后想要更改填充,则不必在八个不同的位置进行更改.
左上角条件中使用的padding变量代替0.
如果“左上”条件为true,则将填充添加到计算中以重新放置对象.
在“右下方”部分,我们做的是相反的–我们从条件中减去填充并从重新定位计算中减去.
您也可以尝试以下小提琴中的代码:https://jsfiddle.net/pahund/hz7jLnme/
内容总结
以上是互联网集市为您收集整理的javascript-使用fabricjs在画布上添加“出血区域”?全部内容,希望文章能够帮你解决javascript-使用fabricjs在画布上添加“出血区域”?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。