vue 通过自定义命令 给项目按钮增加水波纹效果

设计思路,增加全局的自定义命令v-ripple,使用v-ripple的元素通过element.appendChild 增加子元素,给子元素增加水波纹的动画效果,同时监听animationend,在动画结束后移除子元素

水波纹样式

[ripple] { position: relative; overflow: hidden; }
[ripple] .ripple {
position: absolute;
color: black;
border…


This content originally appeared on DEV Community and was authored by kh lemon

设计思路,增加全局的自定义命令v-ripple,使用v-ripple的元素通过element.appendChild 增加子元素,给子元素增加水波纹的动画效果,同时监听animationend,在动画结束后移除子元素

  • 水波纹样式
 [ripple] { position: relative; overflow: hidden; }
 [ripple] .ripple { 
      position: absolute;
      color: black;
      border-radius: 100%; 
      transform: scale(0);
      pointer-events: none;
      animation: ripple .4s ease-out; }
 @keyframes ripple { to {transform: scale(2); opacity: 0; } }
  • 增加水波纹节点
  function ripple(event, target) {
    let node;
    node = document.createElement("div");
    node.className = "ripple";
    /** 点击目标矩阵尺寸 */
    const rect = target.getBoundingClientRect();
    /** 当前自定义颜色值,默认是白色透明 */
    const color = target.getAttribute("ripple") || "rgba(255, 255, 255, .45)";
    console.log("target.getAttribute",target.getAttribute("ripple"));
    console.log("color",color);

    /** 波纹大小 */
    let size = Math.max(rect.width, rect.height);
    // 设置最大范围
    if (size > 200) size = 200;
    // 设置大小
    node.style.height = node.style.width = size + "px";
    // 设置波纹颜色
    node.style.backgroundColor = color;
    // 这里必须输出节点后再设置位置,不然会有问题
    target.appendChild(node);

    const y = event.touches ? event.touches[0].clientY : event.clientY;
    const x = event.touches ? event.touches[0].clientX : event.clientX;
    const top = y - rect.top - (node.offsetHeight / 2);
    const left = x - rect.left - (node.offsetWidth / 2);
    // console.log(top, left);
    node.style.top = top + "px";
    node.style.left = left + "px";

    function end() {
      node.removeEventListener("animationend", end);
      // console.log("动画结束", node);
      target.removeChild(node);
      ripplePool.push(node);
    }
    node.addEventListener("animationend", end);
  }

  • 增加自定义指令
  Vue.directive("ripple", {
    inserted(el, binding) {
      el.setAttribute("ripple", binding.value);
      el.addEventListener(eventType, function (e) {
        ripple(e, el);
      });
    }
  })


This content originally appeared on DEV Community and was authored by kh lemon


Print Share Comment Cite Upload Translate Updates
APA MLA
" » vue 通过自定义命令 给项目按钮增加水波纹效果." kh lemon | Sciencx - Friday September 20, 2024, https://www.scien.cx/2024/09/20/vue-%e9%80%9a%e8%bf%87%e8%87%aa%e5%ae%9a%e4%b9%89%e5%91%bd%e4%bb%a4-%e7%bb%99%e9%a1%b9%e7%9b%ae%e6%8c%89%e9%92%ae%e5%a2%9e%e5%8a%a0%e6%b0%b4%e6%b3%a2%e7%ba%b9%e6%95%88%e6%9e%9c/
HARVARD
kh lemon | Sciencx Friday September 20, 2024 » vue 通过自定义命令 给项目按钮增加水波纹效果., viewed ,<https://www.scien.cx/2024/09/20/vue-%e9%80%9a%e8%bf%87%e8%87%aa%e5%ae%9a%e4%b9%89%e5%91%bd%e4%bb%a4-%e7%bb%99%e9%a1%b9%e7%9b%ae%e6%8c%89%e9%92%ae%e5%a2%9e%e5%8a%a0%e6%b0%b4%e6%b3%a2%e7%ba%b9%e6%95%88%e6%9e%9c/>
VANCOUVER
kh lemon | Sciencx - » vue 通过自定义命令 给项目按钮增加水波纹效果. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/09/20/vue-%e9%80%9a%e8%bf%87%e8%87%aa%e5%ae%9a%e4%b9%89%e5%91%bd%e4%bb%a4-%e7%bb%99%e9%a1%b9%e7%9b%ae%e6%8c%89%e9%92%ae%e5%a2%9e%e5%8a%a0%e6%b0%b4%e6%b3%a2%e7%ba%b9%e6%95%88%e6%9e%9c/
CHICAGO
" » vue 通过自定义命令 给项目按钮增加水波纹效果." kh lemon | Sciencx - Accessed . https://www.scien.cx/2024/09/20/vue-%e9%80%9a%e8%bf%87%e8%87%aa%e5%ae%9a%e4%b9%89%e5%91%bd%e4%bb%a4-%e7%bb%99%e9%a1%b9%e7%9b%ae%e6%8c%89%e9%92%ae%e5%a2%9e%e5%8a%a0%e6%b0%b4%e6%b3%a2%e7%ba%b9%e6%95%88%e6%9e%9c/
IEEE
" » vue 通过自定义命令 给项目按钮增加水波纹效果." kh lemon | Sciencx [Online]. Available: https://www.scien.cx/2024/09/20/vue-%e9%80%9a%e8%bf%87%e8%87%aa%e5%ae%9a%e4%b9%89%e5%91%bd%e4%bb%a4-%e7%bb%99%e9%a1%b9%e7%9b%ae%e6%8c%89%e9%92%ae%e5%a2%9e%e5%8a%a0%e6%b0%b4%e6%b3%a2%e7%ba%b9%e6%95%88%e6%9e%9c/. [Accessed: ]
rf:citation
» vue 通过自定义命令 给项目按钮增加水波纹效果 | kh lemon | Sciencx | https://www.scien.cx/2024/09/20/vue-%e9%80%9a%e8%bf%87%e8%87%aa%e5%ae%9a%e4%b9%89%e5%91%bd%e4%bb%a4-%e7%bb%99%e9%a1%b9%e7%9b%ae%e6%8c%89%e9%92%ae%e5%a2%9e%e5%8a%a0%e6%b0%b4%e6%b3%a2%e7%ba%b9%e6%95%88%e6%9e%9c/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.