当前位置:   article > 正文

使用Vue实现点击页面触发特效

使用Vue实现点击页面触发特效

 效果描述 

在页面上的指定区域内进行点击,则会在页面上显示设置好的随机文本,此文本出现后会执行动画,动画效果为节点在1s之内向右上方移动并在移动的过程中完成180°翻转,最后消失。

效果展示

完整代码

  1. <template>
  2. <div ref="container" class="box" @click="handleRandom">
  3. <span
  4. :key="childKey"
  5. ref="child"
  6. :style="{ color: colorRandom(), left: childLeft, top: childTop }"
  7. class="minbox"
  8. >
  9. {{ msg }}
  10. </span>
  11. </div>
  12. </template>
  13. <script setup>
  14. import { ref } from "vue";
  15. const container = ref(null);
  16. const child = ref(null); // 鼠标点击后,在页面展示文本的节点
  17. const childKey = ref(0); // 每次点击后,改变key以触发Vue重新渲染span
  18. // 生成随机颜色
  19. const colorRandom = () => {
  20. let color;
  21. do {
  22. const r = Math.floor(Math.random() * 256);
  23. const g = Math.floor(Math.random() * 256);
  24. const b = Math.floor(Math.random() * 256);
  25. color = `rgb(${r},${g},${b})`;
  26. } while (color === "rgb(250,235,215)"); // 检查颜色是否是我们不想要的
  27. return color;
  28. };
  29. const textArr = [
  30. "( ^∀^)",
  31. "富强",
  32. "Σ(゚д゚;)",
  33. "民主",
  34. "(⊙o⊙)",
  35. "文明",
  36. "✈",
  37. "和谐",
  38. "☯",
  39. "自由",
  40. "☠",
  41. "平等",
  42. "〠",
  43. "公正",
  44. "❤",
  45. "法治",
  46. "爱国",
  47. "★",
  48. "敬业",
  49. "诚信",
  50. "友善",
  51. ];
  52. // 生成随机数
  53. const randomInd = () => {
  54. return Math.floor(Math.random() * textArr.length);
  55. };
  56. const msg = ref(null); //在页面展示的文本
  57. const childLeft = ref(0);
  58. const childTop = ref(0);
  59. // 鼠标点击事件
  60. const handleRandom = (e) => {
  61. childLeft.value = e.clientX + "px";
  62. childTop.value = e.clientY + "px";
  63. msg.value = textArr[randomInd()];
  64. // 在每次点击后,改变key以触发Vue重新渲染span
  65. childKey.value++;
  66. };
  67. </script>
  68. <style lang="scss" scoped>
  69. .box {
  70. width: 500px;
  71. height: 300px;
  72. cursor: pointer;
  73. background-color: rgb(250, 235, 215);
  74. .minbox {
  75. width: fit-content;
  76. position: absolute;
  77. animation: moveAndFadeout 1s ease-in-out forwards;
  78. }
  79. // 移动和、淡出以及翻转动画
  80. @keyframes moveAndFadeout {
  81. 0% {
  82. transform: translate(0, 0) scale(1) rotate(0deg);
  83. opacit: 1;
  84. }
  85. 100% {
  86. transform: translate(20px, -80px) rotate(180deg) scale(2);
  87. opacity: 0;
  88. }
  89. }
  90. }
  91. </style>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/873328
推荐阅读
相关标签
  

闽ICP备14008679号