如何用细节提升用户体验?

news2024/12/17 6:44:09

前端给用户反馈是提升用户体验的重要部分,根据场景选择不同的方式可以有效地提升产品的易用性和用户满意度。以下是常见的方法:

1. 视觉反馈

用户执行了某些操作后,需要即时确认操作结果。例如:按钮点击、数据提交、页面加载等。同时,在加载过程中,避免空白页面带来的不适感。

1.1 按钮状态变化

🌰:用户点击按钮后按钮变为不可点击,并显示“提交中...”。

<template>
  <el-button :loading="isSubmitting" @click="handleSubmit">
    {{ isSubmitting ? '提交中...' : '提交' }}
  </el-button>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const isSubmitting = ref(false);
    const handleSubmit = async () => {
      isSubmitting.value = true;
      // 模拟耗时操作
      await new Promise(resolve => setTimeout(resolve, 2000));
      isSubmitting.value = false;
      alert('提交成功!');
    };
    return { isSubmitting, handleSubmit };
  },
};
</script>

适用场景:数据提交、文件上传等耗时操作。

1.2 骨架屏

🌰:页面加载时显示骨架屏代替真实内容。

<template>
  <div>
    <el-skeleton v-if="loading" :rows="5" />
    <div v-else>加载完成的内容</div>
  </div>
</template>

<script>
import { ref, onMounted } from 'vue';
export default {
  setup() {
    const loading = ref(true);
    onMounted(() => {
      // 模拟加载数据
      setTimeout(() => {
        loading.value = false;
      }, 2000);
    });
    return { loading };
  },
};
</script>

适用场景:页面加载、图片加载等需要较长时间的操作。  

1.3 占位符

🌰:图片加载失败时显示默认占位符。

<template>
  <el-image src="invalid-url.jpg" :fallback="defaultImage" alt="图片加载失败" />
</template>

<script>
export default {
  data() {
    return {
      defaultImage: 'https://via.placeholder.com/150',
    };
  },
};
</script>

2. 声音反馈

用户操作需要即时感知但不便通过视觉传达。例如:移动端设备、盲人用户辅助、警报系统等。

2.1 提示音、警告音等

表单提交成功时:

const audio = new Audio('/success.mp3');
audio.play();

用户输入错误密码时: 

const audio = new Audio('/error.mp3');
audio.play();

3. 文本提示

需要向用户提供明确的操作结果或错误原因。

3.1 通知栏提示

🌰:数据保存成功后,页面右上角弹出提示。

ElMessage.success('保存成功!');
3.2 错误信息

🌰:表单校验错误高亮

<template>
  <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
    <!-- 邮箱输入项 -->
    <el-form-item label="邮箱" prop="email">
      <el-input v-model="form.email" placeholder="请输入邮箱" />
    </el-form-item>
    <!-- 提交按钮 -->
    <el-form-item>
      <el-button type="primary" @click="handleSubmit">提交</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
import { reactive, ref } from 'vue';

export default {
  setup() {
    const form = reactive({
      email: '',
    });
    const formRef = ref(null);
    // 校验规则
    const rules = {
      email: [
        { required: true, message: '邮箱不能为空', trigger: 'blur' },
        { type: 'email', message: '请输入有效的邮箱地址', trigger: 'blur' },
      ],
    };
    // 提交表单
    const handleSubmit = () => {
      // 调用校验方法
      formRef.value.validate((valid) => {
        if (valid) {
          alert('提交成功!');
        } else {
          alert('校验失败,请检查输入内容!');
        }
      });
    };
    return { form, rules, formRef, handleSubmit };
  },
};
</script>

适用场景:表单提交失败时,高亮显示错误字段。

4. 进度条

用户操作需要较长时间完成,需要明确告知用户操作的进度。

分为:

- 线性进度条:文件上传、任务进度显示。 

- 环形进度条:图表渲染、复杂计算加载。

<template>
  <div>
    <h2>线形进度条</h2>
    <el-progress :percentage="uploadProgress" />

    <h2>圆形进度条</h2>
    <el-progress :percentage="loadingProgress" type="circle" />

    <div style="margin-top: 20px;">
      <!-- 按钮控制进度条模拟 -->
      <el-button type="primary" @click="startUpload">开始上传</el-button>
      <el-button type="success" @click="startLoading">开始加载</el-button>
    </div>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    // 定义上传进度和加载进度
    const uploadProgress = ref(0);
    const loadingProgress = ref(0);

    let uploadInterval = null;
    let loadingInterval = null;

    // 模拟上传进度
    const startUpload = () => {
      clearInterval(uploadInterval);
      uploadProgress.value = 0;
      uploadInterval = setInterval(() => {
        if (uploadProgress.value >= 100) {
          clearInterval(uploadInterval);
          alert('上传完成!');
        } else {
          uploadProgress.value += 10; // 每次增加 10%
        }
      }, 500);
    };

    // 模拟加载进度
    const startLoading = () => {
      clearInterval(loadingInterval);
      loadingProgress.value = 0;
      loadingInterval = setInterval(() => {
        if (loadingProgress.value >= 100) {
          clearInterval(loadingInterval);
          alert('加载完成!');
        } else {
          loadingProgress.value += 15; // 每次增加 15%
        }
      }, 400);
    };

    return {
      uploadProgress,
      loadingProgress,
      startUpload,
      startLoading,
    };
  },
};
</script>

