【问题标题】:Incorporating Opacity Slider for Selected Object为选定对象合并不透明度滑块
【发布时间】:2018-07-08 12:56:44
【问题描述】:

我正在尝试合并一个不透明度滑块,以便将任何选定的对象设置为根据滑块的位置进行更改(100 完全可见)。我正在使用fabric.js/master/dist/fabric.js 和 jQuery 3.3.1。我在这里做错了什么? I am basically trying to incorporate the Opacity slider on fabricjs.com.

我收到此错误: “未捕获的类型错误:无法读取未定义的属性‘不透明度’”

我有什么: https://codepen.io/s-harper/pen/QxeMXL

我尝试合并的答案: Opacity slider for a fabric object

var canvas = new fabric.Canvas("c");
canvas.isDrawingMode = true;

// select, draw
$("#select").click(function() {
  canvas.isDrawingMode = false;
});
$("#draw").click(function() {
  canvas.isDrawingMode = true;
});

var activeObject = canvas.getActiveObject();

$("#alpha").slider( {
       max : 100,
       value : activeObject.opacity * 100,
       slide: function (event, ui) {
           activeObject.setOpacity(ui.value / 100);
           canvas.renderAll();
       },
       stop : function (event, ui) {
           canvas.renderAll();
       }
});
canvas {
  border: solid 1px #000;
}

fieldset {
  max-width: 350px;
}
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://rawgithub.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas id="c" width="400" height="400"></canvas>
<br>
<button id="draw">Draw</button>
<button id="select">Select</button>
<br>
<br>
<fieldset>
  <legend>Controls</legend>
  <label for="alpha">Opactity</label>
  <input type="range" id="alpha" name="alpha" min="0" max="100" value="100" step="1" />
</fieldset>

提前致谢!

【问题讨论】:

  • 在示例中,activeObject.opacity 出现错误,因为 activeObject 未定义。这是你得到的同样的错误吗?您的问题没有说明,所以我不确定这是否是您要修复的错误,或者是否在翻译中丢失了某些内容。
  • @Aankhen 嗨,我也知道了(未捕获的类型错误:无法读取未定义的属性“不透明度”)。 activeObject 没有定义吗?当我运行 activeObject 时,我没有收到错误消息。
  • 据我所知,getActiveObject 只会在有对象的情况下返回一个对象,而在创建画布时不会返回该对象。

标签: javascript fabricjs


【解决方案1】:

您需要使用selection:created, selection:updated 之类的事件获取activeobject,并使用jquery ui for jquery slider。

演示

var canvas = new fabric.Canvas("c");
canvas.isDrawingMode = true;

// select, draw
$("#select").click(function() {
  canvas.isDrawingMode = false;
});
$("#draw").click(function() {
  canvas.isDrawingMode = true;
});
var activeObject = null;
canvas.on('selection:created', function(options) {
  activeObject = options.target;
  $("#alpha").slider("option", "value", activeObject.opacity);
});
canvas.on('selection:updated', function(options) {
  activeObject = options.target;
  $("#alpha").slider("option", "value", activeObject.opacity);
});
canvas.on('selection:cleared', function(options) {
  activeObject = null;
});
$("#alpha").slider({
  max: 1,
  min: 0,
  step: 0.1,
  value: 1,
  slide: function(event, ui) {
    activeObject && (activeObject.opacity = ui.value)
    canvas.requestRenderAll();
  },
  stop: function(event, ui) {
    canvas.requestRenderAll();
  }
});
canvas {
  border: solid 1px #000;
}

fieldset {
  max-width: 350px;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.js"></script>
<script src="https://rawgithub.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas id="c" width="400" height="400"></canvas>
<br>
<button id="draw">Draw</button>
<button id="select">Select</button>
<br>
<br>
<fieldset>
  <legend>Controls</legend>
  <label for="alpha">Opactity</label>
  <div id="alpha" name="alpha"></div>
</fieldset>

【讨论】:

猜你喜欢
  • 2018-12-17
  • 2015-05-03
  • 2017-02-05
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
相关资源
最近更新 更多