创建vue3数学符号选择器(vue3+elementPlus+ts)

 本文包含两种效果:

  •   效果一:数学符号只能选择一次,选中的数学符号高亮
  •   效果二:相同的数学符号可以选择多次,当前选中的数学符号高亮

 

 首先创建math.ts定义常见数学符号数组 :

export const symbols = [
  { id: 1, value: '+', description: '加号' },
  { id: 2, value: '-', description: '减号' },
  { id: 3, value: '×', description: '乘号' },
  { id: 4, value: '÷', description: '除号' },
  { id: 5, value: '=', description: '等号' },
  { id: 6, value: '≠', description: '不等号' },
  { id: 7, value: '<', description: '小于号' },
  { id: 8, value: '>', description: '大于号' },
  { id: 9, value: '≤', description: '小于等于号' },
  { id: 10, value: '≥', description: '大于等于号' },
  { id: 11, value: '∑', description: '求和符号' },
  { id: 12, value: '∫', description: '积分符号' },
  { id: 13, value: '√', description: '平方根符号' },
  { id: 14, value: '∠', description: '角度符号' },
  { id: 15, value: '°', description: '度符号' },
  { id: 16, value: 'π', description: '圆周率' },
  { id: 17, value: '∞', description: '无穷大符号' },
  { id: 18, value: '≈', description: '约等于号' },
  { id: 19, value: '∝', description: '成比例符号' },
  { id: 20, value: '∴', description: '因此符号' },
  { id: 21, value: '∵', description: '由此推出符号' },
  { id: 22, value: '∀', description: '全称量词' },
  { id: 23, value: '∃', description: '存在量词' },
  { id: 24, value: '∈', description: '属于符号' },
  { id: 25, value: '∉', description: '不属于符号' },
  { id: 26, value: '∩', description: '交集符号' },
  { id: 27, value: '∪', description: '并集符号' },
  { id: 28, value: '⊂', description: '真子集符号' },
  { id: 29, value: '⊆', description: '子集或等于符号' },
  { id: 30, value: '⊄', description: '非子集符号' },
  { id: 31, value: '⊃', description: '真包含符号' },
  { id: 32, value: '⊇', description: '包含或等于符号' },
  { id: 33, value: '⊅', description: '非包含符号' },
  { id: 34, value: '∑', description: '求和符号' },
  { id: 35, value: '∏', description: '乘积符号' },
  { id: 36, value: '∂', description: '偏导符号' },
  { id: 37, value: '∆', description: '增量符号' },
  { id: 38, value: '∇', description: '梯度符号' },
  { id: 39, value: '∫', description: '积分符号' },
  { id: 40, value: '∮', description: '曲线积分符号' },
  { id: 41, value: '∬', description: '面积积分符号' },
  { id: 42, value: '∭', description: '体积积分符号' },
  { id: 43, value: '∀', description: '普遍量词符号' },
  { id: 44, value: '∈', description: '属于符号' },
  { id: 45, value: '∉', description: '不属于符号' },
  { id: 46, value: '∋', description: '包含符号' },
  { id: 47, value: '∌', description: '不包含符号' },
  { id: 48, value: '∩', description: '交集符号' },
  { id: 49, value: '∪', description: '并集符号' },
  { id: 50, value: '⊂', description: '真子集符号' },
  { id: 51, value: '⊃', description: '真包含符号' },
  { id: 52, value: '⊆', description: '子集或等于符号' },
  { id: 53, value: '⊇', description: '包含或等于符号' },
  { id: 54, value: '⊄', description: '非子集符号' },
  { id: 55, value: '⊅', description: '非包含符号' },
  { id: 56, value: '⊈', description: '真非子集符号' },
  { id: 57, value: '⊉', description: '真非包含符号' },
  { id: 58, value: '⊕', description: '异或符号' },
  { id: 59, value: '⊖', description: '减法环符号' },
  { id: 60, value: '⊗', description: '张量积符号' },
  { id: 61, value: '⊙', description: '哈达玛积符号' },
  { id: 62, value: '⊢', description: '右推出符号' },
  { id: 63, value: '⊣', description: '左推出符号' },
  { id: 64, value: '⊤', description: '真值符号' },
  { id: 65, value: '⊥', description: '垂直符号' },
  { id: 66, value: '⋅', description: '点乘符号' },
  { id: 67, value: '⋆', description: '星号符号' },
  { id: 68, value: '⋮', description: '连续省略号符号' },
  { id: 69, value: '⋯', description: '中间省略号符号' },
  { id: 70, value: '⋰', description: '上斜省略号符号' },
  { id: 71, value: '⋱', description: '下斜省略号符号' },
  { id: 72, value: 'ℕ', description: '自然数集符号' },
  { id: 73, value: 'ℤ', description: '整数集符号' },
  { id: 74, value: 'ℚ', description: '有理数集符号' },
  { id: 75, value: 'ℝ', description: '实数集符号' },
  { id: 76, value: 'ℂ', description: '复数集符号' },
  { id: 77, value: 'ℵ', description: '纤维符号' },
  { id: 78, value: 'ℶ', description: '纤维符号' },
  { id: 79, value: 'ℷ', description: '纤维符号' },
  { id: 80, value: 'ℸ', description: '纤维符号' },
  { id: 81, value: '℘', description: '幂集符号' },
  { id: 82, value: 'ℑ', description: '虚部符号' },
  { id: 83, value: 'ℜ', description: '实部符号' },
  { id: 84, value: '℠', description: '商标符号' },
  { id: 85, value: '™', description: '商标符号' },
  { id: 86, value: '∅', description: '空集符号' },
  {
    id: 87,
    value: '∈',
    description: '属于符号',
  },
  {
    id: 88,
    value: '∉',
    description: '不属于符号',
  },
  {
    id: 89,
    value: '∋',
    description: '包含符号',
  },
  {
    id: 90,
    value: '∌',
    description: '不包含符号',
  },
  {
    id: 91,
    value: '⊂',
    description: '真子集符号',
  },
  {
    id: 92,
    value: '⊃',
    description: '真包含符号',
  },
  {
    id: 93,
    value: '⊆',
    description: '子集或等于符号',
  },
  {
    id: 94,
    value: '⊇',
    description: '包含或等于符号',
  },
  {
    id: 95,
    value: '⊄',
    description: '非子集符号',
  },
  {
    id: 96,
    value: '⊅',
    description: '非包含符号',
  },
  {
    id: 97,
    value: '⊈',
    description: '真非子集符号',
  },
  {
    id: 98,
    value: '⊉',
    description: '真非包含符号',
  },
  {
    id: 99,
    value: '⊕',
    description: '异或符号',
  },
  {
    id: 100,
    value: '⊖',
    description: '减法环符号',
  },
  {
    id: 101,
    value: '⊗',
    description: '张量积符号',
  },
  {
    id: 102,
    value: '⊙',
    description: '哈达玛积符号',
  },
  {
    id: 103,
    value: '⊢',
    description: '右推出符号',
  },
  {
    id: 104,
    value: '⊣',
    description: '左推出符号',
  },
  {
    id: 105,
    value: '⊤',
    description: '真值符号',
  },
  {
    id: 106,
    value: '⊥',
    description: '垂直符号',
  },
  {
    id: 107,
    value: '⋅',
    description: '点乘符号',
  },
  {
    id: 108,
    value: '⋆',
    description: '星号符号',
  },
  {
    id: 109,
    value: '⋮',
    description: '连续省略号符号',
  },
  {
    id: 110,
    value: '⋯',
    description: '中间省略号符号',
  },
  {
    id: 111,
    value: '⋰',
    description: '上斜省略号符号',
  },
  {
    id: 112,
    value: '⋱',
    description: '下斜省略号符号',
  },
  {
    id: 113,
    value: 'ℕ',
    description: '自然数集符号',
  },
  {
    id: 114,
    value: 'ℤ',
    description: '整数集符号',
  },
  {
    id: 115,
    value: 'ℚ',
    description: '有理数集符号',
  },
  {
    id: 116,
    value: 'ℝ',
    description: '实数集符号',
  },
  {
    id: 117,
    value: 'ℂ',
    description: '复数集符号',
  },
]

 

