vue 项目中使用 评论功能 带emoji表情包

news/2024/11/24 20:57:07/

先看下效果:
在这里插入图片描述
在这里插入图片描述
由于项目中需要做一个 评论的功能,思索一番 准备自己写,但打开度娘 一下就看到这个vue评论插件,带表情包
挺好的,还带表情 刚好满足需求
1.安装 2.引入插件3.使用 就不在介绍 上面的链接有
记录下我在项目中是怎么使用的以及改了哪些东西
在这里插入图片描述
这是实际开发项目效果如最上面的效果图
这里需要主要几点,关于使用和修改
1.你可以 按照上面的步骤 npm安装,
2.也可以自己在项目中封装这样一个评论组件,这样你也好改一点
如果你是npm 安装的 那么你需要改样式啊,参数啊什么的 ,那简单啊 ,我直接在node_modules中找到这个模块改对应组件就行了。
…对于node_modules中的模块你想改,这里说下node_modules 中各模块运行的其实是打包后的 dist中的js文件,你改的开发环境,当然不会生效。以下是一种方法
1.将这个模块下载到本地,npm install 安装依赖,(这个插件,拉到本地,你npm install 会报错,1.删掉package.json中的注释,使用npm install npm -g,然后在npm install)
2.运行模块,找到它开发的组件,进行修改
3.改完后打包 npm run build
4.打包完成后,在你的项目中node_modules找到这个模块替换掉模块中dist文件中的js文件
在运行你的项目就可以啦。。。。
这里针对于这个 评论插件,我改了 它的样式、提交的参数。插件自带的参数还是比较全面的,还提供多级评论,不过我这不需要这个多级的。
下面是改完后的代码

