Tech Racho エンジニアの「?」を「!」に。
  • 開発

Vue.jsサンプルコード(10)スライダーで入力したカラーコードを動的に表示する

10. スライダーで入力したカラーコードを動的に表示する

  • Vue.jsバージョン: 2.5.2
  • 3つのスライダーでHSLの値を変更すると、色と数値が動的に変更されます。

サンプル


 var vm = new Vue({
   el: "#app",
   data: {
     h: 163,
     s: 84,
     l: 77,
   },
   computed: {
     c: function() {
       return `hsl(${this.h}, ${this.s}%, ${this.l}%)`
     },
   },
 });

以下はHTML部分の要点のみを抜粋したものです。

<input class="form-control" v-model="c" :style="{backgroundColor: c}" />

          <input type="range" min="0" max="360" v-model.number="h" />
          <input type="range" min="0" max="100" v-model.number="s" />
          <input type="range" min="0" max="100" v-model.number="l" />

おまけ: サンプルコード07はコードポイントによってlengthの結果が正しくならないことがある

サンプルコード07のHTMLに以下のコードがありますが、文字によってlengthの結果が期待どおりにならないことがあります。

    <div class='panel-footer'>あと {{140 - b.length}} 文字
    </div>
'a'.length   // => 1
'あ'.length  // => 1
'正'.length  // => 1
'𠮷'.length  // => 2

上の例では「𠮷」(0x20BB7)で2が返ります。

これはVue.jsの問題ではなく、JavaScriptの問題です。alphanumericや簡単な漢字・ひらがな・カタカナ(コードポイントがUTF-16の16ビットに収まる場合)のうちはよいのですが、U+10000を超えるとlengthが1つのコードポイントを2とカウントします。

さしあたっての回避法として、BPSアプリチームのyoshiさんが見つけてくれた方法をご紹介します。詳しくは別記事にしたいと思います。

[...'𠮷'].length // => 1

このあたりの闇深い部分については以下が大変参考になります。

参考: JavaScript における文字コードと「文字数」の数え方


バックナンバー(Vue.jsサンプルコード)

Vue.jsサンプルコード(01〜03)Hello World・簡単な導入方法・デバッグ・結果の表示とメモ化


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。