效果一: 

效果图: 

html区域:

<template>
  <div>
    <el-popover placement="bottom" width="200px" v-model:visible="symbolSelectorVisible" trigger="click">
      <div class="symbol-selector flex flex-start flex-wrap h-300 overflow-y-auto">
        <div
          v-for="symbol in symbolsWithSelection"
          :key="symbol.id"
          :class="['symbol-item w-30 text-center cursor-pointer m-4 p-4', { 'symbol-item-active': symbol.isSelected }]"
          @click="selectSymbol(symbol)"
        >
          {{ symbol.value }}
        
        </div>
      </div>
      <template #reference>
        <el-button type="primary" @click="showSymbolSelector">选择数学符号</el-button>
      </template>
    </el-popover>
    <div class="selected-symbol">
      <span v-for="item in selectedSymbols">{{ item.value }},</span>
    </div>
  </div>
</template>

 ts区域:

<script setup lang="ts">
import { ref } from 'vue'
import { symbols } from '@/views/math/math.ts'
const symbolsWithSelection = ref(symbols.map(symbol => ({
  ...symbol,
  isSelected: false//为每一条数学符号对象添加被选选中的属性,默认为全被未选中
})))

const symbolSelectorVisible = ref(false)
const selectedSymbols: any = ref([])//被选中的数学符号对象

