构建可定制的表情选择器组件

news2024/9/17 7:34:03

你好呀,我是小邹。

概述

在当今的交互式Web应用中,表情符号(Emoji)已成为一种流行的沟通方式。为了提升用户体验并简化开发流程,本教程将引导您如何构建一个可高度定制的表情选择器组件。此组件将允许用户在Web表单中快速插入表情符号,并且可以通过JavaScript进行高度配置和扩展。

效果图

在这里插入图片描述

技术栈
  • HTML:用于构建页面结构。
  • CSS:用于美化界面和实现响应式布局。
  • JavaScript:用于处理用户交互和动态内容生成。
页面结构

首先,我们需要为表情选择器组件定义基本的HTML结构。这里包含了一个按钮触发器、一个表情选择器面板和一个文本输入区域。

<div>
    <button style="background:none">
        <svg data-v-88c34aa9="" t="1716283029251" class="icon" viewBox="0 0 1024 1024" version="1.1"
           xmlns="http://www.w3.org/2000/svg" p-id="2631" width="50px" height="45px" id="emoji-button">
           <path data-v-88c34aa9=""
               d="M872.802928 755.99406 872.864326 755.99406 872.864326 755.624646Z" fill="#272536"
               p-id="2632">
            </path>
            <path data-v-88c34aa9=""
                d="M807.273469 216.727043c-162.808016-162.836669-427.736874-162.836669-590.544891 0-162.836669 162.806993-162.836669 427.736874 0 590.543867 162.808016 162.837692 427.737898 162.837692 590.544891 0C970.110137 644.462894 970.110137 379.534036 807.273469 216.727043M764.893242 764.92036c-139.444912 139.443889-366.370225 139.414213-505.798764 0-139.459239-139.473565-139.459239-366.354875 0-505.827417 139.428539-139.429563 366.354875-139.460262 505.798764 0C904.336108 398.521482 904.336108 625.476471 764.893242 764.92036" fill="#231F20" p-id="2633">
            </path>
            <path data-v-88c34aa9=""
                d="M381.724423 468.02137c24.783453 0 44.953841-20.169365 44.953841-44.967144 0-24.828478-20.170388-45.027519-44.953841-45.027519-24.842805 0-45.013193 20.199041-45.013193 45.027519C336.71123 447.852004 356.881618 468.02137 381.724423 468.02137" fill="#231F20" p-id="2634">
            </path>
            <path data-v-88c34aa9=""
                d="M640.680243 468.095048c24.812105 0 45.010123-20.213367 45.010123-45.01217 0-24.827455-20.198018-44.99682-45.010123-44.99682-24.785499 0-44.953841 20.169365-44.953841 44.99682C595.726401 447.88168 615.894743 468.095048 640.680243 468.095048" fill="#231F20" p-id="2635">
            </path>
            <path data-v-88c34aa9=""
                d="M642.245901 619.058294l-2.453888 0.798179c-40.310078 18.248619-83.548858 27.5341-128.411625 27.5341-46.343491 0-90.173742-9.375531-130.305765-27.799136l-2.425236-0.741897c-1.508353-0.413416-3.548826-1.003863-6.092765-1.003863-14.757099 0-26.734898 11.977799-26.734898 26.675546 0 6.978948 3.282766 13.988596 8.695033 19.253506l-0.325411 1.62501 6.831592 3.076058c47.911196 21.679765 100.021018 33.095769 150.681838 33.095769 51.608402 0 102.180194-11.120268 150.978597-33.361829 8.575306-4.703115 13.928221-13.721513 13.928221-23.511483C676.611593 627.458615 661.027663 613.290941 642.245901 619.058294"
fill="#231F20" p-id="2636">
            </path>
         </svg>
     </button>
    <div id="emoji-selector" style="display: none;height: 20%;margin-top: 10px">
          <!-- 表情按钮将在这里生成 -->
    </div>
</div>
CSS 样式

接下来,使用CSS来美化我们的组件。我们将添加一些基本的样式,包括对按钮、表情选择器面板的样式。

#emoji-selector {
        position: relative;
        display: none;
        border-radius: 5px;
        padding: 10px;
        z-index: 1;
    }

    .emoji-button-item {
        font-size: 19px; /* 控制表情的大小 */
        padding: 5px; /* 内边距 */
        margin: 2px; /* 外边距 */
        cursor: pointer; /* 鼠标指针样式 */
        border-radius: 5px; /* 圆角 */
        background: none;
    }
JavaScript 逻辑

现在,让我们添加JavaScript来处理用户交互和动态生成表情按钮。

