{"version":3,"file":"ripple.mjs","sources":["../../../../../src/utils/directives/ripple.ts"],"sourcesContent":["/**\r\n * 创建 transform\r\n *\r\n * el: HTMLElement, value: string\r\n */\r\nfunction transform(el: HTMLElement, value: string) {\r\n  el.style['transform'] = value;\r\n  el.style['webkitTransform'] = value;\r\n}\r\n\r\n/**\r\n * 创建 opacity\r\n *\r\n * el: HTMLElement, value: number\r\n */\r\nfunction opacity(el: HTMLElement, value: number) {\r\n  el.style['opacity'] = value.toString();\r\n}\r\n\r\n/**\r\n * 是否有 touch 事件\r\n */\r\nfunction isTouchEvent(e) {\r\n  return e.constructor.name === 'TouchEvent';\r\n}\r\n\r\nfunction isRippleEnabled(value) {\r\n  return typeof value === 'undefined' || !!value;\r\n}\r\n\r\n/**\r\n * 涟漪显示\r\n *\r\n * e: MouseEvent | TouchEvent\r\n */\r\nfunction rippleShow(e) {\r\n  const value = {\r\n    center: false,\r\n    class: {},\r\n  };\r\n\r\n  const element = e.currentTarget;\r\n\r\n  if (!element || !element._ripple || element._ripple.touched) {\r\n    return;\r\n  }\r\n\r\n  // 判断是否是手指触摸\r\n  if (isTouchEvent(e)) {\r\n    element._ripple.touched = true;\r\n  }\r\n\r\n  // 是否居中\r\n  value.center = element._ripple.centered;\r\n\r\n  if (element._ripple.class) {\r\n    value.class = element._ripple.class;\r\n  }\r\n\r\n  ripple.show(e, element, value);\r\n}\r\n\r\n/**\r\n * 涟漪隐藏\r\n *\r\n * e: Event\r\n */\r\nfunction rippleHide(e) {\r\n  const element = e.currentTarget;\r\n  if (!element) {\r\n    return;\r\n  }\r\n\r\n  window.setTimeout(() => {\r\n    if (element._ripple) {\r\n      element._ripple.touched = false;\r\n    }\r\n  });\r\n\r\n  ripple.hide(element);\r\n}\r\n\r\n/**\r\n * 获取点击的位置\r\n *\r\n * e: MouseEvent | TouchEvent, el: HTMLElement, value: RippleOptions = {}\r\n */\r\nconst calculate = (e, el, value) => {\r\n  // 元素的大小及其相对于视口的位置。\r\n  const offset = el.getBoundingClientRect();\r\n  const target = isTouchEvent(e) ? e.touches[e.touches.length - 1] : e;\r\n  const localX = target.clientX - offset.left;\r\n  const localY = target.clientY - offset.top;\r\n\r\n  let radius = 0;\r\n  let scale = 0.3;\r\n\r\n  // 计算圆形大小\r\n  if (el._ripple && el._ripple.circle) {\r\n    scale = 0.15;\r\n    radius = el.clientWidth / 2;\r\n    radius = value.center\r\n      ? radius\r\n      : radius + Math.sqrt((localX - radius) ** 2 + (localY - radius) ** 2) / 4;\r\n  } else {\r\n    radius = Math.sqrt(el.clientWidth ** 2 + el.clientHeight ** 2) / 2;\r\n  }\r\n\r\n  const centerX = `${(el.clientWidth - radius * 2) / 2}px`;\r\n  const centerY = `${(el.clientHeight - radius * 2) / 2}px`;\r\n\r\n  const x = value.center ? centerX : `${localX - radius}px`;\r\n  const y = value.center ? centerY : `${localY - radius}px`;\r\n\r\n  return { radius, scale, x, y, centerX, centerY };\r\n};\r\n\r\n/**\r\n * 涟漪元素\r\n */\r\nconst ripple = {\r\n  /* eslint-disable max-statements */\r\n  // e: MouseEvent | TouchEvent, el: HTMLElement, value: RippleOptions = {}\r\n  show(e, el, value) {\r\n    if (!el._ripple || !el._ripple.enabled) {\r\n      return;\r\n    }\r\n\r\n    // 内容\r\n    const container = document.createElement('span');\r\n    // 动画\r\n    const animation = document.createElement('span');\r\n\r\n    // 添加节点\r\n    container.appendChild(animation);\r\n    container.className = 'ivue-ripple';\r\n\r\n    if (value.class && typeof value.class === 'string') {\r\n      container.className += ` ${value.class}`;\r\n    }\r\n\r\n    // 获取点击位置\r\n    const { radius, scale, x, y, centerX, centerY } = calculate(e, el, value);\r\n\r\n    const size = `${radius * 2}px`;\r\n\r\n    animation.className = 'ivue-ripple-wave';\r\n    animation.style.width = size;\r\n    animation.style.height = size;\r\n\r\n    el.appendChild(container);\r\n\r\n    // 获取节点 style 样式\r\n    const computed = window.getComputedStyle(el);\r\n\r\n    // 强制把父节点 position 设置为 relative\r\n    if (computed && computed.position === 'static') {\r\n      el.style.position = 'relative';\r\n      el.dataset.previousPosition = 'static';\r\n    }\r\n\r\n    animation.classList.add('ivue-ripple-wave-enter');\r\n    animation.classList.add('ivue-ripple-wave-visible');\r\n\r\n    transform(\r\n      animation,\r\n      `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`\r\n    );\r\n    opacity(animation, 0);\r\n\r\n    // performance 记录性能\r\n    animation.dataset.activated = String(performance.now());\r\n\r\n    setTimeout(() => {\r\n      animation.classList.remove('ivue-ripple-wave--enter');\r\n      // 添加动画\r\n      animation.classList.add('ivue-ripple-wave--in');\r\n      transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);\r\n      opacity(animation, 0.25);\r\n    }, 0);\r\n  },\r\n  // 隐藏\r\n  hide(el) {\r\n    if (!el || !el._ripple || !el._ripple.enabled) {\r\n      return;\r\n    }\r\n\r\n    const ripples = el.getElementsByClassName('ivue-ripple-wave');\r\n\r\n    if (ripples.length === 0) {\r\n      return;\r\n    }\r\n\r\n    const animation = ripples[ripples.length - 1];\r\n\r\n    if (animation.dataset.isHiding) {\r\n      return;\r\n    } else {\r\n      animation.dataset.isHiding = 'true';\r\n    }\r\n\r\n    // 从显示到消失的时间\r\n    const diff = performance.now() - Number(animation.dataset.activated);\r\n    const delay = Math.max(250 - diff, 0);\r\n\r\n    setTimeout(() => {\r\n      // 结束动画\r\n      animation.classList.remove('ivue-ripple-wave--in');\r\n      animation.classList.add('ivue-ripple-wave--on');\r\n      opacity(animation, 0);\r\n\r\n      // 3ms 后删除节点\r\n      setTimeout(() => {\r\n        const ripples = el.getElementsByClassName('ivue-ripple-wave');\r\n\r\n        if (ripples.length === 1 && el.dataset.previousPosition) {\r\n          el.style.position = el.dataset.previousPosition;\r\n          delete el.dataset.previousPosition;\r\n        }\r\n\r\n        animation.parentNode && el.removeChild(animation.parentNode);\r\n      }, 300);\r\n    }, delay);\r\n  },\r\n};\r\n\r\n// 更新涟漪效果\r\nfunction updateRipple(el, binding, wasEnabled) {\r\n  // 是否开启效果\r\n  // value 指令的绑定值，例如：v-my-directive=\"1 + 1\" 中，绑定值为 2\r\n  const enabled = isRippleEnabled(binding.value);\r\n\r\n  if (!enabled) {\r\n    // 删除节点\r\n    ripple.hide(el);\r\n  }\r\n\r\n  el._ripple = el._ripple || {};\r\n  el._ripple.enabled = enabled;\r\n\r\n  const value = binding.value || {};\r\n\r\n  // 设置各种属性\r\n  if (value.center) {\r\n    el._ripple.centered = true;\r\n  }\r\n\r\n  if (value.class) {\r\n    el._ripple.class = binding.value.class;\r\n  }\r\n\r\n  if (value.circle) {\r\n    el._ripple.circle = value.circle;\r\n  }\r\n\r\n  // 注册触发事件\r\n  if (enabled && !wasEnabled) {\r\n    el.addEventListener('touchstart', rippleShow, { passive: true });\r\n    el.addEventListener('touchend', rippleHide, { passive: true });\r\n    el.addEventListener('touchcancel', rippleHide);\r\n\r\n    el.addEventListener('mousedown', rippleShow);\r\n    el.addEventListener('mouseup', rippleHide);\r\n    el.addEventListener('mouseleave', rippleHide);\r\n\r\n    // Anchor tags can be dragged, causes other hides to fail\r\n    el.addEventListener('dragstart', rippleHide, { passive: true });\r\n  }\r\n  // 删除事件\r\n  else if (!enabled && wasEnabled) {\r\n    removeListeners(el);\r\n  }\r\n}\r\n\r\n/**\r\n * 删除事件\r\n *\r\n * el: HTMLElement\r\n */\r\nfunction removeListeners(el) {\r\n  el.removeEventListener('mousedown', rippleShow);\r\n  el.removeEventListener('touchstart', rippleHide);\r\n  el.removeEventListener('touchend', rippleHide);\r\n  el.removeEventListener('touchcancel', rippleHide);\r\n  el.removeEventListener('mouseup', rippleHide);\r\n  el.removeEventListener('mouseleave', rippleHide);\r\n  el.removeEventListener('dragstart', rippleHide);\r\n}\r\n\r\n// 只调用一次，指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。\r\nfunction directive(\r\n  el: Element,\r\n  binding: Record<string, any>,\r\n  node: Record<string, any>\r\n): void {\r\n  updateRipple(el, binding, false);\r\n\r\n  // warn if an inline element is used, waiting for el to be in the DOM first\r\n  node.context &&\r\n    node.context.$nextTick(() => {\r\n      const computed = window.getComputedStyle(el);\r\n\r\n      if (computed && computed.display === 'inline') {\r\n        const context = node.fnOptions\r\n          ? [node.fnOptions, node.context]\r\n          : [node.componentInstance];\r\n\r\n        // eslint-disable-next-line no-console\r\n        console.warn(\r\n          'v-ripple can only be used on block-level elements',\r\n          ...context\r\n        );\r\n      }\r\n    });\r\n}\r\n\r\n/**\r\n * 指令与元素解绑时调用\r\n *\r\n * el: HTMLElement\r\n */\r\nfunction unmounted(el: Record<string, any>): void {\r\n  delete el._ripple;\r\n\r\n  removeListeners(el);\r\n}\r\n\r\n/**\r\n * 所在组件的 VNode 更新时调用\r\n *\r\n * el: HTMLElement, binding: VNodeDirective\r\n */\r\nfunction updated(el: Record<string, any>, binding: Record<string, any>): void {\r\n  if (binding.value === binding.oldValue) {\r\n    return;\r\n  }\r\n\r\n  const wasEnabled = isRippleEnabled(binding.oldValue);\r\n  updateRipple(el, binding, wasEnabled);\r\n}\r\n\r\nexport default {\r\n  beforeMount: directive,\r\n  unmounted,\r\n  updated,\r\n};\r\n"],"names":["ripples"],"mappings":"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"}