const showSymbolSelector = () => {
  symbolSelectorVisible.value = true
}

const selectSymbol = (symbol:any) => {
  const index = selectedSymbols.value.findIndex((item:any) => item.id === symbol.id);
  if (index !== -1) {
    selectedSymbols.value.splice(index, 1); // 从数组中删除符号
  } else {
    selectedSymbols.value.push(symbol); // 将符号添加到数组中
  };

  console.log(selectedSymbols.value, '选择的数学符号');
  symbolsWithSelection.value.forEach(item => {
    if (item.id === symbol.id) {
      item.isSelected = !item.isSelected; // 切换 isSelected 属性的值
    } 
    // else {
    //   item.isSelected = false; // 将其他符号的 isSelected 属性设置为 false
    // }
  });
};

</script>

 scss区域:

<style lang="scss">
.symbol-selector {
}

.symbol-item {
  border: 1px solid #ccc;
  border-radius: 4px;
  &-active {
    background-color: #fcbd01;
  }
}

.selected-symbol {
  display: inline-block;
  cursor: pointer;
  padding: 8px;
  border: 1px solid #ccc;
  border-radius: 4px;
  width: 500px;
  height: 40px;
}
</style>

效果二(添加了隐藏选择器时,取消选择器中的高亮元素)

效果图:

 

html区域:

<template>
  <div>
    <el-popover placement="bottom" width="200px" v-model:visible="symbolSelectorVisible" trigger="click"  @hide="hideSymbolSelector">
      <div class="symbol-selector flex flex-start flex-wrap h-300 overflow-y-auto">
        <div
          v-for="symbol in symbolsWithSelection"
          :key="symbol.id"
          :class="['symbol-item w-30 text-center cursor-pointer m-4 p-4', { 'symbol-item-active': activeSymbol==symbol.value }]"
          @click="selectSymbol(symbol)"
        >
          {{ symbol.value }}
        
        </div>
      </div>
      <template #reference>
        <el-button type="primary" @click="showSymbolSelector">选择数学符号</el-button>
      </template>
    </el-popover>
    <div class="selected-symbol">
      <span v-for="item in selectedSymbols">{{ item.value }},</span>
    </div>
  </div>
</template>

 ts区域:

<script setup lang="ts">
import { ref } from 'vue'
import { symbols } from '@/views/math/math.ts'
const symbolsWithSelection = ref(symbols)

const symbolSelectorVisible = ref(false)
const selectedSymbols: any = ref([])//被勾选的数字符号

const showSymbolSelector = () => {
  symbolSelectorVisible.value = true
}

const activeSymbol=ref('')//高亮symbol
const selectSymbol = (symbol:any) => {
  selectedSymbols.value.push(symbol); // 将符号添加到数组中
  activeSymbol.value=symbol.value
};
const hideSymbolSelector=()=>{
  activeSymbol.value=''
}

