代码之家  ›  专栏  ›  技术社区  ›  anonymoose

对象的不透明度滑块

  •  0
  • anonymoose  · 技术社区  · 8 年前

    我正在尝试合并一个不透明度滑块,以便根据滑块的位置(100完全可见)将任何选定对象设置为更改。我使用的是fabric.js版本1.7.22和jquery 3.3.1。

    我最初问了这个问题,得到了一个有效的解决方案(谢谢@durga),但我意识到我使用了错误的fabric.js版本。我看了医生,但是卡住了。我在这里做错什么了?

    我所拥有的: http://jsfiddle.net/code4ever/srm25f9d/

    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://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.22/fabric.min.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>

    提前谢谢!

    2 回复  |  直到 8 年前
        1
  •  1
  •   Observer    8 年前

    假设一次需要更新一个对象,那么可以使用fabrijs函数getactiveobject()来更新不透明度:

    var canvas = new fabric.Canvas("c");
    canvas.isDrawingMode = true;
    
    // select, draw
    $("#select").click(function() {
      canvas.isDrawingMode = false;
    });
    $("#draw").click(function() {
      canvas.isDrawingMode = true;
    });
    
    $("#alpha").slider({
      max: 1,
      min: 0,
      step: 0.1,
      value: 1,
      slide: function(event, ui) {
        if (canvas.getActiveObject()){
            canvas.getActiveObject().setOpacity(ui.value);
            canvas.renderAll();
        }
      },
      stop: function(event, ui) {
        canvas.renderAll();
      }
    });
    

    如果你需要玩多个对象,那么你需要循环和改变每个对象的不透明度分别。

        2
  •  1
  •   Durga    8 年前

    使用 object:selected 获取选定对象的事件 selection:cleared 移除活动对象。

    对于v2 check 是的。

    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('object:selected', function(options) {
      activeObject = options.target;
      $("#alpha").slider("option", "value", activeObject.opacity);
    });
    canvas.on('selection:cleared', function(options) {
      activeObject = null;
      $("#alpha").slider("option", "value", 1);
    });
    
    $("#alpha").slider({
      max: 1,
      min: 0,
      step: 0.1,
      value: 1,
      slide: function(event, ui) {
        activeObject && (activeObject.opacity = ui.value)
        canvas.renderAll();
      },
      stop: function(event, ui) {
        canvas.renderAll();
      }
    });
    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://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.22/fabric.min.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>
    推荐文章