最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 2019-10-29 Vue-简单的表情组件

    正文概述 掘金(徐茂增)   2021-03-29   491

    首先,定义表情对象包括src和title的JSON格式

    表情对象为一个对象数组集合文件face.json

    [
       {
         "src": "http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/2018new_weixioa02_org.png",
         "title": "[微笑]"
       },
       {
         "src": "http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/2018new_keai_org.png",
         "title": "[可爱]"
       },
       {
         "src": "http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/2018new_taikaixin_org.png",
         "title": "[太开心]"
       },
       {
         "src": "http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/2018new_guzhang_org.png",
         "title": "[鼓掌]"
       }
       ......
    ]
    

    然后,定义表情组件样式文件index.vue,与face.json在同一目录下

    定义表情图片的样式

    <div class="scroll-wrapper" @touchmove.prevent ref="faceContent">
      <ul>
        <li v-for="(item, index) in faces" :key="index">
          <img
            @click="onFaceClick(`[${item.title}]`)"
            :
            :src="item.src"
            width="25"
            height="25"
          />
        </li>
      </ul>
    </div>
    
    import faceJSON from "./face.json";
    export default {
      data: () => ({
        faceData: faceJSON
      }),
      computed: {
        faces: function() {
          const list = this.faceData.faceList;
          return list;
        }
      },
      methods: {
        onFaceClick(face) {
          this.$emit("onFaceChoose", face);
        }
      }
    };
    
    ul li {
      padding: 2px;
      list-style-type: none;
      display: inline-block;
      img {
        cursor: pointer;
      }
    }
    

    2019-10-29 Vue-简单的表情组件

    最后,在需要的文本框中插入选中的表情

     <el-input
       id="emojiInput"
       type="textarea"
       :autosize="{ minRows: 6, maxRows: 10}"
       v-model="formData.content"
       placeholder="请输入内容..."
     ></el-input>
     <div class="emoji-input">
       <div>
         <span
           class="emotionOpenner"
           v-if="!showFacePanel"
           @click="showFacePanel = true"
         >展开表情</span>
         <span class="emotionOpenner" v-else @click="handleKeyboardClick">收起表情</span>
       </div>
       <!--表情控件-->
       <emoji-input-method @onFaceChoose="handleFaceChoose" v-if="showFacePanel"></emoji-input-method>
     </div>
    

    选中插入文本框

    // 表情组件方法
    handleFaceChoose(face) {
      var elInput = document.getElementById("emojiInput");
      var startPos = elInput.selectionStart;
      var endPos = elInput.selectionEnd;
      if (startPos === undefined || endPos === undefined) return;
      var txt = elInput.value;
      var result = txt.substring(0, startPos) + face + txt.substring(endPos);
      elInput.value = result;
      // 重新定义光标位置
      elInput.focus();
      elInput.selectionStart = startPos + face.length;
      elInput.selectionEnd = startPos + face.length;
      this.formData.content = result;
    },
    handleKeyboardClick() {
      this.showFacePanel = false;
    }
    

    至此,一个简单的表情组件宣告完成


    起源地下载网 » 2019-10-29 Vue-简单的表情组件

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元