</script>

 scss区域(与效果一一致)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/220669.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构与算法-D2D3线性表之顺序表

线性表&#xff1a;包含若干数据元素的一个线性序列&#xff0c;特征如下&#xff1a; 1&#xff09;对非空表&#xff0c;a0是表头&#xff0c;无前驱&#xff1b; 2&#xff09;an-1是表尾&#xff0c;无后继&#xff1b; 3&#xff09;其他元素仅且仅有一个前驱&#xff0c;…

CSS面经(未完待续)

1. CSS选择器及其优先级 !important > 行内样式 > id选择器 > 类/伪类/属性选择器 > 标签/伪元素选择器 > 子/后台选择器 > *通配符 2. 重排和重绘是什么&#xff1f;浏览器的渲染机制是什么&#xff1f; 重排(回流)&#xff1a;当增加或删除dom节点&…

Centos7上安装Redis

第一步&#xff1a;安装Redis依赖 yum install -y gcc tcl //需要使用管理员权限第二步&#xff1a;下载上传安装包并解压 下载地址redis中文官网 上传成功后解压 输入tar -zxvf &#xff08;redis版本&#xff09;,即可解压成功 进入redis目录&#xff0c;运行编译命令&am…

人工智能学习3(特征变换:特征数值化)

编译工具&#xff1a;PyCharm 有些编译工具不用写print可以直接将数据打印出来&#xff0c;pycharm需要写print才会打印出来。 文章目录 编译工具&#xff1a;PyCharm 概念1.特征类型分类型二值型顺序型数值型 2.特征数值化练习13.特征数值化练习24.特征二值化使用sklearn库自…

信号是怎么搞到电磁波上面去的呢?

在之前的文章中&#xff0c;我们曾多次讲到电磁波的美妙&#xff0c;但是有了电磁波就可以通信了吗&#xff1f; No&#xff0c;我们要把信息加载到电磁波上&#xff0c;这个电磁波就可以作为信息的载体来工作了。可是信号是怎么加载到电磁波上的呢&#xff1f; 今天我们一起…

Javafx实现浏览器

浏览器是一种计算机程序&#xff0c;主要用于显示互联网上的网页。通过浏览器&#xff0c;用户可以访问各种网站、搜索引擎、在线应用程序、社交媒体等。常见的浏览器包括Google Chrome、Mozilla Firefox、Safari、Microsoft Edge、Opera等。浏览器的功能不仅限于浏览网页&…

无线网卡填坑记

没想到我安装无线网卡这么波澜起伏~ 起因 近来刚在电脑上玩完了 Dishonored 2&#xff0c;紧接着继续着我的刺客信条之旅。总是觉得键盘鼠标玩起来不爽&#xff0c;还是手柄玩这种游戏才舒服。突然&#xff0c;灵光一现&#xff0c;我想到正好有闲置的 Switch 掌机没怎么玩&am…

【代码随想录】算法训练计划39

dp 1、62. 不同路径 题目&#xff1a; 求路径方案多少个 思路&#xff1a; 这道题就有点dp了哈 func uniquePaths(m int, n int) int {//dp&#xff0c;写过,代表的是多少种// 初始化dp : make([][]int, m)for i : range dp {dp[i] make([]int, n)dp[i][0] 1 // 代表到…

【数据结构】图<简单认识图>

对于下面的内容&#xff0c;大家着重观察和理解图即可&#xff0c;可以直接绕过一些文字性的概念&#xff0c;对图有一个大概的认识。 图 简单认识图图的定义有向图和无向图完全图无向完全图有向完全图 图的基本存储结构邻接矩阵存储邻接矩阵的优点 网络的邻接矩阵邻接表无向图…

看懂lscpu的输出

文章目录 1. lscpu1.1 Architecture1.2 逻辑核心数1.3 缓存1.4 CPU型号1.5 NUMA架构1.5.1 CPU多核架构1.5.2 多CPU Socket架构 2. cat /proc/cpuinfo2.1 关键字段 1. lscpu 通过lscpu查看当前系统的CPU信息。 [hadoopserver3 ~]$ lscpuArchitecture: x86_64 …

