LoginSignup
18
10

More than 5 years have passed since last update.

Vue.js で Twemoji を楽チンに使う方法

Last updated at Posted at 2018-07-07

image.png

どんな感じ?

Codepen でサンプルを作ってみました (Qiita に埋め込むと表示されるのに数秒かかる)

See the Pen Vue.js + Twemoji by tdkn (@tdkn) on CodePen.


  • Twemoji とは
    • Twitter がオープンソースで公開している絵文字のセットです
    • Qiita でも使われています → :smile:
    • https://twemoji.twitter.com/

Custom Directive

通常、Vue においてコードの再利用と抽象化における基本の形はコンポーネントですが、Custom Directive を使うと低レベルDOMにアクセスすることができるため、これを利用して Twemoji のパース処理を差し込みます。

Vue には Custom Directive をグローバルあるいはコンポーネント単位でローカルに登録することができます。
ディレクティブというのは v-onv-if など HTML の attribute によく似たものです。

global
import Vue from 'vue'
import twemoji from 'twemoji'

// アプリケーションにグローバル登録
Vue.directive('twemoji', {
  inserted(el) {
    el.innerHTML = twemoji.parse(el.innerHTML)
  }
})
local
// Component単位で登録
directives: {
  twemoji: {
    inserted(el) {
      el.innerHTML = twemoji.parse(el.innerHTML)
    }
  }
}

使い方

ディレクティブを登録したので v-twemoji が使えるようになっています。
お好みで v-emoji など、ディレクティブの名前は適宜変えても良いでしょうね。

app.vue
<template>
  <div v-twemoji>{{message}}</div>
</template>

<script>
export default {
  data: () => ({
    message: "Hello Twemoji ✨🍣😋"
  })
}
</script>

絵文字の大きさの調整

そのままだと、36px ほどあるので、css で適宜調整しましょう。
親要素を基準に計算する em が良いかも。

img.emoji {
   height: 1em;
   width: 1em;
   margin: 0 .05em 0 .1em;
   vertical-align: -0.1em;
}
18
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
10