首页 > 其他分享 >点击后鼠标所在的地方出现字符

点击后鼠标所在的地方出现字符

时间:2024-03-02 23:44:22浏览次数:16  
标签:字符 const 鼠标 value texts 点击 文本

用户点击页面上的任意一处地方后,在鼠标指针处出现字符!
image

代码部分

HTML
<div class='section' @click='showInteresting($event)'>
    <transition-group name='fade' tag='div'>
      <div v-for='(item) in texts' :key='item.key' :style='item.style' class='floating-text'>
        {{ item.content }}
      </div>
    </transition-group>
</div>
TS
//  按键出现浮动字符实现
/**
 * 随机颜色数组
 */
const colors = [
  '#E63946',
  '#F1C40F',
  '#2ECC71',
];
/**
 * 随机文本数组
 */
const InterestingText = [
  '你好',
  'awa',
  'QAQ',
  ':(',
  ':)',
  '⭐',
  'Vue3',
  'Pinia',
  'Axios',
  'JAVA',
  'HTML',
  'CSS',
  'JS',
];

let id = 0;  //  每次出现字符的唯一索引
const texts = ref<any[]>([]);  //  被展示的文本存储处

//  防止短时间内大量点击可能导致的问题
watch(() => texts.value.length, (newVal) => {
  if (newVal >= 99999) {
    texts.value = [];
    id = 0;
  }
});
/**
 * 点击鼠标后在鼠标出出现字符
 * @param $event  接受一个鼠标时间(用于定位鼠标位置)
 */
const showInteresting = ($event: MouseEvent) => {
  const randomText = InterestingText[Math.floor(Math.random() * InterestingText.length)];  //  抽取本次展示的文本
  const posX = $event.clientX + 'px';  //  点击时鼠标所在的X轴位置
  const posY = $event.clientY + 'px';  //  点击时鼠标所在的Y轴位置
  const newTextKey = id++; // 为本次文本生成一个唯一的索引
  const randomColor = colors[Math.floor(Math.random() * colors.length)];	//	抽取本次出现文本的颜色

  // 添加新文本到texts数组用以展示
  texts.value.push({
    content: randomText,
    style: {
      left: posX,
      top: posY,
      overflow: 'hidden', // 防止在边缘点击时撑开页面
      cursor: 'default', // 不导致鼠标样式改变
      userSelect: 'none', // 防止被用户选中
      color: randomColor,
    },
    key: newTextKey,
  });

  // 设置定时器,动画结束后移除文本,防止数组过大
  setTimeout(() => {
    texts.value = texts.value.filter(text => text.key !== newTextKey);
  }, 1000); // 这里的1000应与CSS动画时长一致
};
CSS部分
.floating-text {
    z-index: 9999; // 保证文本在所有元素上出现
    font-size: 16px;
    font-weight: bold;
    position: fix; // 防止出现滚动后定位不准确
    animation: floatUp 1s ease forwards; // 文本上浮动画,1s是持续时间
  }

  // 动画部分
  @keyframes floatUp {
    0% {
      transform: translateY(0);
      opacity: 1;
    }
    100% {
      transform: translateY(-50px); // 向上移动的距离
      opacity: 0;
    }
  }

  .fade-enter-active, .fade-leave-active {
    transition: opacity 0.5s;
  }

  .fade-enter, .fade-leave-to {
    opacity: 0;
  }

标签:字符,const,鼠标,value,texts,点击,文本
From: https://www.cnblogs.com/MorningMaple/p/18049474

相关文章

  • 【XInput】手柄模拟鼠标运作之 .NET P/Invoke 和 UWP-API 方案
    上一篇中,老周简单肤浅地介绍了XInputAPI的使用,并模拟了鼠标移动,左、右键单击和滚轮。本篇,咱们用.NET代码来完成相同的效果。说起来也是倒霉,博文写了一半,电脑忽然断电了。不知道什么原因,可能是UPS电源出故障。重新开机进来一看,博文没有自动保存到草稿箱。我记得以前是有自......
  • 字符串前面的u,r,b,f的意义
    ###字符串前面加上4个字母u,r,b,f的含义#加u后面字符串以Unicode格式进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。#加r去掉反斜杠的转移机制。#加bb""前缀表示:后面字符串是bytes类型。#加f以f开头表示在......
  • day 05-2 数据类型(字符串)
    3.字符串字符串,我们平时会用他来表示文本信息。例如:姓名、地址、自我介绍等。3.1定义v1="包治百病"v2='包治百病'v3='"包"治百病'v4="包'治百病'"V5="""吵架都是我的错,因为大家打不过。"""#三个引号,可以支持多行/换行表示一个字符串,其他的都只能在一行中表......
  • 解决Puppeteersharp 被检测到的方法, 顺带学习了js如何实现 模拟点击拖动事件
    varlaunchOptions=newLaunchOptions{Headless=false,DefaultViewport=null,IgnoreHTTPSErrors=true,ExecutablePath=path+"\\.local-chromium\\chrome-win\\chr......
  • 代码随想录算法训练营day11 | leetcode 20. 有效的括号、1047. 删除字符串中的所有相
    目录题目链接:20.有效的括号-简单题目链接:1047.删除字符串中的所有相邻重复项-简单题目链接:150.逆波兰表达式求值-中等题目链接:20.有效的括号-简单题目描述:给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右......
  • Delphi和C的类比:指针、字符串、函数指针、内存分配等
    在学习Delphi的时候,一个很好的建议是和C/C++去类比着学习,从指针,到内存管理,到数组,到面向对象……各个方面,都是有很多可以相似和或者也有不同的方,类比着学习,一方面加深对Delphi的理解,一方面加深对C/C++的理解,一方面加深对计算机系统的理解,一方面加深对面向对象的理解……由1向多可以......
  • web自动化——Selenium 之鼠标操作和按键操作
    一、鼠标操作鼠标是通过使用底层接口执行的,需要调用ActionChains对象来执行对应的方法1、导入ActionChains类包fromselenium.webdriver.common.action_chainsimportActionChains2、ActionChains提供的鼠标操作方法1)clickAndHold它将移动到该元素,然后在给定元素的中......
  • 代码随想录 第九天 | 烤馍片(kmp)算法 ●28. 实现 strStr() ●459.重复的子字符串
    烤馍片算法(kmp):为了不让遍历的指针回退,每次不相等的时候找不相等之前的字符串的最长相等前后缀。i表示目标字符串,j表示需要在目标找到的字符串的指针。最长相等前后缀的长度就是之前有多少个与needle字符串相同,直接将j跳到上一元素位置记录的最长相等前后缀长度(next数组),这样i就可以......
  • Q:xml 需要转义的字符
    XML实体中不允许出现"&","<",">"等特殊字符,否则XML语法检查时将出错,如果编写的XML文件必须包含这些字符,则必须分别写成"&amp;","<",">"再写入文件中。在读取的时候,解析器会自动将其转换回"&","<",">"等特殊字符,正常来说,只有&qu......
  • $\text{20240301}$ 字符串练习题解
    \(\text{20240301}\)字符串练习题解一定要写冬令营的题吗?遗憾的。P9717给了一个\(n\)个数的首尾相接的字符串,求若干个操作后能形成的不同的字符串大小。一次操作定义为:将字符串内所有的\(\text{01}\)同时改成\(\text{10}\),如图。通过这张图我们似乎发现了一个规律,这......