提高用户操作体验,让el-select自动选中所需选项

在开发网站或应用程序时,提高用户体验是至关重要的。其中一个需要考虑的方面是:如何让用户更快速、更容易地完成任务。对于一个数据输入或选择界面,例如表单,el-select 是常用的选择组件之一。在本文中,我们将分享如何让 el-select 自动选中所需选项,以提高用户的选择体验。

一、清晰明确地展示可选项

在数据容易理解和选项不多的情况下,静态字符串和固定选项是很适合的。例如,固定的国家列表可以方便地在el-select中展示:

    <el-select v-model="country">
      <el-option label="中国" value="china"></el-option>
      <el-option label="美国" value="usa"></el-option>
      <el-option label="英国" value="uk"></el-option>
      <el-option label="澳大利亚" value="australia"></el-option>
    </el-select>

在这个例子中,我们将列表选项设为静态的固定值,这是一个最基本的例子。但实际应用中,可选项可能是动态的,需要通过API动态获取,并且选项较多。对于这种情况,应该及时展示用户可以选取的选项并且方便用户快速找到自己所需的选项。

二、自动滚动选中项到可视区域

当有很多选项时,用户需要用滚动条来找到他们想要的选项。但自动将选项滚动到视野可以让用户省去找寻所需选项的步骤。这可以通过 el-select 属性:popper-append-to-body="false" 和事件@visible-change 结合实现。

    <el-select v-model="value" :popper-append-to-body="false" @visible-change="visibleChange">
      <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
    </el-select>
    visibleChange(visible) {
        if (visible && this.$refs.select.dropdown.$refs.popper != null) {
          this.$nextTick(() => {
            const popper = this.$refs.select.dropdown.$refs.popper;
            const selected = popper.querySelector('.el-select-dropdown__item.selected');
            if (selected != null) {
              const offsetTop = selected.offsetTop;
              const height = popper.clientHeight;
              const selectedHeight = selected.clientHeight;
              if (offsetTop + selectedHeight > height) {
                popper.scrollTop = offsetTop;
              }
            }
          });
        }
      } 

在上面的例子中,我们使用了 @visible-change 事件监测弹出框的出现和隐藏,并在弹出框出现时,查找到当前被选中的项,再将它滚动到视野里。

三、自动选中列表的第一项或上一次选中的项

在Windows应用程序中,当打开下拉框时,通常会自动选择第一个项。在这个世界日益追求高效的今天,我们希望用户能够更快地完成任务。当用户到达下拉框时,我们可以自动选择第一个项来让用户尽快完成选择任务。例如:

  <el-select v-model="value">
      <el-option :value="item.id" :label="item.name" v-for="item in options" :key="item.id"></el-option>
  </el-select>

  // ...

  data() {
      return {
        value: null,
        options: [{id: '1', name: '选项1'}, {id: '2', name: '选项2'}, {id: '3', name: '选项3'}]
      };
    },
    watch: {
      options(newVal, oldVal) {
        this.value = newVal[0].id;
      }
    }
  

在这个例子中,我们可以自动找到第一个选项并将其设为默认选项。这可以通过使用 watch 然后在 options 改变时更新 value 的值。

另外一种方法是将前一次选择的值存储在localStorage中,在前一次选择的项前自动勾选。

  <el-select v-model="value">
      <el-option :value="item.id" :label="item.name" v-for="item in options" :key="item.id"></el-option>
  </el-select>

  // ...

  data() {
      return {
        value: localStorage.getItem('lastSelect') || null,
        options: [{id: '1', name: '选项1'}, {id: '2', name: '选项2'}, {id: '3', name: '选项3'}]
      };
    },
    watch: {
      value(newVal) {
        localStorage.setItem('lastSelect', newVal);
      },
      options(newVal, oldVal) {
        const lastSelect = localStorage.getItem('lastSelect');
        if (lastSelect && newVal.findIndex(item => item.id === lastSelect) !== -1) {
          this.value = lastSelect;
        } else {
          this.value = newVal[0].id;
        }
      }
    }
  

在这个例子中,我们可以在 watch 中记录当前选择的值,然后在 options 改变时,自动找到前一次选择的项并将其自动选中。

四、动态输入以搜索选项

当选择的选项很多时,我们可以提供搜索选项功能让用户更容易找到自己所需的选项。在el-select 组件中设置 filterable 属性为 true 即可启用搜索功能。例如:

  <el-select v-model="value" filterable>
      <el-option :value="item.id" :label="item.name" v-for="item in options" :key="item.id"></el-option>
  </el-select>

  // ...

  data() {
      return {
        value: null,
        options: [{id: '1', name: '选项1'}, {id: '2', name: '选项2'}, {id: '3', name: '选项3'}]
      };
    },
  

在这个例子中,我们设置了 filterable 属性,用户可以在下拉列表中输入文字以搜索选项。

五、结合上述方法的实现