加载过程中展示: 

5. 弹窗反馈

需要用户主动关注并采取操作时。

5.1 确认对话框
<template>
  <el-button type="danger" @click="confirmDelete">删除</el-button>
</template>

<script>
import { ElMessageBox } from 'element-plus';

export default {
  setup() {
    const confirmDelete = () => {
      ElMessageBox.confirm('确定要删除吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
        .then(() => {
          alert('删除成功!');
        })
        .catch(() => {
          alert('已取消删除');
        });
    };
    return { confirmDelete };
  },
};
</script>

5.2 信息弹窗

用户登录成功后弹出欢迎信息。

ElMessageBox.alert('欢迎回来!', '登录成功');

6. 微交互

需要提升用户体验的小型反馈,如鼠标悬停、点击等。

6.1 鼠标悬停效果

🌰:用户悬停到商品卡片上,显示“加入购物车”按钮。

<template>
  <div class="product-card" @mouseover="showButton = true" @mouseleave="showButton = false">
    <img src="https://via.placeholder.com/150" alt="商品" />
    <el-button v-if="showButton" type="primary" size="mini"> 加入购物车 </el-button>
  </div>
</template>

<script>
import { ref } from 'vue';
export default {
  setup() {
    const showButton = ref(false);
    return { showButton };
  },
};
</script>

适用场景:商品展示、菜单交互。 

总结:

以上使用 Vue 3 和 Element Plus 组件库实现的一些简单方式,可以根据不同场景选择合适的反馈方式,提升用户体验!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2260914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenHarmony-3.HDF input子系统(5)

HDF input 子系统OpenHarmony-4.0-Release 1.Input 概述 输入设备是用户与计算机系统进行人机交互的主要装置之一&#xff0c;是用户与计算机或者其他设备通信的桥梁。常见的输入设备有键盘、鼠标、游戏杆、触摸屏等。本文档将介绍基于 HDF_Input 模型的触摸屏器件 IC 为 GT91…

旅游资源系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

Docker网络与数据管理

Docker网络与数据管理 1. Docker网络基础&#xff1a;桥接网络、主机网络和自定义网络 Docker提供了多种网络模式&#xff0c;以满足不同应用场景的需求。理解Docker的网络模式对于容器间通信、网络安全性及性能优化至关重要。在Docker中&#xff0c;每个容器都可以连接到不同…

X.game解析柚子币提升速效双向利好和年中历史新低原因

柚子币最新消息&#xff0c;币安宣布将于2024年9月25日21:00左右暂停柚子币网络上的代币存取业务&#xff0c;以全力支持即将到来的柚子币网络升级和硬分叉&#xff0c;这一消息为柚子币的未来发展增添了新的期待和变数。 除了速度的提升&#xff0c;Spring1.0还带来了诸多技术…

数据结构之线性表1

2.1 线性表的定义和基本操作 1.线性结构的特点是&#xff1a;在数据元素的非空有限集中&#xff0c; &#xff08;1&#xff09;存在惟一的一个被称做“第一个”的数据元素&#xff1b; &#xff08;2&#xff09; 存在惟一的一个被称做“最后一个”的数据元素&#xff1b; &a…

Tomcat原理(5)——tomcat最终实现

目录 一、什么是Servlet容器 二、ServletConfigMapping构建实现容器 ServletConfigMapping MyTomcat 三、优化server Server MyTomcat 四、匹配 代码如下&#xff1a; 测试如下&#xff1a; 上一篇博客已经为介绍了servelet的实现 &#xff0c;这篇对上一篇博客进行补…

echarts 常见组件合集

仪表盘组件 <template><div class"w100 h100" ref"chart"></div> </template><script> import resize from "./mixins/resize"; export default {mixins: [resize],props: ["list"],watch: {list: {// …

C/C++代码性能优化技巧的书籍及资料

使用C/C开发的场景&#xff0c;大多对代码的执行的速度&#xff0c;实时性有较高的要求&#xff0c;像嵌入式系统的开发&#xff0c;资源还受限。在算力存储空间有限的MCU上写出简洁又高效的代码实际是一种艺术。软件工程师在代码设计上的这种差距&#xff0c;会反映在产品的性…

FlightAD 解读

一 文章相关信息 出处&#xff1a;ICPADS CCF C 会议&#xff08;代码未开源&#xff09;&#xff0c;COUTA 研究团队的另一研究 二 Methodology 1. 整体架构&#xff1a; 2. Multi-Scale Sampling&#xff08;多尺度&#xff09; 实际上&#xff0c;就是对每个单通道作 “多…

20241216软考架构-------软考案例23答案

每日打卡题案例23 23.【2015年真题】 难度&#xff1a;一般 阅读以下关于系统设计建模的说明&#xff0c;回答下列问题。&#xff08;共25分&#xff09; 【说明】 某公司拟研制一款高空监视无人直升机&#xff0c;该无人机采用遥控一自主复合型控制实现垂直升降。该直升机飞行…

170页ppt解读如何进行大型集团信息安全管理体系优化咨询

文档为甲方集团信息安全管理体系优化咨询项目的信息安全建设规划报告&#xff0c;重点围绕信息安全建设的规划与设计展开。报告首先进行了信息安全建设需求分析&#xff0c;明确了当前信息安全现况存在的问题、信息安全发展趋势及具体需求汇整&#xff0c;为后续建设提供了坚实…

RK3576 Android14,内存大于4G时UVC应用无法申请内存

最近有个项目需要将Linux虚拟成UVC摄像头&#xff0c;开发过程中遇到一个奇怪的事情&#xff0c;通过V4l2框架接口申请内存时&#xff0c;相同的板子&#xff0c;只是内存一个4G一个8G。4G的内存可以申请成功&#xff0c;8G就不行。提示“内存不足” 内存更大反而内存不足&…

TimesFM(Time Series Foundation Model)时间序列预测股市价格的数据研究(4)

TimesFM&#xff08;Time Series Foundation Model&#xff09;时间序列预测的数据研究(3)-CSDN博客文章浏览阅读846次&#xff0c;点赞19次&#xff0c;收藏12次。1. **表示预测区间**&#xff1a;在很多预测任务中&#xff0c;模型给出的不只是一个单一的预测值&#xff08;比…

opencv所有常见函数

一、opencv图像操作 二、opencv图像的数值运算 三、opencv图像的放射变换 四、opencv空间域图像滤波 五、图像灰度化与直方图 六、形态学图像处理 七、阈值处理与边缘检测 八、轮廓和模式匹配

常见漏洞—SSRF_FastCGI

FastCGI协议 简介 Fast CGI源自旧版本的CGI 路由/结构图 # 访问url --> 浏览器生成HTTP请求报文 --> web server解析请求&#xff08;例如nginx&#xff09; web server 是内容的分发者 当访问静态页面时&#xff0c;web server 会直接返回资源&#xff0c;例如index.htm…

【游戏设计原理】10 - 科斯特的游戏理论

科斯特的游戏理论强调了游戏与学习之间的关系&#xff0c;认为“玩得开心”与“学习”是紧密相连的。换句话说&#xff0c;游戏的核心魅力在于通过适当的挑战和不断的学习进程激发玩家的内啡肽循环&#xff0c;这让玩家在不断的探索和进步中找到乐趣。 科斯特的理论通过游戏是…

ES-IndexTemplate和DynamicTemplate

IndexTemplate 什么是IndexTemplate 索引模板&#xff0c;帮助你设定Mappings和Settings&#xff0c;并按照一定的规则&#xff0c;自动匹配到新创建的索引之上 模板仅在一个索引被新建的时候&#xff0c;才会产生应用&#xff0c;索引被修改不会影响已创建的索引可以设定多…

【大语言模型】ACL2024论文-27 Mementos:一个全面的多模态大型语言模型在图像序列推理上的基准测试

【大语言模型】ACL2024论文-27 Mementos&#xff1a;一个全面的多模态大型语言模型在图像序列推理上的基准测试 目录 文章目录 【大语言模型】ACL2024论文-27 Mementos&#xff1a;一个全面的多模态大型语言模型在图像序列推理上的基准测试目录文章摘要研究背景问题与挑战如何…

CSS基础与应用详解

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Css篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Css篇专栏内容:CSS基础与应用详解 前言 CSS&#xff08;层叠样式表&#xff09;是网页设计中不可或缺的一部分&am…

C/S软件授权注册系统(Winform+WebApi+.NET8+EFCore版)

适用软件&#xff1a;C/S系统、Winform桌面应用软件。 运行平台&#xff1a;Windows .NETCore&#xff0c;.NET8 开发工具&#xff1a;Visual Studio 2022&#xff0c;C#语言 数据库&#xff1a;Microsoft SQLServer 2012&#xff0c;Oracle 21c&#xff0c;MySQL8&#xf…