Vue表情輸入組件 微信face表情組件
VUE表情包輸入組件,先來張成品圖看看。
年底了沒事干,把以前做過的項(xiàng)目中的組件拿出來再復(fù)習(xí)一下, 先說說思路吧。
注意:
1. 項(xiàng)目是用vue-cli3.0搭建起來的項(xiàng)目, 參考cli3.0官網(wǎng)地址
2.樣式是用scss需要安裝依賴: npm install node-sass sass-loader -D
思路: 頁面內(nèi)容總體分為三塊區(qū)域(內(nèi)容區(qū),表情區(qū),輸入?yún)^(qū)),引入JSON文件表情庫渲染到頁面,給每個(gè)表情綁定點(diǎn)擊事件并傳遞下標(biāo),將用戶點(diǎn)擊過的表情存放到一個(gè)數(shù)組中,賦值給input標(biāo)簽的value中讓其顯示先輸入框內(nèi),然后給 確定 按鈕綁定點(diǎn)擊事件,用戶點(diǎn)擊確定按鈕將input中的value值賦值給內(nèi)容區(qū)(內(nèi)容去也要?jiǎng)?chuàng)建一個(gè)數(shù)組)讓其渲染到你要的位置上,這樣就完成了表情的渲染和發(fā)送。
html區(qū)域
<template> <div class="home"> <!-- 頁面內(nèi)容區(qū)域 --> <div :class="faceShow ? 'contentBox contFaceShow' : 'contentBox'"> <ul> <li v-for="(item,index) in content" :key="index"> <span>{{item}}</span> </li> </ul> </div> <!-- 輸入框區(qū)域 --> <div :class="faceShow ?'box boxFaceShow' : 'box'" ref="heightFace"> <input type="text" v-model="textConent" class="inputContent"> <button class="referBut" @click="referContent">提交</button> <button class="faceBut" @click="faceContent">表情</button> </div> <!-- 表情區(qū)域 --> <div class="browBox" v-if="faceShow"> <ul> <li v-for="(item,index) in faceList" :key="index" @click="getBrow(index)">{{item}}</li> </ul> </div> </div> </template>
JS區(qū)域
// 導(dǎo)入JSON格式的表情庫 const appData = require("@/assets/emojis.json"); export default { name: "home", data() { return { textConent: "", faceList: [], faceShow: false, getBrowString: "", content: [] }; }, methods: { // 表情 faceContent() { this.faceShow = !this.faceShow; if (this.faceShow == true) { for (let i in appData) { this.faceList.push(appData[i].char); } } else { this.faceList = []; } }, // 獲取用戶點(diǎn)擊之后的標(biāo)簽 ,存放到輸入框內(nèi) getBrow(index) { for (let i in this.faceList) { if (index == i) { this.getBrowString = this.faceList[index]; this.textConent += this.getBrowString; } } }, // 將input的內(nèi)容渲染到頁面上 referContent() { if (this.textConent == "") return alert("請輸入內(nèi)容"); // 存入 this.content.push(this.textConent); // 清空input數(shù)據(jù) this.textConent = ""; // 關(guān)閉表情列表 this.faceShow = false; } }, };
css區(qū)域
<style lang="scss" scoped> body, html, head, .home { width: 100%; height: 100%; padding: 0px; position: relative; margin: 0px; } .home { width: 100%; height: 100%; .contentBox { width: 100%; display: flex; flex-direction: column; justify-content: flex-end; text-align: right; position: absolute; bottom: 60px; li { list-style: none; padding: 4px 10px; margin-bottom: 20px; span { background: #e6e6e6; border-radius: 5px; padding: 5px; } } } .contFaceShow { position: absolute; bottom: 240px; } .box { width: 100%; height: 40px; margin: auto; position: absolute; bottom: 0px; .inputContent { position: absolute; bottom: 0%; left: 0%; width: 74%; height: 100%; border: 1px solid #ccc; } .referBut { position: absolute; bottom: 0%; right: 2%; height: 100%; width: 10%; border-radius: 5px; background: #aaaaff; color: #fff; } .faceBut { position: absolute; bottom: 0; right: 13%; height: 100%; width: 10%; border-radius: 5px; background: #aaaaff; color: #fff; } } .boxFaceShow { position: absolute; bottom: 200px !important; } .browBox { width: 100%; height: 200px; background: #e6e6e6; position: absolute; bottom: 0px; overflow: scroll; ul { display: flex; flex-wrap: wrap; padding: 10px; li { width: 14%; font-size: 26px; list-style: none; text-align: center; } } } } </style> <style lang="scss"> body, html, head { width: 100%; height: 100%; position: relative; } #app { height: 100%; } * { padding: 0px; margin: 0px; } </style>
代碼在我的github上:github地址
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- vue實(shí)現(xiàn)驗(yàn)證碼輸入框組件
- vue組件中點(diǎn)擊按鈕后修改輸入框的狀態(tài)實(shí)例代碼
- Vue 表情包輸入組件的實(shí)現(xiàn)代碼
- 基于Vue開發(fā)數(shù)字輸入框組件
- 基于elementUI使用v-model實(shí)現(xiàn)經(jīng)緯度輸入的vue組件
- vue實(shí)現(xiàn)一個(gè)6個(gè)輸入框的驗(yàn)證碼輸入組件功能的實(shí)例代碼
- Vue數(shù)字輸入框組件的使用方法
- Vue.js自定義事件的表單輸入組件方法
- 說說如何在Vue.js中實(shí)現(xiàn)數(shù)字輸入組件的方法
- vue車牌輸入組件使用方法詳解
相關(guān)文章
vue3+ts+element-plus實(shí)際開發(fā)之統(tǒng)一調(diào)用彈窗封裝的詳細(xì)過程
這篇文章主要介紹了vue3+ts+element-plus實(shí)際開發(fā)之統(tǒng)一調(diào)用彈窗封裝的詳細(xì)過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03vue3?騰訊地圖設(shè)置簽到范圍并獲取經(jīng)緯度的實(shí)現(xiàn)代碼
本文給大家介紹vue3?騰訊地圖設(shè)置簽到范圍并獲取經(jīng)緯度的實(shí)現(xiàn)代碼,本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2022-05-05Vue 實(shí)現(xiàn)輸入框新增搜索歷史記錄功能
這篇文章主要介紹了Vue 輸入框新增搜索歷史記錄功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10Vue中金額、日期格式化插件@formatjs/intl的使用及說明
這篇文章主要介紹了Vue中金額、日期格式化插件@formatjs/intl的使用及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02vue.js中引入vuex儲存接口數(shù)據(jù)及調(diào)用的詳細(xì)流程
這篇文章主要給大家介紹了關(guān)于在vue.js中引入vuex儲存接口數(shù)據(jù)及調(diào)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12