音视频元素
目录
- HTMLMediaElement
- 网络状态 (networkState)
- 就绪状态 (readyState)
- 错误代码 (error.code)
- video
- 属性
- 方法
- 事件
- audio
HTMLMediaElement
HTMLMediaElement 是 HTML5 中 和 元素的基类,定义了它们共享的属性、方法和事件。无论你使用的是音频还是视频元素,都可以通过 HTMLMediaElement 提供的功能来控制媒体的播放、加载、状态查询等操作。
经常用到的是HTMLMediaElement 的一些静态常量:
网络状态 (networkState)
这些常量用来表示媒体资源的加载状态。
- HTMLMediaElement.NETWORK_EMPTY (值为 0): 元素尚未初始化。
- HTMLMediaElement.NETWORK_IDLE (值为 1): 浏览器选择不下载媒体数据。
- HTMLMediaElement.NETWORK_LOADING (值为 2): 浏览器正在下载数据。
- HTMLMediaElement.NETWORK_NO_SOURCE (值为 3): 没有找到源。
就绪状态 (readyState)
该常量最常用,描述了媒体元素中可用的数据量,用来判断是否可以获取到长宽等元素据、或者是否可以获取首帧。(使用该常量时,需要将 video 元素的 preload 设置为 auto)
- HTMLMediaElement.HAVE_NOTHING (值为 0): 尚未获取任何数据。
- HTMLMediaElement.HAVE_METADATA (值为 1): 已获取足够的数据以确定媒体的时长和其他轨道信息,但不足以播放。
- HTMLMediaElement.HAVE_CURRENT_DATA (值为 2): 当前播放位置的数据是可用的,但不足以顺利播放接下来的内容。
- HTMLMediaElement.HAVE_FUTURE_DATA (值为 3): 当前播放位置的数据以及未来至少一帧的数据是可用的。
- HTMLMediaElement.HAVE_ENOUGH_DATA (值为 4): 媒体足以顺利播放而不会因为缺乏数据而中途停止。
错误代码 (error.code)
如果媒体加载或播放过程中遇到问题,可以通过 mediaElement.error 获取一个 MediaError 对象,并通过该对象的 code 属性了解具体的错误原因。
- MediaError.MEDIA_ERR_ABORTED (值为 1): 取消了媒体加载操作。
- MediaError.MEDIA_ERR_NETWORK (值为 2): 在媒体加载期间发生网络错误,导致加载被中断。
- MediaError.MEDIA_ERR_DECODE (值为 3): 媒体解码失败。
- MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED (值为 4): 不支持媒体资源的格式或 MIME 类型。
video
属性
-
controls:显示视频播放控件(如播放/暂停按钮、音量控制等)。
-
autoplay:页面加载完成后自动播放视频。
-
loop:视频结束后从头开始播放。
-
muted:静音播放视频。
-
poster:指定一个图像的 URL,在视频数据不可用时显示。
-
preload提示浏览器如何提前加载视频数据,可选值有 none(不预加载)、metadata(仅加载元数据)、auto(尽可能多地预加载)。
-
src:视频文件的 URL。
-
currentTime:获取或设置视频中的当前播放位置(秒)。
-
duration:只读,返回视频的长度(秒),如果持续时间未知则返回NaN
-
paused:只读,返回一个布尔值,表示视频是否处于暂停状态。
-
volume:获取或设置音频音量,范围是 0.0 到 1.0。
-
muted:获取或设置视频是否静音。
-
readyState:是 HTML5 和 元素的一个属性,用于指示媒体资源的加载状态。它返回一个整数值,代表当前媒体元素处于哪一个加载阶段
readyState的可能值:
- 0 (HAVE_NOTHING):
- 尚未加载任何数据。1 (HAVE_METADATA):
- 1 (HAVE_METADATA):
- 已加载足够的数据以获取媒体的基本元数据(如时长、尺寸等),但不足以播放第一帧。
- 2 (HAVE_CURRENT_DATA):
- 当前时间点的数据已经可用,因此可以查询例如宽度和高度等信息,但是没有足够的数据来播放整个视频流或音频流。
- 3 (HAVE_FUTURE_DATA):
- 当前播放位置的数据以及未来至少一帧的数据已经可用,这意味着如果视频正在播放,它可以不中断地继续播放一段时间。
- (HAVE_ENOUGH_DATA):
- 媒体资源足够完整,足以顺利播放而不会因为缺乏数据而中途停止。这并不意味着整个文件已经被下载完毕,而是有足够的数据确保平滑播放。
- 0 (HAVE_NOTHING):
-
defaultMuted:布尔值,指定视频在播放时是否默认静音。注意这与 muted 属性不同,后者用于动态控制当前是否静音。
-
defaultPlaybackRate:获取或设置默认的播放速率。这个值是用户未手动更改播放速度时使用的速率,默认为 1.0。
-
playbackRate:获取或设置当前的播放速率。例如,设置为 2.0 可以实现双倍速播放。
-
played:返回一个 TimeRanges 对象,表示已经播放过的媒体片段范围。
-
seekable:返回一个 TimeRanges 对象,表示可以跳转到的媒体片段范围(即已加载且可以播放的部分)。
-
ended:只读属性,返回一个布尔值,指示视频是否因为播放完毕而停止。
-
error:如果发生错误,则返回一个 MediaError 对象,提供有关错误的信息;如果没有错误则返回 null。
-
networkState:只读属性,指示网络状态,可用于检测视频资源是否成功加载。可能的值包括:
- NETWORK_EMPTY (0) - 元素尚未初始化。
- NETWORK_IDLE (1) - 浏览器选择不下载媒体数据。
- NETWORK_LOADING (2) - 浏览器正在下载数据。
- NETWORK_NO_SOURCE (3) - 没有找到源。
-
textTracks:返回一个 TextTrackList 对象,包含所有关联的文本轨道(如字幕或描述)。
方法
- play():开始播放视频。
- pause():暂停当前播放的视频。
- load():重新加载视频元素,常用于动态改变后更新视频内容。
- canPlayType(type):检查浏览器是否能播放指定类型的视频文件。参数为 MIME 类型字符串,返回"probably"、"maybe"或空字符串(不支持)。
- addTextTrack():向媒体添加一个新的文本轨道(例如,用于字幕)。
- fastSeek():快速跳转到指定的时间点。
事件
- play:当视频开始播放时触发。
- pause:当视频暂停时触发。
- ended:当视频播放结束时触发。
- timeupdate:当当前播放位置发生变化时触发。
- progress:当浏览器正在下载视频数据时周期性地触发。
- loadedmetadata:当浏览器已加载视频的元数据(如长度和尺寸)时触发。
- 此时可获取 video元素的宽高的数据
- loadeddata:当浏览器已加载视频的当前帧时触发。
- 此时可获取 video 元素的首帧
- volumechange:当音量改变时(包括静音状态改变)触发。
- error:当发生错误时触发,可以用来捕获视频加载失败等情况。
- waiting:当视频由于需要缓冲下一帧而暂停时触发。
- seeking:当用户开始拖动进度条寻找新的播放位置时触发。
- seeked:当用户完成拖动进度条并选择了新的播放位置时触发。
- ratechange:当播放速率发生变化时触发。
- suspend:当浏览器主动暂停下载媒体数据时触发。
audio
音频元素的属性、方法、事件,此处不再赘述,除了视频独有的一些属性、方法、事件,两者并无太多不同,因为两者均继承HTMLMediaElement。
相关文章:
音视频元素
目录 HTMLMediaElement网络状态 (networkState)就绪状态 (readyState)错误代码 (error.code) video属性方法事件 audio HTMLMediaElement HTMLMediaElement 是 HTML5 中 和 元素的基类,定义了它们共享的属性、方法和事件。无论你使用的是音频还是视频元素࿰…...
音视频小白系统入门课-2
本系列笔记为博主学习李超老师课程的课堂笔记,仅供参阅 课程传送门:音视频小白系统入门课 音视频基础ffmpeg原理 往期课程笔记传送门: 音视频小白系统入门笔记-0音视频小白系统入门笔记-1 课程实践代码仓库:传送门 音视频编解…...
时序逻辑电路——序列检测器
文章目录 一、序列检测二、牛客真题1. 输入序列连续的序列检测(输入连续、重叠、不含无关项、串行输入)写法一:移位寄存器写法二:Moore状态机写法三:Mealy状态机 一、序列检测 序列检测器指的就是将一个指定的序列&…...
#systemverilog# 进程控制问题#(八)关于#0 问题的使用(三)
今天,我们继续研究一下上一节讨论的问题。其实,还有一个小问题,我们来探讨一下。 `timescale 1ns/10psmodule tb_top(); reg clk; reg reset;initial begin reset = 0; #10 reset = 1; #15 reset = 0; #50 $finish; endinitial beginfor(int i = 0; i < 4 ; i++)fork #…...
k8s低版本1.15安装prometheus+grafana进行Spring boot数据采集
目录 一、背景: 二、实施过程 1).安装地址:https://github.com/prometheus-operator/kube-prometheus 2).安装方式两种, 3).安装Prometheus需要对照k8s集群版本。 4).拉去prometheus 5).导…...
Spring-Ioc容器的加载过程?
大家好,我是锋哥。今天分享关于【SpringIoC的实现机制是什么?】面试题。希望对大家有帮助; Spring-Ioc容器的加载过程? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring IoC容器的加载过程是指在应用启动时&…...
kaamel Privacy agent:AI赋能的隐私保护技术解决方案
智能隐私合规解决方案 在当今数字经济环境下,有效的隐私合规已成为企业运营的基础要求。全球范围内已有超过120项隐私法规生效,这对企业的数据处理流程提出了严峻挑战。kaamel Privacy agent作为专门为隐私合规领域设计的AI引擎,通过自动化技…...
从零到上线!AI生成SpringBoot项目脚手架实战(含K8s+Docker配置)
在 Java 开发领域,搭建 Spring Boot 项目脚手架是一项耗时且繁琐的工作。传统方式下,开发者需要手动配置各种依赖、编写基础代码,过程中稍有疏忽就可能导致配置错误,影响开发进度。如今,随着 AI 技术的迅猛发展,飞算 JavaAI 的出现为开发者带来了全新解决方案,让自动生成 Sprin…...
VueRouter笔记
定义路由 import { createMemoryHistory, createRoute } from vue-router; import MyView1 from ./MyView1.vue; import MyView2 from ./MyView2.vue;const routes [{ path: /1, component: MyView1 },{ path: /2, component: MyView2 } ];const router createRouter({histo…...
vue3 Element-plus修改内置样式复现代码
笔者在修改Element-plus的内置样式时,遇到一点挫折,现提供需求场景与解决方案。 一、实现(1)透明弹窗可拖拽,且不影响点击弹窗外内容;(2)弹窗内置表格,表格需修改样式颜色…...
easyui进度条
简单打开和关闭 // 展示进度条 $.messager.progress({title: 请稍候,msg: 系统处理中...,text: 0%});//关闭进度条 $.messager.progress(close); easyui 普通提示 <!DOCTYPE html> <html> <head><meta charset"UTF-8">&l…...
vcpkg缓存问题研究
vcpkg缓存问题研究 问题描述解决方案官网给出的方案其实并不是大多数人语境中的“清除缓存”实际解决方案 问题描述 使用vcpkg管理c的库的时候,vcpkg会在c盘某些地方缓存下载的库,如果安装的库过多,这个缓存文件夹会过大占用磁盘空间&#x…...
优化WAV音频文件
优化 WAV 音频文件通常涉及 减小文件体积、提升音质 或 适配特定用途(如流媒体、广播等)。以下是分场景的优化方法,涵盖工具和操作步骤: 一、减小文件体积(无损/有损压缩) 1. 无损压缩 转换格式࿱…...
系统架构设计师:流水线技术相关知识点、记忆卡片、多同类型练习题、答案与解析
题目: 流水线技术中,若某流水线分为5段,每段执行时间为Δt,则执行100条指令的总时间为( ) A. 100Δt B. 104Δt C. 500Δt D. 505Δt 答案:B 解析:流水线总时间(nk-1)Δt&#…...
test ssl java
// 文件名:SslUtilsTest.java// 包路径: import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.io.InputStream; import java.security.KeyStore; import javax.net.ssl.SSLContext; import org.apache.hc.client5…...
【系统分析师】-软件工程
考点汇总 考点详情 软件生存周期:可行性分析与项目开发计划,需求分析,概要设计,详细设计,编码,测试,维护 软件能力成熟度模型 CMM:初始级,可重复级,已定义级…...
FFmpeg 硬核指南:从底层架构到播放器全链路开发实战 基础
目录 1.ffmpeg的基本组成2.播放器的API2.1 复用器阶段2.1.1 分配解复用上下文2.1.2 文件信息操作2.1.3 综合示例 2. 2 编解码部分2.2.1 分配解码器上下文2.2.2编解码操作2.2.3 综合示例 3 ffmpeg 内存模型3.1 基本概念3.2API 1.ffmpeg的基本组成 模块名称功能描述主要用途AVFo…...
2025MathorcupD题 短途运输货量预测及车辆调度问题 保姆级教程讲解|模型讲解
2025Mathorcup数学建模挑战赛(妈妈杯)D题保姆级分析完整思路代码数据教学 其中更详细的思路,各题目思路、代码、讲解视频、成品论文及其他相关内容,可以点击下方群名片哦!...
CSS 包含块
CSS 中的包含块(Containing Block)是一个非常重要的概念,它定义了元素在布局中的参考框架。元素的尺寸、位置和偏移量通常都是基于其包含块来计算的。理解包含块的概念对于掌握 CSS 布局至关重要。 1. 包含块的作用 定位元素:当…...
嵌入式设备网络的动态ID分配机制实现
文章目录 前言一、系统设计要点二、核心数据结构2.1 设备唯一标识(DeviceUID)2.2 节点信息(Node)2.3 节点管理器(NodeManager) 三、核心算法实现3.1 初始化与清理3.1.1 初始化节点管理器3.1.2 清理节点管理器 3.2 动态ID分配策略3.2.1 查找最小可用ID3.2.2 ID使用检查 3.3 心跳…...
(论文阅读)RNNoise 基于递归神经网络的噪声抑制库
RNNoise 是一个基于递归神经网络的噪声抑制库。 有关该算法的描述见以下论文: J.-M. Valin, A Hybrid DSP/Deep Learning Approach to Real-Time Full-Band Speech Enhancement, Proceedings of IEEE Multimedia Signal Processing (MMSP) Workshop, arXiv:1709.08…...
Linux:线程概念与控制
✨✨所属专栏:Linux✨✨ ✨✨作者主页:嶔某✨✨ Linux:线程概念于控制 var code “d7e241ae-ed4d-475f-aa3d-8d78f873fdca” 概念 在一个程序里的一个执行路线就叫做线程thread。更准确一点:线程是“一个进程内部的控制序列” …...
双轮驱动能源革命:能源互联网与分布式能源赋能工厂能效跃迁
在全球能源结构深度转型与“双碳”目标的双重驱动下,工厂作为能源消耗的主力军,正站在节能变革的关键节点。能源互联网与分布式能源技术的融合发展,为工厂节能开辟了全新路径。塔能科技凭借前沿技术与创新实践,深度探索能源协同优…...
网络安全-Burp Suite基础篇
声明 本文主要用做技术分享,所有内容仅供参考。任何使用或者依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律法规。 1 Burp Suite功能介绍 1.1 Burp Suite 简介 Burp Suite 是一款极为强大且广受欢迎的集成化 …...
从人工到智能:外呼系统如何重构企业效率新生态
在数字化转型的浪潮中,智能外呼系统正从边缘辅助工具演变为企业效率革命的核心引擎。根据Gartner最新调研数据,部署AI外呼系统的企业客服效率平均提升68%,销售线索转化率增长42%。但在这场技术驱动的变革中,真正决定成败的往往不是…...
折扣电影票api对接详细指南,如何对接?
以下是折扣电影票 API 对接的一般指南: 对接前准备 明确需求:确定对接的目的和所需功能,如电影信息查询、场次查询、座位预订、支付等。明确支持的数据字段和业务流程。选择 API 服务提供商:选择技术成熟、服务稳定、覆盖范围广的…...
初识Redis · 客户端“Hello world“
目录 前言: 环境配置 Hello world 前言: 前文我们已经介绍了Redis的不常见的五种数据类型,并且补充了几个渐进式命令和数据库管理命令等,最后简单认识了一下RESP协议,但是老实说,我们只能算是知道了这个…...
51单片机实验一:点亮led灯
目录 一、实验环境与实验器材 二、实验内容及实验步骤 1.用keil 软件创建工程,C文件编写程序,编译生成hex文件编辑 2.用STC烧写hex文件,点亮第一个LED灯 3.使用法2,点除第一个以外的LED灯 一、实验环境与实验器材 环境&am…...
基于WOA鲸鱼优化的NARMAX模型参数辨识算法MATLAB仿真,对比PSO优化算法
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 NARMAX模型定义 4.2 鲸鱼优化算法WOA原理 4.3 粒子群优化算法PSO原理 5.完整程序 1.程序功能描述 基于WOA鲸鱼优化的NARMAX模型参数辨识算法MATLAB仿真,对比PSO优化算法。分别通过WOA…...
AWS上构建基于自然语言的数值和符号计算系统
我想要实现一个通过使用C#、Semantic Kernel库、OpenAI GPT 4的API和以下使用C#开源库MathNet实现通过中文自然语言提示词中包含LATEX代码输入到系统,通过以下符号和数值计算和其它符号和数值计算程序输出计算结果和必要步骤的应用,这样的数学计算使用程序直接产生结果,可以…...
2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(三级)真题
青少年软件编程(Python)等级考试试卷(三级) 分数:100 题数:38 答案解析:https://blog.csdn.net/qq_33897084/article/details/147341388 一、单选题(共25题,共50分) 1. 学校进行体…...
校平机:精密制造的“材料雕刻家“
在液晶面板生产线的无尘车间里,一片薄如蝉翼的玻璃基板正经历纳米级的形态修正;在新能源电池极片生产线上,铜箔以每秒5米的速度穿越精密辊系,完成微米级的平整蜕变。这些现代工业的"毫米级魔术",都离不开一台…...
FPGA HR Bank如何支持ODELAY问题分析
目录 1.ODELAY简单介绍 2.IODELAY 的特性 3.IODELAY 的 资源支持的管脚 4.HR bank如何支持ODELAY固定延迟 1.ODELAY简单介绍 FPGA 中的 IODELAY(Input/Output Delay),这是 Xilinx(现 AMD)FPGA 中一种用于精确控制输入/输出信号时序延迟的硬件资源。以下是关于 IODELAY…...
深入解析C++驱动开发实战:优化高效稳定的驱动应用
深入解析C驱动开发实战:优化高效稳定的驱动应用 在现代计算机系统中,驱动程序(Driver)扮演着至关重要的角色,作为操作系统与硬件设备之间的桥梁,驱动程序负责管理和控制硬件资源,确保系统的稳定…...
高级java每日一道面试题-2025年4月13日-微服务篇[Nacos篇]-Nacos如何处理网络分区情况下的服务可用性问题?
如果有遗漏,评论区告诉我进行补充 面试官: Nacos如何处理网络分区情况下的服务可用性问题? 我回答: 在讨论 Nacos 如何处理网络分区情况下的服务可用性问题时,我们需要深入理解 CAP 理论以及 Nacos 在这方面的设计选择。Nacos 允许用户根据具体的应用…...
07_Docker 资源限制
Docker 容器做资源限制,是为了不让某个容器抢光 CPU、内存等主机资源,保证所有容器都能稳定运行,还能避免宿主机资源被耗尽,让资源利用更高效,也方便管理和满足服务的性能要求。 监控容器资源使用情况 docker stats …...
Flutter Notes | 我用到的一些插件整理
Flutter开发必备插件推荐与iOS上架工具分享 前言 一个项目的开始和结束,总会遇到很多意料之外的东西。大神和菜鸟的区别,个人感觉更多的是大神花费了很多私下时间去了解每个问题的根本是什么,而我这小菜鸟,仅仅网上浪一圈&#…...
WordPress自定义页面与文章:打造独特网站风格的进阶指南
文章目录 引言一、理解WordPress页面与文章的区别二、主题与模板层级:自定义的基础三、自定义页面模板:打造专属页面风格四、自定义文章模板:打造个性化文章呈现五、使用自定义字段和元数据:增强内容灵活性六、利用WordPress钩子&…...
golang channel源码
解析 数据结构 hchan:channel 数据结构 qcount:当前 channel 中存在多少个元素; dataqsize: 当前 channel 能存放的元素容量; buf:channel 中用于存放元素的环形缓冲区; elemsize:channel 元素…...
麒麟操作系统漏洞修复保姆级教程弱(一)算法漏洞修复
如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 目录 一、相关问题 二、建议修复方法 修复方案(方案一和方案二是错误示范,干货在方案三) 方案一、首先我想按照第一步,将OpenSSH升级解决这一漏洞…...
汉诺塔专题:P1760 通天之汉诺塔 题解 + Problem D: 汉诺塔 题解
1. P1760 通天之汉诺塔 题解 题目背景 直达通天路小A历险记第四篇 题目描述 在你的帮助下,小 A 成功收集到了宝贵的数据,他终于来到了传说中连接通天路的通天山。但是这距离通天路仍然有一段距离,但是小 A 突然发现他没有地图࿰…...
vscode中markdown一些插件用不了解决方式
我发现我安装了vscode的一些插件,但是没起效果(就是该插件暗淡了),后面得知,是因为没有信任工作空间。 This extension has been disabled because the current workspace is not trusted 这个提示信息表明,…...
Python爬虫第16节-动态渲染页面抓取之Selenium使用上篇
目录 前言 一、Selenium的简介和学习准备 二、Selenium基本使用 三、声明浏览器对象 四、访问页面 五、查找节点 5.1 单个节点 5.2 多个节点 六、节点交互 七、动作链 八、执行JavaScript 前言 本专栏之前的内容,我们讲了怎么分析和抓取Ajax,…...
KMP算法动态演示
KMP算法 1.动态演示 https://tsccg-oss.oss-cn-guangzhou.aliyuncs.com/image/KMP%E7%AE%97%E6%B3%95%E5%8A%A8%E6%80%81%E6%BC%94%E7%A4%BA.gif 2.代码实现 Testpublic void test5(){String parent "ABC ABCDAB ABCDABCDABDE";String child "ABCDABD&quo…...
linux获取cpu使用率(sy%+us%)
float getCpuUsage() { // C11兼容的元组解包 typedef std::tuple<unsigned long long, unsigned long long, unsigned long long> CpuTuple; auto parseCpuLine [](const std::string& line) -> CpuTuple { std::istringstream iss(line); …...
ESP-IDF教程2 GPIO - 输入、输出和中断
文章目录 1、前提1.1、基础知识1.1.1、GPIO 分类1.1.2、FALSH SPI 模式1.1.3、过滤器1.1.4、外部中断 1.2、数据结构1.2.1、GPIO1.2.2、毛刺过滤器 1.3、硬件原理图 2、示例程序2.1、GPIO 输出 - 点亮 LED 灯2.2、GPIO 输入 - 按键响应2.3、GPIO 外部中断 - 按键响应 3、常用函…...
Ubuntu安装MySQL步骤及注意事项
一、安装前准备 1. 系统更新:在安装 MySQL 之前,确保你的 Ubuntu 系统软件包是最新的,这能避免因软件包版本问题导致的安装错误,并获取最新的安全补丁。打开终端,执行以下两条命令: sudo apt update sudo …...
支持mingw g++14.2 的c++23 功能print的vscode tasks.json生成调试
在mingw14.2版本中, print库的功能默认没有开启, 生成可执行文件的tasks.json里要显式加-lstdcexp, 注意放置顺序. tasks.json (支持mingw g14.2 c23的print ) {"version": "2.0.0","tasks": [{"type": "cppbuild","…...
WPF常用技巧汇总
主要用于记录工作中发现的一些问题和常见的解决方法。 此文会持续更新。 >abp new Evan.MyWpfApp -t wpf --old --framework .net8 1. 解决不同屏幕分辨率下的锯齿问题 UseLayoutRounding"True" <Grid UseLayoutRounding"True"><Border Mar…...
【文件操作与IO】详细解析文件操作与IO (一)
本篇博客给大家带来的是文件操作的知识点. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 要开心要快乐顺便进步 一. …...