<script>
    document.addEventListener('DOMContentLoaded', function () {
        const emojiButton = document.getElementById('emoji-button');
        const emojiSelector = document.getElementById('emoji-selector');

        // 生成表情按钮
        function generateEmojiButtons() {
            // 参考 https://www.emojiall.com/zh-hans/all-emojis
            const emojis = [
                '😀', '😁', '😂', '😃', '😄', '😅', '😆', '😇', '😉', '😊',
                '🥳', '😋', '😎', '🤗', '🥺', '😃', '😌', '😴', '😵', '😐',
                '🙃', '🤣', '😍', '🥰', '😚', '😘', '😜', '🤔', '😏',
                '😪', '😵', '😦', '❤️', '✋', '✌️', '🤏', '🤙', '🤞', '👍','👏'
            ];
            const emojiContainer = document.getElementById('emoji-selector');
            emojis.forEach(emoji => {
                const button = document.createElement('button');
                button.className = 'emoji-button-item';
                button.textContent = emoji;
                button.addEventListener('click', function () {
                    const textarea = document.getElementById('aaa');
                    textarea.focus();
                    textarea.value += emoji;
                    // 阻止点击事件冒泡到父元素,避免关闭表情选择器
                    event.stopPropagation();
                });
                emojiContainer.appendChild(button);
            });
        }

        // 初始化表情选择器
        generateEmojiButtons();

        // 当点击表情按钮时显示或隐藏表情选择器
        emojiButton.addEventListener('click', function () {
            emojiSelector.style.display = emojiSelector.style.display === 'none' ? 'block' : 'none';
        });

        // 当点击文档其他地方时隐藏表情选择器
        window.addEventListener('click', function (event) {
            if (!emojiSelector.contains(event.target) && event.target !== emojiButton) {
                emojiSelector.style.display = 'none';
            }
        });
    });
</script>
结论

通过上述步骤,您可以构建一个功能齐全的表情选择器组件,它不仅美观而且实用。此外,该组件具有高度可定制性,可以根据您的具体需求进行扩展和调整。无论是用于聊天应用还是博客评论系统,这个组件都能提供优秀的用户体验。

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

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

相关文章

力扣621.任务调度器

