LoginSignup
0
0

More than 1 year has passed since last update.

ユーザビリティなフォームの作成①

Last updated at Posted at 2021-10-10

Vue.jsを使用して、ユーザビリティなフォームの作成。

完成例

通常時

ユーザビリティ.png

フォーカス後

ユーザビリティ後.png

このように、フォーカス後にフォームの色をグレーから白に変えていきたいと思います。

inputタグにV-onイベントを設定

  • フォーカスされた時に@focusinを発火させ、startEditingを実行
  • フォーカスされていない時は@focusoutを発火させ、finishEditingを実行
<input v-model="title" 
       type="text" 
       class="text-input"
       placeholder="Add new list"
       @focusin="startEditing"
       @focusout="finishEditing"
>
data() {
  return {
    title: '',
  // 通常時はフォーカスしていないのでfalseに設定
    isEditing: false,
 }
},
methods: {
  addList() {
   this.$store.dispatch('addlist', { title: this.title })
    this.title = ''
  },
  // フォーカスされた時
  startEditing() {
    this.isEditing = true
  },
  // フォーカスしていない時
  finishEditing() {
    this.isEditing = false
  },
}

isEditingの状態がtrueの時だけactiveクラスを動的に追加します

.active .text-input {
  background-color: #fff;
}

computedでdataにあるisEditingの状態を監視

data() {
  return {
    title: '',
    isEditing: false,
  }
},
// ★ここから追加
computed: {
  classList() {
    const classList = ['addlist']
    // isEditingがtrueならactiveクラスを追加
    if (this.isEditing) {
      classList.push('active')
    }
    return classList
  },
},
// ★ここまで追加
methods: {

上記で定義したcomputedをformにバインドさせる

<form :class="classList" @submit.prevent="addList">
  <input v-model="title"
          type="text"
          class="text-input"
          placeholder="Add new list"
          @focusin="startEditing"
          @focusout="finishEditing"
  >
  <button type="submit"
          class="add-button">
    Add
  </button>
</form>

フォーカス後、フォームの色が変わっていたら成功です!

0
0
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
0
0