在系统后台,我用fabricjs在开发一个工牌图片的模板,可以允许调整元素位置(这里元素指的就是文本、矩形框这些),但我不需要调整其倾斜度及大小,所以需要禁止管理员缩放及旋转元素
好像没有相关的属性可以直接控制元素缩放,本人是在缩放事件里添加的判断:
当缩放比例有变化时,将其比例值重置为1
代码如下:
canvas.on("object:scaling", function(){
let object = canvas.getActiveObject();
if('text' == object.type){
//禁止文本缩放
object.scaleX = 1;
object.scaleY = 1;
// 重新渲染画布
canvas.renderAll();
}
});
有相关的属性可以直接控制元素旋转:lockRotation
做了上面禁止缩放和禁止旋转的操作,功能上是有生效的,但是当选中元素时,还是会出现那9个点,那些点本来就是用来进行元素缩放和旋转的。
为了让用户感觉功能更加良好,把这9个正方形小方框隐藏就更好了。
也是有相关的属性可以直接控制:hasControls
如果只是想针对某一类型的元素做更改,可以遍历所有元素,在一一加入画布之前做好判断,统一固定的属性,就可以直接代码里写死,例如如下所示:
var templateData = getTemplateDetail(subjectId);
$.each(templateData, function(index, element){
//禁止旋转
element['lockRotation'] = true;
if('rect' == element.type){
var eleObj = new fabric.Rect(element);
}else if('text' == element.type){
element['hasControls'] = false;
var eleObj = new fabric.IText(element.content, element);
}else if('circle' == element.type){
}
canvas.add(eleObj);
});
由于本人想要全部禁止旋转,就不必在每个元素里去设置lockRotation属性了。