【发布时间】:2020-12-08 10:34:24
【问题描述】:
我正在尝试重新创建此处显示的材质波纹效果:https://material.angular.io/components/ripple/examples
我创建了一个按钮(一个带有 height: 36px; 和 padding: 0 16px; 的元素(其中还有一些文本),并实现了一个算法来根据用户的点击位置计算波纹的位置,以及另一个算法来找到涟漪效应的最小可能尺寸(矩形的对角线长度。如果用户直接单击按钮的中心,则会应用此测量值)。
用户点击的位置被格式化为距左侧像素 (PosX) 和距顶部像素 (PosY)。
PosX: 27
PosY: 16
我似乎无法弄清楚当用户单击矩形内的任何给定点时如何计算圆的直径。例如,假设我们有一个 30 像素 x 40 像素的矩形。如果用户直接点击矩形的中心(PosX: 15,PosY: 20),则创建的波纹的高度和宽度将为 50px,并将位于矩形的中心,完美地覆盖整个形状。
但是,例如,如果用户向左并向上点击一点会怎样?假设用户点击PosX: 10、PosY: 12。找到波纹中心的位置相当容易:
ripple.style.left = PosX - rippleSize / 2 + "px";
ripple.style.top = PosY - rippleSize / 2 + "px";
但是当用户点击PosX: 10和PosY: 12时如何找到rippleSize?
我希望我在这里包含了足够的信息。如果您需要更多信息,请告诉我。
这是我目前的工作:https://codepen.io/BlackKnightNick/pen/abNmZbz
编辑:我想它看起来像某种从中心开始的径向渐变,这将确定圆的比例(最小尺寸,用户点击最中心,被transform: scale(1) 和最大尺寸,用户点击其中一个角落,为 transform: scale(2)。不确定这是否有帮助,但我决定添加它以防万一。
【问题讨论】:
-
我查看了 Material Ripple Effect,在我看来,初始圆的直径是恒定的,并且仅取决于矩形大小 - 而不是点击位置。
标签: javascript html material-design