<template><div class="hbl-fa"><div class="hbl-comm"><!--      <div class="comment-avatar" v-if="showAvatar"><avatar :avatar="avatar"></avatar></div> --><div class="comment" :style="{ width: commentWidth }"><el-input @focus="showButton(0)" type="textarea" :autosize="{ minRows: minRows, maxRows: maxRows }":placeholder="placeholder" v-model="textareaMap[0]"></el-input><div class="hbl-owo"><div :class="pBodyMap[0] ? 'OwO' : 'OwO OwO-open'" class="emoj publish" :style="{ width: emojiWidth }"><div class="OwO-logo" @click="pBodyStatus(0)"><span @blur="blur"><img src="./img/icon/biaoqing.png" style="width: 32px;height: 32px;"></span></div><div class="OwO-body" v-if="pBodyMap[0]"><ul class="OwO-items OwO-items-show"><li class="OwO-item" v-for="(oitem, index) in OwOlist" :key="'oitem' + index" @click="choseEmoji(0, oitem.title)"><img :src="require('./img/face/' + oitem.url)" alt="" /></li></ul></div></div><div class="publish publish-btn"><button class="btn" @click="doSend(articleId,arguedId,arguedName,discussType,parentId,question,title)">发表回复</button><!-- <button @click="cancel(0)" class="btn btn-cancel">取消</button> --></div></div></div></div></div>
</template><script>import avatar from "./Avatar.vue";
export default {props: {emojiWidth: {type: String,default: "560px",},showAvatar: {type: Boolean,default: true,},avatar: {type: String,default: "",},placeholder: {type: String,default: "在此输入评论内容...",},minRows: {type: Number,default: 4,},maxRows: {type: Number,default: 8,},commentNum: {type: Number,default: 2,},arguedId:{type: Number,default: null,},arguedName:{type: String,default: "",},discussType:{type: Number,default: null,},parentId: {type: Number,default: null,},question:{type: String,default: "",},title:{type: String,default: "",},view:{type: String,default: "",},articleId: {type: Number,default: null,},label: {type: String,default: "作者",},commentWidth: {type: String,default: "100%",},},data() {return {replyMap: [],buttonMap: [],pBodyMap: [],textareaMap: [],OwOlist: [//表情包和表情路径{ title: "微笑", url: "weixiao.gif" },{ title: "嘻嘻", url: "xixi.gif" },{ title: "哈哈", url: "haha.gif" },{ title: "可爱", url: "keai.gif" },{ title: "可怜", url: "kelian.gif" },{ title: "挖鼻", url: "wabi.gif" },{ title: "吃惊", url: "chijing.gif" },{ title: "害羞", url: "haixiu.gif" },{ title: "挤眼", url: "jiyan.gif" },{ title: "闭嘴", url: "bizui.gif" },{ title: "鄙视", url: "bishi.gif" },{ title: "爱你", url: "aini.gif" },{ title: "泪", url: "lei.gif" },{ title: "偷笑", url: "touxiao.gif" },{ title: "亲亲", url: "qinqin.gif" },{ title: "生病", url: "shengbing.gif" },{ title: "太开心", url: "taikaixin.gif" },{ title: "白眼", url: "baiyan.gif" },{ title: "右哼哼", url: "youhengheng.gif" },{ title: "左哼哼", url: "zuohengheng.gif" },{ title: "嘘", url: "xu.gif" },{ title: "衰", url: "shuai.gif" },{ title: "吐", url: "tu.gif" },{ title: "哈欠", url: "haqian.gif" },{ title: "抱抱", url: "baobao.gif" },{ title: "怒", url: "nu.gif" },{ title: "疑问", url: "yiwen.gif" },{ title: "馋嘴", url: "chanzui.gif" },{ title: "拜拜", url: "baibai.gif" },{ title: "思考", url: "sikao.gif" },{ title: "汗", url: "han.gif" },{ title: "困", url: "kun.gif" },{ title: "睡", url: "shui.gif" },{ title: "钱", url: "qian.gif" },{ title: "失望", url: "shiwang.gif" },{ title: "酷", url: "ku.gif" },{ title: "色", url: "se.gif" },{ title: "哼", url: "heng.gif" },{ title: "鼓掌", url: "guzhang.gif" },{ title: "晕", url: "yun.gif" },{ title: "悲伤", url: "beishang.gif" },{ title: "抓狂", url: "zhuakuang.gif" },{ title: "黑线", url: "heixian.gif" },{ title: "阴险", url: "yinxian.gif" },{ title: "怒骂", url: "numa.gif" },{ title: "互粉", url: "hufen.gif" },{ title: "书呆子", url: "shudaizi.gif" },{ title: "愤怒", url: "fennu.gif" },{ title: "感冒", url: "ganmao.gif" },{ title: "心", url: "xin.gif" },{ title: "伤心", url: "shangxin.gif" },{ title: "猪", url: "zhu.gif" },{ title: "熊猫", url: "xiongmao.gif" },{ title: "兔子", url: "tuzi.gif" },{ title: "喔克", url: "ok.gif" },{ title: "耶", url: "ye.gif" },{ title: "棒棒", url: "good.gif" },{ title: "不", url: "no.gif" },{ title: "赞", url: "zan.gif" },{ title: "来", url: "lai.gif" },{ title: "弱", url: "ruo.gif" },{ title: "草泥马", url: "caonima.gif" },{ title: "神马", url: "shenma.gif" },{ title: "囧", url: "jiong.gif" },{ title: "浮云", url: "fuyun.gif" },{ title: "给力", url: "geili.gif" },{ title: "围观", url: "weiguan.gif" },{ title: "威武", url: "weiwu.gif" },{ title: "话筒", url: "huatong.gif" },{ title: "蜡烛", url: "lazhu.gif" },{ title: "蛋糕", url: "dangao.gif" },{ title: "发红包", url: "fahongbao.gif" },],};},components: {avatar,},methods: {//事件处理器blur() {alert("ss");},showButton(index) {//this.showFlag = true;console.log(index + "index");this.$set(this.buttonMap, index, true);},cancel(index) {this.$set(this.buttonMap, index, false);if (index !== 0) {this.$set(this.replyMap, index, false);}console.log(index + "index");//this.showFlag = false;},// 发送评论doSend(articleId,arguedId,arguedName,discussType,parentId,question,title) {//console.log("====="+this.textarea);this.$emit("doSend", this.textareaMap[0],articleId,arguedId,arguedName,discussType,parentId,question,title);this.$set(this.textareaMap, 0, "");},doChidSend(index, commentUserId, pid) {this.$emit("doChidSend", this.textareaMap[index], commentUserId, pid);this.$set(this.textareaMap, index, "");},//选择表情包choseEmoji: function (index, inner) {var con = "";if (!this.textareaMap[index]) {this.$set(this.textareaMap, index, "");}con = this.textareaMap[index] += "[" + inner + "]";this.$set(this.textareaMap, index, con);},analyzeEmoji: function (cont) {//编译表情替换成图片展示出来var pattern1 = /\[[\u4e00-\u9fa5]+\]/g;var pattern2 = /\[[\u4e00-\u9fa5]+\]/;var content = cont.match(pattern1);var str = cont;if (content) {for (var i = 0; i < content.length; i++) {for (var j = 0; j < this.OwOlist.length; j++) {if ("[" + this.OwOlist[j].title + "]" == content[i]) {var src = this.OwOlist[j].url;break;}}var s = require("./img/face/" + src);var imoj = "<img src='" + s + "'/>";str = str.replace(pattern2, imoj);}}return str;},doReply(index) {this.$set(this.replyMap, index, true);console.log(this.replyMap[index]);},pBodyStatus(index) {this.$set(this.pBodyMap, index, !this.pBodyMap[index]);},},watch: {// 如果路由有变化,会再次执行该方法// '$route':'routeChange'},created() {//生命周期函数},mounted() {//页面加载完成后},
};
</script>

样式根据自己的需求改吧 就不贴了,在这里插入图片描述
这个函数,就是解析后台返回的表情字符找到对应的gif图片,插件中也写的很清楚
在这里插入图片描述

在这里插入图片描述
通过props将你 发表评论需要的参数传过来,点击发表 发射一个事件,发射事件的参数是你在props中定义的,父组件接收这个事件,拿到参数,调接口,完!
看中的是它的表情…还是比较实用的,就是这个表情用的是gif … 后期看看文件大小 在做调整。。。。。


http://www.ppmy.cn/news/520745.html

相关文章

新浪微博表情代码以及对应的gif图片url

新浪微博表情代码以及对应的gif图片url api&#xff1a;https://api.weibo.com/2/emotions.json?source1362404091 var c [{icon : "http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/7a/shenshou_thumb.gif",value : "[草泥马]"}, {i…

自定义可存数据的jquery 表情输入框

jquery 表情输入框&#xff0c;可存数据库 前两天优化博客的时候&#xff0c;想在留言评论版块插入表情输入功能&#xff0c;并且用户能够存入数据库&#xff0c;并且可以在前台读取展示&#xff0c;于是研究了一下表情包&#xff0c;解决方法如下&#xff1a; 下载表情包gif图…

超全的表情包

// 新浪表情包api https://api.weibo.com/2/emotions.json?source1362404091 export const sina [{alt: [坏笑],src: http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4d/2018new_huaixiao_org.png},{alt: [笑cry],src: http://img.t.sinajs.cn/t4/appstyle/expre…

华为OD机试真题B卷 Java 实现【删除字符串中出现次数最少的字符】,附详细解题思路

一、题目描述 删除字符串中出现次数最少的字符&#xff0c;如果多个字符出现次数一样则都删除。 二、输入描述 一个字符串。 三、输出描述 删除字符串中出现次数最少的字符&#xff0c;如果多个字符出现次数一样则都删除&#xff0c;如果都被删除 则换为empty。 四、解题…

「Java核心技术大会2023」——AIC送书第三期

共同深入探讨 Java 生态&#xff01;直播预约&#xff1a;视频号“IT阅读排行榜” 大会简介 人工智能在22年、23年的再次爆发让Python成为编程语言里最大的赢家&#xff1b;云原生的持续普及令Go、Rust等新生的语言有了进一步叫板传统技术体系的资本与底气。我们必须承认在近…

apple与android传数据线,可以同时插安卓和苹果的数据线

原标题&#xff1a;可以同时插安卓和苹果的数据线 问题&#xff1a;如何清理iPhone垃圾? 答案&#xff1a;微信公众号&#xff1a;果粉之家回复 4 现在手机线分为两大种&#xff1a;iPhone / iPad 专用的 Lightning 线&#xff0c;以及大部分 Android 装置使用的 microUSB 线。…

android 数据线有几种,不止是安卓和苹果线,手机数据线原来还有这几种!

原标题&#xff1a;不止是安卓和苹果线&#xff0c;手机数据线原来还有这几种&#xff01; 随着智能手机日益发展&#xff0c;辅助智能手机的数据线配件也越来越多样。 现在我们最常见的无非就是标准Micro usb口、正反随便插的Type-c接口、还有苹果Lightning数据线&#xff0c;…

iphone ipad等苹果设备30针数据线接口定义,大家可能有用

原文地址::http://wenku.baidu.com/view/0afc1cfb910ef12d2af9e781.html 相关网帖 1、iphone数据线接口定义----http://wenku.baidu.com/view/0c31aa28ed630b1c59eeb5e5.html iphone,数据线,ipad,接口 找到iphone ipad等苹果设备30针数据线接口定义&#xff0c;大家可能有用 …