本篇文章在前一个初级的基础上进行后续的体验优化
1.win10原图
2.进阶实现图css
进阶篇使用的渐变范围写法:radial-gradient(63px at 63px 63px, #3c3c3c, #1a1a1a);html
解释一点:两种方法都是经过给九个元素设置不一样的渐变原点,但思想不一样git
图解:github
方法一,九个红点就是九个块的渐变中心(右下,中下,坐下,右中,不设置渐变,左中,右上,中上,左上)dom
方法二,中心的绿点就是圆心,坐标(63,63),九个黄点就是每一个块的零点,算出黄点相对绿点的坐标
[优化
(63,63), (21,63), (-21,63), (63,21), 不设置渐变 (-21,63), (63,-21), (21,-21), (-21,-21),
]
3.两种方法都有一个中心块不设置渐变色,纯背景色就能够spa
使用第二种方法,目的不是为了获得另外一种实现方式,是由于在实现鼠标移动时,动态移动高光范围,方法一很难计算移动的趋向和值,由于涉及到九个圆的圆心位置;而使用方法二,只要关心一个圆就行,及中心的圆,再经过中间值计算出对应九个块的位置。
根据个人实现过程,移动的计算规则是这样的:
计算倍数公式:中心原点/n+移动差值 = 样式表中固定的位置
n算出来的结果就是在js中写入的每一个块的改变倍数即code
1.5就是计算出来的n 原点---origin 移动差值---num radial-gradient(${originX}px at ${originX/1.5+numX}px ${originY/1.5+numY}px, #3c3c3c, #1a1a1a)
是怎么算出来不一样的n?htm
不考虑动态js改变,先使用css写出固定的像素,以第一个块为例:
小块边框是42px,九个块拼成一个大正方形,内切圆就是咱们应该实现的高光,中心原点坐标(63,63),则第一个块的渐变中心就出来了对象
background-image: radial-gradient(63px at 63px 63px, #3c3c3c, #1a1a1a);
相关代码点击这里查看吧
这个就是完整版的实现,讲得很差,没懂的能够看源码,再不懂就评论吧