【发布时间】:2019-09-06 10:13:20
【问题描述】:
我想根据鼠标位置旋转 svg 的渐变。 机制应该如下,其中[0,0]是鼠标在窗口的左上角,[100%,0]应该是鼠标在窗口的右上角等等。
到目前为止,我所拥有的是鼠标位置的角度变化(仅 mouseX),但不是基于我想要的机制: https://codepen.io/magglomag/pen/YzKYLaa
svg 渐变是这样定义的:
<defs>
<linearGradient gradientTransform="rotate( X, 0.5, 0.5 )" id="gradient" gradientUnits="objectBoundingBox">
<stop offset="0.4" style="stop-color:#33FF8F"/>
<stop offset="0.6" style="stop-color:#5A33FF"/>
</linearGradient>
</defs>
角度的操作是通过JS改变gradientTransform属性中的X来实现的:
$( 'body' ).mousemove( function( e ) {
mouseX = e.pageX - this.offsetLeft;
mouseY = e.pageY - this.offsetTop;
xy = mouseX;
$( 'svg defs' ).html( '<linearGradient gradientTransform="rotate(' + xy + ', 0.5, 0.5 )" id="gradient" gradientUnits="objectBoundingBox"><stop offset="0.4" stop-color="#33FF8F"/><stop offset="0.6" stop-color="#5A33FF"/></linearGradient>' );
});
此外,我还想添加一些缓和,这样更改就不会那么难了。这是我发现的一个使用缓动的例子。不结合渐变角度变化,而是结合运动,但底层代码可能会有所帮助:https://www.kirupa.com/canvas/mouse_follow_ease.htm
非常感谢任何帮助。
【问题讨论】:
-
您能创建一个交互式示例吗?当然,SVG 并没有大到不适合问题或 jsFiddle。
-
嗨 @TomášZato,Codepen 上已经有一个:codepen.io/magglomag/pen/YzKYLaa
标签: javascript jquery svg gradient mouse-position