力扣621.任务调度器 桶思想当桶放不满时 答案为桶面积 maxcount(最后一行) (max - 1)(n1)当桶放的满时 答案为任务总数 tasks.size()最终两者取大即可 class Solution {public:int leastInterval(vector<char>& tasks, int n) {int len tasks.size();vector<…

QT--聊天室

一、设计要求 用QT做一个聊天室&#xff0c; 制作一个服务器和客户端。可以进行注册、登录&#xff0c; 登陆成功后可以使用昵称进行发送、接收消息。 能根据昵称、聊天内容查询历史记录&#xff0c;也可以查询全部聊天记录。 。 二、客户端三级ui界面 三、项目代码 //在…

测试用例:确保软件质量的基石

大家好&#xff0c;我是一名测试开发工程师&#xff0c;已经开源一套【自动化测试框架】和【测试管理平台】&#xff0c;欢迎大家联系我&#xff0c;一起【分享测试知识&#xff0c;交流测试技术】 在当今这个数字化时代&#xff0c;软件已经成为人们日常生活、工作和学习中不可…

Hive3:Centos7环境部署Hive服务

一、安装说明 1、Hadoop集群情况 3台机器&#xff1a;4G2C、2G2C、2G2C 安装教程&#xff1a;Centos7环境安装Hadoop集群 2、安装MySQL&#xff0c;用于存储Hive的元数据 在102机器上安装MySQL 安装MySQL使用服务器的root账号 3、最后安装Hive 安装hive过程使用服务器的atgu…

fatal: Could not read from remote repository. 解决方法

问题描述&#xff1a; Git : fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists。 解决方法&#xff1a; 当在网上尝试大量方法仍然失败的时候&#xff0c;不妨试试这个方法。 在 github 上&…

ROUND() Function in SQL(四舍五入)

ROUND() Function in SQL ROUND() 函数用于将数值四舍五入到指定的小数位数或者整数位数。 不同的数据库系统可能会有一些细微的语法差异&#xff0c;但基本功能都是一致的。 1. 基本语法 ROUND(number, decimal_places)number: 要进行四舍五入的数值。decimal_places: 可选参…

2024年7月30日 十二生肖 今日运势

小运播报&#xff1a;2024年7月30日&#xff0c;星期二&#xff0c;农历六月廿五 &#xff08;甲辰年辛未月乙未日&#xff09;&#xff0c;法定工作日。 红榜生肖&#xff1a;兔、马、猴 需要注意&#xff1a;狗、鼠、牛 喜神方位&#xff1a;西北方 财神方位&#xff1a;…

基于SpringBoot+Vue的游戏攻略分享平台(带1w+文档)

基于SpringBootVue的游戏攻略分享平台(带1w文档) 本系统为了数据库结构的灵活性所以打算采用MySQL来设计数据库&#xff0c;而java技术&#xff0c;B/S架构则保证了较高的平台适应性。本文主要介绍了本系统的开发背景&#xff0c;所要完成的功能和开发的过程&#xff0c;主要说…

大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

零基础入门转录组数据分析——加权基因共表达网络分析(WGCNA,Weighted correlation network analysis)

零基础入门转录组数据分析——加权基因共表达网络分析&#xff08;WGCNA&#xff0c;Weighted correlation network analysis&#xff09; 目录 零基础入门转录组数据分析——加权基因共表达网络分析&#xff08;WGCNA&#xff0c;Weighted correlation network analysis&#…

c语言代码运行不成功,如何解决?

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

GEE数据:Sentinel-2数据更新新增两个云和雪波段(MSK_CLDPRB和MSK_SNWPRB)

目录 简介 数据时间 数据提供者 Collection Snippet 波段名称 Class Table: SCL 影像属性 代码 结果 简介 2022年1月25日之后&#xff0c;PROCESSING_BASELINE为“04.00”或以上的Sentinel-2场景的DN&#xff08;值&#xff09;范围移动了1000。HARMONIZED集合将新场…

【C++】std::shared_ptr智能指针详解和示例

在C中&#xff0c;智能指针是一种用于自动管理动态分配内存的机制&#xff0c;旨在减少内存泄漏和野指针的风险。std::shared_ptr 是C标准库提供的几种智能指针之一&#xff0c;它通过共享所有权的机制来管理动态分配的对象。本文将详细解析 std::shared_ptr 的工作原理、特性&…

【电路笔记】-共源JFET放大器

共源JFET放大器 文章目录 共源JFET放大器1、概述2、共源JFET放大器3、JFET放大器电流和功率增益共源JFET放大器使用结场效应晶体管作为其主要有源器件,提供高输入阻抗特性。 1、概述 普通源JFET放大器与共射极BJT放大器相比有一个重要优点,即FET具有极高的输入阻抗,再加上低…

工业三防平板,高效能与轻便性的结合

在当今数字化、智能化的工业时代&#xff0c;工业三防平板作为一种创新的设备&#xff0c;正以其独特的优势在各个领域发挥着重要作用。它不仅具备高效能的处理能力&#xff0c;还拥有出色的轻便性&#xff0c;为工业生产和管理带来了前所未有的便利。 一、高效能的核心动力 工…

2024年中职云计算实验室建设及云计算实训平台整体解决方案

随着信息技术的飞速发展&#xff0c;云计算作为新一代信息技术的核心&#xff0c;正逐步渗透到各行各业&#xff0c;成为推动数字化转型的重要力量。为了适应这一趋势&#xff0c;中职教育作为技能型人才培养的重要阵地&#xff0c;亟需加强云计算实验室建设与云计算实训平台的…

web,apache,nginx

web基本概念和常识 Web:为用户提供的一种在互联网上浏览信息的服务&#xff0c;Web 服务 是动态的、可交 互的、跨平台的和图形化的。 Web 服务为用户提供各种互联网服务&#xff0c;这些服务包括信息浏览服务&#xff0c;以及各种交互式服务&#xff0c;包括聊天、购物、学习…

泰迪智能科技大数据实验室——陕西省高校合作成功案例

近年来&#xff0c;陕西省紧跟国家大数据发展战略&#xff0c;积极推进大数据产业发展。在政策扶持、产业布局、技术创新等方面取得显著成效。泰迪智能科技大数据实验室立足陕西&#xff0c;携手西安邮电大学、西安财经大学、陕西科技大学镐京学院、宝鸡文理学院、渭南师范学院…

编译期链接时共享库搜索路径优先级实验

编译期链接时共享库搜索路径优先级实验 前言实验环境目录说明准备工作单独测试不配置路径默认路径LIBRARY_PATH-L 优先级测试默认路径和LIBRARY_PATH-L和默认路径 DEBUG模式编译器配置详细信息链接器详细信息DEBUG总结验证 默认路径>LIBRARY_PATH原因附录库文件源码主程序源…

bugku-web-ctf-变量1

<?php error_reporting(0); include "flag1.php"; highlight_file(__file__); if(isset($_GET[args])){$args $_GET[args];if(!preg_match("/^\w$/",$args)){die("args error!");}eval("var_dump($$args);"); } ?> error_r…