svg元素设置渐变色时,设置角度,显示问题;

前段时间做了一个需求,svg元素渐变,支持给svg元素设置线性渐变,径向渐变,设置渐变角度;

测试的过程中,发现一个问题:

当我把角度设置到90度时,线性渐变的显示就会有问题

说明算的缩放不对,只显示了部分

那我们就需要根据元素的宽,高,对角线,去算对应的缩放值 

const ratio = newHeight / newWidth
// 对角线
const maxDiagonal = Math.sqrt((newWidth / 2) ** 2 + (newHeight / 2) ** 2)
// 对角线对应的角度
const maxDeg = Math.round(Math.atan(ratio) * 180 / Math.PI)
// 旋转角度
const rotateDeg = Math.min(Math.abs(rotateValue % 180), 180 - Math.abs(rotateValue % 180))
// 计算对边,即新的宽
const newDegWidth = maxDiagonal * Math.cos(Math.abs(maxDeg - rotateDeg) * Math.PI / 180)
    
const scaleValue = newDegWidth / (newWidth / 2)

gradientTransform = `rotate(${rotateValue}) translate(-${translateX}, -${translateY}) scale(${scaleValue})`

算好之后运行,发现还是没生效,为啥呢?难道是算错了?

看了半天,尝试设置了下transform-origin:center;

试了下,OK,可以了。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值