HTML怎么做消息已读标记_HTML消息已读未读标记实现【精选】

小枫君_3380

小枫君_3380

2026-04-16

692人浏览

原创

data-read 属性必须写死在 html 或由 js 安全注入,值强制转为字符串“0”/“1”,禁用布尔值或空属性;点击已读仅更新 dataset.read,样式交由 css 控制;未读计数以服务端接口为准,localstorage 仅作瞬时缓存与中间态标记。

html怎么做消息已读标记_html消息已读未读标记实现【精选】

data-read 属性必须写死在 HTML 或由 JS 安全注入

服务端渲染时,data-read 值应直接输出到 DOM(如 <li data-read="0">...</li>),避免 JS 初始化时二次请求拉取状态导致闪烁或错位。若走纯前端渲染,JS 注入时必须用 el.dataset.read = "0" 而非 el.setAttribute("data-read", 0)——后者在 Vue/React 中可能被框架自动转为布尔值并移除属性。

常见错误:后端返回 JSON 里字段叫 is_read,前端却直接 data-read="{{ is_read }}",结果 false 或 0 导致属性消失,CSS 选择器 [data-read="0"] 失效。

  • 始终强制转字符串:data-read={String(item.is_read)}(React)或 :attr="{ 'data-read': item.is_read ? '1' : '0' }"(Vue)
  • 初始 HTML 里别留空 data-read,也别写 data-read="",这等价于未定义,CSS 无法匹配
  • 服务端模板中,确保布尔值已转为 "0"/"1" 字符串,不是 true/false

点击已读时只改 dataset,不删节点也不切 class

用户点击某条消息,前端要做的唯一 DOM 操作就是 el.dataset.read = "1"。后续所有样式变化、角标隐藏、列表项变灰,全部交给 CSS 控制,比如:

[data-read="0"] { opacity: 1; }
[data-read="1"] { opacity: 0.6; }
[data-read="0"] .badge { display: block; }
[data-read="1"] .badge { display: none; }

用 class 切换(如 el.classList.toggle("read"))看似直观,但容易和框架生命周期冲突:React/Vue 可能因 key 变化或 diff 策略重绘整个列表,导致动画中断、状态丢失;更糟的是,某些 UI 库会把 class 当作“真实状态”用于无障碍朗读,造成语义错误。

  • 不要用 el.remove() 或 innerHTML = "" 清空未读项——这破坏 DOM 结构,影响滚动位置和屏幕阅读器焦点
  • 批量已读时,遍历选中项统一设 dataset.read = "1",再触发一次 CSS 重绘,别逐个删 DOM
  • 如果需加“已读”动效(如淡出),用 opacity + transition,禁用 display: none ——它无法过渡

未读计数必须和服务端对齐,localStorage 只缓存不决策

页面右上角铃铛里的数字,不能靠前端统计 DOM 上 data-read="0" 的数量得出。用户可能在其他设备已读,或后端有延迟同步逻辑。正确流程是:每次进入消息页或下拉刷新时,调接口拉取真实未读数(如 /api/messages/unread-count),再用该值更新 data-count 和铃铛显示。

html-to-pptx-converter
html-to-pptx-converter

使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。

下载

localStorage 只用来做两件事:一是页面加载瞬间快速展示旧计数(避免白屏等待),二是标记“本地已点开但服务端尚未响应”的中间态(比如点击后立刻 count--,同时发请求,失败则回滚)。它永远不是真相源。

  • 接口返回 { count: 5, list: [...] } 后,先写入 localStorage.setItem('unreadCount', '5'),再渲染 UI
  • 用户点击某条消息时,立即执行 el.dataset.read = "1" 并本地减一,但别信这个结果——服务端回调成功后再确认
  • 若接口报错(如网络失败),从 localStorage 恢复原始计数,并给用户 toast 提示“标记失败,请重试”

移动端左滑标记已读要防误触,且必须带视觉反馈

左滑触发已读,核心是监听 touchstart → touchmove → touchend,计算横向位移是否超过阈值(建议 ≥ 60px),同时排除纵向滑动(Math.abs(dy) )。关键点在于:滑动过程中就要给用户明确反馈,否则不知道操作是否生效。

反馈方式推荐两种之一:一是滑动时让列表项背景色渐变(background-color: rgba(0,120,215,0.1) → 0.3),二是右侧露出“已读”文字标签(用 transform: translateX() 配合 overflow: hidden 容器)。千万别等松手才变色——用户松手前根本不确定自己滑对了没。

  • 滑动阈值别设太小(如 20px),否则易和正常滚动冲突;也别太大(如 120px),影响操作效率
  • 滑动结束未达阈值,必须用 transform: translateX(0) 回弹,不能靠 CSS 过渡硬撑,否则卡顿
  • 左滑成功后,仍要调用 markAsRead(id) 发请求,不能只改前端状态——这是最常被跳过的一步

真正难的不是怎么写 data-read,而是当用户在手机上左滑、在电脑上点击、在平板上长按三处同时操作时,如何让 data-read 始终和服务端那个单点 truth 保持一致。这个一致性,得靠每次交互都发请求、每次加载都拉最新、每次失败都可回滚来兜住,而不是靠某个 DOM 属性或本地缓存自欺欺人。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

html

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

6275

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

3512

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

3190

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

3219

5

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2023.08.11

4939

6

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2023.08.11

3161

3

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

2969

3

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

2023.09.01

2608

6

HTML嵌入CSS样式的方法
HTML嵌入CSS样式的方法

HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.20

2688

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
GDB 17.2 官方文档集合
GDB 17.2 官方文档集合

共0课时 | 0人学习

Bootstrap 入门安装配置
Bootstrap 入门安装配置

共0课时 | 0人学习

38+ PhpStorm 提示和技巧
38+ PhpStorm 提示和技巧

共1课时 | 224人学习