动态更改SVG光标

3

我已经创建了SVG光标,希望能够在鼠标滚动时动态地改变光标半径,放大则增加半径,缩小则减小半径。

CSS SVG光标,这样可以实现:

.brushCursor {
    cursor: url('data:image/svg+xml;utf8,<svg id="svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="32" height="32"><circle cx="10" cy="10" r="5" stroke-width="2" style="stroke: black; fill: red;"/></svg>') 10 10, pointer;
}

但是我希望能够动态地改变SVG的半径,半径应该在1到10的范围内。 到目前为止,我做了这个,但光标没有更新:

const brush = document.querySelector('.brush');
const radius = 5;

brush.style.cursor = `url('data:image/svg+xml;utf8,<svg id="svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="32" height="32"><circle cx="10" cy="10" r=${radius} stroke-width="2" style="stroke: black; fill: red;"/></svg>')`;
1个回答

4
我正在创建一个新的<style>元素s,并将规则添加到其中。
使用input type='range'可以更改半径。

let r = 3;
let s = document.createElement("style");
document.head.appendChild(s);
changeCursor(r)

test.addEventListener("input", ()=>{
  r = test.value;
  changeCursor(r)
})

function changeCursor(r){
  let rule = `cursor: url('data:image/svg+xml;utf8,<svg id="svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="32" height="32"><circle cx="10" cy="10" r="${r}" stroke-width="2" style="stroke: black; fill: red;"/></svg>') 10 10, pointer;`
  
  s.textContent = `.brushCursor { ${rule} }`;
  
}
.brushCursor {
  height:100vh;
  /*cursor: url('data:image/svg+xml;utf8,<svg id="svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="32" height="32"><circle cx="10" cy="10" r="3" stroke-width="2" style="stroke: black; fill: red;"/></svg>') 10 10, pointer;*/
}
  #test{position:absolute; top:1em;}
<div class="brushCursor"></div>
<input id="test" type="range" min="2" max="7" value="3" />

为了在滚动时更改它,我需要知道更多信息。我使用的输入的最大值为7。也许8会做;但是更大的半径会给你一个可爱的圆形。您想如何在滚动时增大您的圆?另外,页面高度不同。您计划使用“scroll”还是“wheel”事件?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接