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

news2024/11/25 16:22:30

 本文包含两种效果:

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

 

 首先创建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区域(与效果一一致)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter桌面应用程序定义系统托盘Tray

文章目录 概念实现方案1. tray_manager依赖库支持平台实现步骤 2. system_tray依赖库支持平台实现步骤 3. 两种方案对比4. 注意事项5. 话题拓展 概念 系统托盘&#xff1a;系统托盘是一种用户界面元素&#xff0c;通常出现在操作系统的任务栏或桌面顶部。它是一个水平的狭长区…

物联网水表和4G水表的区别有哪些?

随着科技的发展&#xff0c;水表也不再是传统的机械表&#xff0c;而是经过数字化和智能化改造的物联网水表和4G水表。这两种水表具有很多的不同点。那么&#xff0c;物联网水表和4G水表的区别有哪些&#xff1f; 首先&#xff0c;物联网水表和4G水表的通信方式不同。物联网水表…

指针进阶知识超详细讲解(C语言)(中)

前言 苦苦等待&#xff0c;终于迎来了我们的指针讲解第二期&#xff0c;如果有还没有看过上一期的小伙伴&#xff0c;那赶紧点击这个链接学习后再来看这篇博客吧。链接&#xff1a;指针基础知识超详细讲解&#xff08;C 语言&#xff09;&#xff08;上&#xff09; 如果对学习…

Leetcode1423. 可获得的最大点数

Every day a Leetcode 题目来源&#xff1a;1423. 可获得的最大点数 解法1&#xff1a;前缀和 后缀和 基于贪心的思想&#xff0c;要使得获得的点数最大&#xff0c;每次拿卡牌都应该选点数尽量高的卡牌。 但是拿卡牌有限制&#xff0c;每次行动&#xff0c;只可以从行的…

21、pytest参数化中标记单独的测试用例

官方实例 # content of test_expectation_xfail import pytestpytest.mark.parametrize("test_input, expected",[("35",8),("24",6),pytest.param("6*9",42,markspytest.mark.xfail)], ) def test_eval(test_input, expected):asser…

Linux基本指令(2.0)

周边知识&#xff1a; 1.Linux中&#xff0c; 一切皆文件 构建大文件 输入如下shell命令 i1; while [ $i -le 10000]; do echo "hello Linux $i"; let i; done 此时大文件已经创建在big.txt 此时我们发现cat查看无法查看开始内容 我们使用more 当占满一屏之后就不…

JavaScript <md5加密的两种不同输出结果分析>--案例(二点一)

前言: 问题是这样的,在浏览器中看到这段代码 然后在控制台进行输出.得到: 紧接着,就在,js文件里面进行转译: 可是,得到的结果是: 这是问题!!! 正题: 为什么相同的js代码,在 .js 文件中的输出与 Chrome 控制台中的输出不一样? 环境差异&#xff1a;不同的JavaScript环境&…

STM32F1中断NVIC

目录 1. 中断系统 2. 中断向量表 3. NVIC基本结构 4. NVIC优先级分组 5. NVIC程序编写 5.1 中断分组 5.2 中断结构体变量 5.3 中断通道选择 5.4 抢占优先级和响应优先级配置 6. 中断程序执行 1. 中断系统 中断&#xff1a;在主程序运行过程中&#xff0…

Java基础数据类型

Java有八种基础的数据类型&#xff0c;它们被分为两个主要的类别&#xff1a;原始类型和引用类型。原始类型又被分为四类&#xff1a;整型、浮点型、字符型和布尔型。 整型&#xff08;Integral Types&#xff09;&#xff1a; 这些类型用于存储整数。它们包括&#xff1a; ○…

七大经典高效学习方法

金字塔学习模型 金字塔学习是美国学习专家爱德加戴尔1946年提出的。 他将学习分为主动学习和被动学习两种类型&#xff0c;用数字形象地呈现了采用不同学习方式&#xff0c;学习者在两周后还能记住的内容有多少。 被动学习&#xff1a;通过听讲、阅读、视听、演示这些活动&a…

【Windows本地端口占用脚本自动化】

本地启动多个Java微服务&#xff0c;因为停电或者内存回收原因&#xff0c;IDEA直接退出&#xff1b;再次启动各个服务会提示端口占用。 每次都cmd输入命令手动Kill比较繁琐&#xff0c;可以把此脚本放在桌面上作为一个小工具&#xff0c;运行即可。 代码(核心部分是chatGPT自…

高压放大器研究方向及其应用领域

高压放大器是一种电子设备&#xff0c;用于将输入信号的电压增大到较高的输出电压。它在许多领域中有广泛的应用&#xff0c;包括通信、医疗、科学研究等。 高压放大器的研究方向主要集中在以下几个方面&#xff1a; 提高功率效率&#xff1a;高压放大器需要能够提供足够的输出…

信号可靠性剖析

问题 基于信号发送的进程间通信方式可靠吗&#xff1f;&#xff1f;&#xff1f; 信号查看(kill -l) 信号的分类 不可靠信号 (传统信号) 信号值在 [1, 31] 之间的所有信号 可靠信号 (实时信号) 信号值在 [SIGRTMIN&#xff0c;SIGRTMAX]&#xff0c;即&#xff1a;[34&…

数据挖掘 分类模型选择

选择的模型有&#xff1a; 决策树、朴素贝叶斯、K近邻、感知机 调用的头文件有&#xff1a; import numpy as np import pandas as pd from matplotlib import pyplot as plt from sklearn.linear_model import Perceptron from sklearn.naive_bayes import GaussianNB from s…

二极管:TVS瞬态抑制二极管

一、什么是TVS二极管 TVS&#xff08;Transient Voltage Suppressors&#xff09;&#xff0c;即瞬态电压抑制器&#xff0c;又称雪崩击穿二极管。 TVS二极管的符号如下图所示 什么是雪崩击穿 雪崩击穿是有必要了解一下的&#xff0c;不然后面还有齐纳击穿&#xff0c;搞不…

PySpark开发环境搭建常见问题及解决

PySpark环境搭建常见问题及解决 1、winutils.exe问题2、SparkURL问题3、set_ugi()问题 本文主要收录PySpark开发环境搭建时常见的一些问题及解决方案&#xff0c;并收集一些相关资源 1、winutils.exe问题 报错摘要&#xff1a; WARN Shell: Did not find winutils.exe: {} ja…

阿里云Arthas使用——在日志没有输出异常情况下,如何进行线上bug定位 stack命令 和 trace命令

前言 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类…

算法学习系列(五):N皇后、数独

目录 引言一、N皇后问题代码实现测试 二、数独问题代码实现测试 引言 这个N皇后问题是很典型的一个递归问题&#xff0c;就是还是要掌握&#xff0c;所谓递归其实就是dfs&#xff0c;一层一层深入下去。数独和N皇后的思路是一样的&#xff0c;只不过一些细节不同而已。 一、N…

【恋上数据结构】前缀树 Tire 学习笔记

Tire 需求分析 如何判断一堆不重复的字符串是否以某个前缀开头&#xff1f; 用 Set\Map 存储字符串&#xff08;不重复&#xff09;遍历所有字符串进行判断缺点&#xff1a;时间复杂度 O(n) 有没有更优的数据结构实现前缀搜索&#xff1f; Tire&#xff08;和 Tree 同音&a…

Linux 和 macOS 的主要区别在哪几个方面呢?

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…