javascript - html5 从 Canvas 中删除

标签 javascript jquery html canvas

这是我的第一个 html5 项目,正在了解它的要点,需要一些帮助。我使用 jquery UI slider 将不透明度值发送到 Canvas ,效果非常好...但是当 slider 处于关闭位置且值为零时,我无法使图像完全关闭。这是我想做的事情:http://jsfiddle.net/N6wZZ/2/

这是我的 JS:

$("#slider").slider({
    animate: true,
    range: "min",
    value: 0,
    min: 0,
    max: 0.9,
    step: .01,
    create: function (event, ui) { 
        var opacityValue = '0.0';
        canvasFunction(opacityValue);
    },
    slide: function (event, ui) { 
         $('#hiddenField').attr('value', ui.value);
         $("#slider-result").html(ui.value);
         var opacityValue = $('#hiddenField').val();
         if (opacityValue == 0) {
            var opacityValue = 0;
            var workAroundVar = 300;
            var workAroundVarTwo = 0;
            canvasFunction(opacityValue, workAroundVar, workAroundVarTwo);
        } 
        else {
            var workAroundVar = 0;
            var workAroundVarTwo = 300;
            canvasFunction(opacityValue, workAroundVar, workAroundVarTwo);
        }
    }     
});
function canvasFunction(opacityValue, workAroundVar, workAroundVarTwo){
    var canvas = document.getElementById("myCanvas");
    var ctx = canvas.getContext("2d");
    var img1 = loadImage('http://moosepic.com/test2.png', main);
    var img2 = loadImage('http://moosepic.com/test.png', main);


    var imagesLoaded = 0;

    function main() {
      imagesLoaded += 1;

      if (imagesLoaded == 2) {
        // composite now
        ctx.drawImage(img1, 0, 0, 300, 300);

          ctx.globalAlpha = opacityValue;
          ctx.drawImage(img2, workAroundVar, workAroundVar, workAroundVarTwo, workAroundVarTwo);

      }
    }

    function loadImage(src, onload) {
      var img = new Image();

      img.onload = onload;
      img.src = src;

      return img;
    }

}

如您所见,我已经采取了一系列解决方法来关闭第二张图像或将其从 Canvas 中删除。任何帮助都是极好的。

最佳答案

塞拉斯。我查看了你的 jsFiddle。我 fork 了它并对您的方法进行了一些更改/改进,我认为它实现了您的目标:

http://jsfiddle.net/3LJsX/7/

这是我采取的方法(与您的方法非常接近,只有一些细微的差别):

  1. 加载我们的第一张图片
  2. 在第一个图像的 onLoad 函数中加载第二个图像
  3. 在第二张图片的 onLoad 函数中创建 slider
  4. slider 的创建和更新方法都会调用 refreshVisuals 函数,该函数会更新 slider div 的值并更新 Canvas

主要区别在于 draw 函数,在您的示例中称为 canvasFunction。在我的 draw 函数中,我确保:

  1. 每次绘制时清除 Canvas
  2. 当我们用树绘制第一张图像时,确保 alpha 为 1
  3. 绘制 TreeMap 像
  4. 将 Alpha 值更新为 slider 的当前值
  5. 绘制我们的领带图像

应该是这样!如果您有任何疑问,请告诉我。

关于javascript - html5 从 Canvas 中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14372234/

相关文章:

javascript - 开 Jest : Testing for type or null

javascript - .ajax JSON 类型错误 : Cannot read property 'length' of undefined

javascript - 如何使用 Chrome 扩展监听 url 变化

html - CSS:使中间div占据窗口高度的整个可用空间(最小高度)

javascript - html5 Canvas 中的套索工具

javascript - 如何在使用自定义警报弹出窗口时阻止 beforeUnload 上的弹出警报?

Javascript,CSS : Get element by style attribute

javascript - 单击按钮时 Jquery/Animation 重新加载问题

javascript - 更改分页中选定的页面

php - 如何使用 foreach 循环并在固定位置设置小的变化?