混音编曲软件tudio One 6.5.1 保姆级安装教程

根据软件大数据显示De-Esser驯服人声嘶嘶声和其他高频声音&#xff0c;和其他 Studio One 中新的去实体插件一样高效且直观易用&#xff0c;使用“收听”按钮查找有问题的频率&#xff0c;然后使用相关的旋钮和 S-Mon 功能拨入 S-Reduce 量即可。实际上我们可以这样讲工作流和协…

Linux(15):SELinux 初探

什么是 SELinux SELinux 是【Security Enhanced Linux】的缩写&#xff0c;字面上的意义就是安全强化的 Linux。 SELinux 是由美国国家安全局(NSA)开发的&#xff0c;开发原因&#xff1a;因为很多企业界发现&#xff0c;通常系统出现问题的原因大部分都在于【内部员工的资源…

Redis的三种消息队列实现方式

目录 前言 List实现消息队列 PubSub消息队列 Stream消息队列 三种实现方式对比 前言 为什么要使用Redis的消息队列&#xff1f; 成本低&#xff0c;对于RabbitMQ或是Kafka来说&#xff0c;已经是重量级的消息队列。 Redis的三种实现方式&#xff1a; List结构&#xff1…

VSC改造MD编辑器及图床方案分享

VSC改造MD编辑器及图床方案分享 用了那么多md编辑器&#xff0c;到头来还是觉得VSC最好用。这次就来分享一下我的blog文件编辑流吧。 这篇文章包括&#xff1a;VSC下md功能扩展插件推荐、图床方案、blog文章管理方案 VSC插件 Markdown All in One Markdown Image - 粘粘图片…

在python的Scikit-learn库中,可以使用train_test_split函数来划分训练集和测试集。

文章目录 一、在Scikit-learn库中&#xff0c;可以使用train_test_split函数来划分训练集和测试集总结 一、在Scikit-learn库中&#xff0c;可以使用train_test_split函数来划分训练集和测试集 在Scikit-learn库中&#xff0c;可以使用train_test_split函数来划分训练集和测试…

【网络安全】红蓝对抗之企业互联网安全防护

01 什么是“红蓝对抗”&#xff1f; “红蓝对抗”最早起源于古罗马军队&#xff0c;在沙盘中用红色和蓝色来代表敌人和自己&#xff0c;他们认为蓝色代表勇敢和忠诚&#xff0c;红色代表血腥和暴力&#xff0c;所以选择用蓝色代表自己。 在中国&#xff0c;由于传统习俗与文化…

一、技术体系结构

本章概要 总体技术体系框架概念和理解 1.1 总体技术体系 单一架构一个项目&#xff0c;一个工程&#xff0c;导出为一个war包&#xff0c;在一个Tomcat上运行。也叫all in one。 单一架构&#xff0c;项目主要应用技术框架为&#xff1a;Spring , SpringMVC , Mybatis 分布…

Python如何传递任意数量的实参及什么是返回值

Python如何传递任意数量的实参 传递任意数量的实参 形参前加一个 * &#xff0c;Python会创建一个已形参为名的空元组&#xff0c;将所有收到的值都放到这个元组中&#xff1a; def make_pizza(*toppings):print("\nMaking a pizza with the following toppings: "…

【ArcGIS Pro】探索性插值无法覆盖所需shp范围

做个小记录自用&#xff0c;实际不准。 1 看看就行 pro插值 看看过程就行。有详细过程&#xff0c;类似tutorial https://learn.arcgis.com/zh-cn/projects/interpolate-temperatures-using-the-geostatistical-wizard/ 2 注意用投影坐标系 wgs84转投影坐标系 https://blog…

SR锁存器—>带EN的SR锁存器—>D锁存器—>边沿触发式D触发器—>寄存器

其实选择与非门当做构成SR锁存器的基本逻辑电路是有漏洞的&#xff0c;所以才导致了后续的都为低电平的时候&#xff0c;Q和非Q都是亮起的。但是我们设计的初衷是&#xff1a;Q和非Q是互斥的&#xff0c;是不能同时亮起的&#xff0c;且为了达到这一点&#xff0c;要使得其中两…