在上文的几个部分中,我们讲解了如何展示可选项、自动滚动选中项到视野范围内、自动选中第一个选项并在选项改变时自动更新、以及搜索选项的实现方法。让我们结合上述方法的实现来制作一个优秀的 el-select 组件。

  <el-select v-model="value" :popper-append-to-body="false" filterable @visible-change="visibleChange">
      <el-option :value="item.id" :label="item.name" v-for="item in options" :key="item.id"></el-option>
  </el-select>

  // ...

  data() {
      return {
        value: null,
        options: [{id: '1', name: '选项1'}, {id: '2', name: '选项2'}, {id: '3', name: '选项3'}]
      };
    },
    watch: {
      options(newVal, oldVal) {
        if (newVal.length > 0) {
          if (!this.value) {
            this.value = newVal[0].id;
          } else {
            const option = newVal.find(item => item.id === this.value);
            if (!option) {
              this.value = newVal[0].id;
            }
          }
        }
      }
    },
    methods: {
      visibleChange(visible) {
        if (visible && this.$refs.select.dropdown.$refs.popper != null) {
          this.$nextTick(() => {
            const popper = this.$refs.select.dropdown.$refs.popper;
            const selected = popper.querySelector('.el-select-dropdown__item.selected');
            if (selected != null) {
              const offsetTop = selected.offsetTop;
              const height = popper.clientHeight;
              const selectedHeight = selected.clientHeight;
              if (offsetTop + selectedHeight > height) {
                popper.scrollTop = offsetTop;
              }
            }
          });
        }
      }
    }
  

在这个例子中,我们首先设置了 filterable。“@visible-change=visibleChange”是用于滚动到选中项不可见区域的方法。另外在 watch 属性中更新 value 当 options 改变时自动更新,并自动选择第一个项或前一次选择的项。

六、总结

本文中介绍了如何提高用户操作体验,让 el-select 自动选中所需选项,从而提高用户的选择体验。重要的是,清晰明确地展示可选项、将自动选中的选项自动滚动到可视区域、自动选择第一个选项或前一次选择的项以及动态输入以搜索选项是一些有用的方法。结合上述方法的实现,我们可以创建一个可提高用户选择体验的高性能 el-select 组件。

原创文章,作者:ARJX,如若转载,请注明出处:https://www.506064.com/n/146894.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ARJXARJX
上一篇 2024-10-31 15:32
下一篇 2024-10-31 15:32

相关推荐

  • Python栈操作用法介绍

    如果你是一位Python开发工程师,那么你必须掌握Python中的栈操作。在Python中,栈是一个容器,提供后进先出(LIFO)的原则。这篇文章将通过多个方面详细地阐述Pytho…

    编程 2025-04-29
  • Python安装选项怎么选?

    Python是一种高级编程语言,可以广泛应用于Web开发、数据科学、网络爬虫等领域。在进行Python开发时,我们首先需要进行Python的安装,但是在安装时会遇到各种选项,让人不…

    编程 2025-04-29
  • Python操作数组

    本文将从多个方面详细介绍如何使用Python操作5个数组成的列表。 一、数组的定义 数组是一种用于存储相同类型数据的数据结构。Python中的数组是通过列表来实现的,列表中可以存放…

    编程 2025-04-29
  • Python操作MySQL

    本文将从以下几个方面对Python操作MySQL进行详细阐述: 一、连接MySQL数据库 在使用Python操作MySQL之前,我们需要先连接MySQL数据库。在Python中,我…

    编程 2025-04-29
  • Python磁盘操作全方位解析

    本篇文章将从多个方面对Python磁盘操作进行详细阐述,包括文件读写、文件夹创建、删除、文件搜索与遍历、文件重命名、移动、复制、文件权限修改等常用操作。 一、文件读写操作 文件读写…

    编程 2025-04-29
  • Python代码实现回文数最少操作次数

    本文将介绍如何使用Python解决一道经典的回文数问题:给定一个数n,按照一定规则对它进行若干次操作,使得n成为回文数,求最少的操作次数。 一、问题分析 首先,我们需要了解回文数的…

    编程 2025-04-29
  • Python元祖操作用法介绍

    本文将从多个方面对Python元祖的操作进行详细阐述。包括:元祖定义及初始化、元祖遍历、元祖切片、元祖合并及比较、元祖解包等内容。 一、元祖定义及初始化 元祖在Python中属于序…

    编程 2025-04-29
  • Python列表的读写操作

    本文将针对Python列表的读取与写入操作进行详细的阐述,包括列表的基本操作、列表的增删改查、列表切片、列表排序、列表反转、列表拼接、列表复制等操作。 一、列表的基本操作 列表是P…

    编程 2025-04-29
  • 如何用Python对数据进行离散化操作

    数据离散化是指将连续的数据转化为离散的数据,一般是用于数据挖掘和数据分析中,可以帮助我们更好的理解数据,从而更好地进行决策和分析。Python作为一种高效的编程语言,在数据处理和分…

    编程 2025-04-29
  • Python中接收用户的输入

    Python中接收用户的输入是一个常见的任务,可以通过多种方式来实现。本文将从以下几个方面对Python中接收用户的输入做详细阐述。 一、使用input函数接收用户输入 Pytho…

    编程 2025-04-29

发表回复

登录后才能评论