Circle Cut Mask附加到Cut Out Circle Div

时间:2017-05-09 18:14:07

标签: javascript css svg mask clip-path

我希望用蓝色透明蒙版覆盖视频,中间有一个剪切圆圈。切出的圆圈将被涂成红色并且也是透明的。

我需要能够使用javascript轻松调整圆圈(和剪切)的大小。

最终会看起来像这样:

https://i.stack.imgur.com/ORVyQ.jpg

我无法使用透明的PNG或SVG并只是调整大小,因为我需要能够使用javascript设置颜色。

最有效的方法是什么?

这是我目前所拥有的,但我不认为这是最好的方式。

https://jsfiddle.net/tbristol/j60u8pLm/

特别是因为我正在使用第二个SVG元素并使用顶部调整它:-18px,我认为它不会很好地扩展或调整好。

svg:nth-child(2) {
  margin-top:-100%;
  position:relative;
  top:-18px;
}

1 个答案:

答案 0 :(得分:3)

我认为你正在推翻解决方案。

您需要做的就是在背景顶部放置一个半透明的SVG。不需要口罩。

var circ = document.getElementById("circ");

// Every second update the position and size of the circle
window.setInterval(function() {

  circ.setAttribute("cx", getRandomNumberMinMax(30, 70) + "%");  
  circ.setAttribute("cy", getRandomNumberMinMax(30, 70) + "%");  
  circ.setAttribute("r", getRandomNumberMinMax(20, 40) + "%");  

}, 1000);


function getRandomNumberMinMax(min, max) {
  return Math.floor(Math.random() * (max - min)) + min;
}
body {
  background-image: url(http://bennettfeely.com/clippy/pics/pittsburgh.jpg);
  margin: 0;
  padding: 0;
}

svg {
  position: absolute;
  height: 100%;
  width: 100%;
}
<body>

  <svg>
    <g opacity="0.5">
      <rect x="0" y="0" width="100%" height="100%" fill="blue" />
      <circle id="circ" cx="50%" cy="40%" r="30%" fill="red" />
    </g>
  </svg>

</body>