UI组件前端【免费下载链接】wired-elementsCollection of custom elements that appear hand drawn. Great for wireframes or a fun look.项目地址https://gitcode.com/gh_mirrors/wi/wired-elements点击查看免费下载wired-video是 wired-elements 组件库中的视频播放器组件它以手绘hand-drawn / sketchy风格的边框呈现视频画面并内置了同样风格化的播放控制栏非常适合在 wireframe线框图、原型演示或追求趣味视觉的页面中直接使用。阅读本文后你将掌握wired-video的安装引入、全部属性配置、CSS 变量定制方法并能从源码层面理解其手绘边框 自绘进度条 音量滑杆的完整实现原理。组件概览wired-video是一个基于 Lit 与 RoughJS 构建的自定义元素Custom Element对外暴露标签名wired-video。它包装了原生video元素并在其上层叠加了手绘风格的矩形边框由 RoughJS 随机抖动路径绘制底部控制栏进度条wired-progress、播放/暂停按钮wired-icon-button、时间显示、音量滑杆wired-slider与音量图标。你可以在 docs/wired-video.md 查看官方简版文档在 examples/video.html 查看可直接运行的演示页面。安装与引入通过 npm 安装将 wired-elements 加入你的 JavaScript 项目npm i wired-elements安装完成后包内提供 ESM 构建产物入口文件为lib/wired-elements.js见 package.json类型声明位于lib/wired-elements.d.ts。在模块脚本中导入按需导入WiredVideo类即可两种写法等价import { WiredVideo } from wired-elements; // 或按单组件文件导入 import { WiredVideo } from wired-elements/lib/wired-video.js;其中WiredVideo类是组件的实际实现类源码见 src/wired-video.ts通过customElement(wired-video)装饰器注册为自定义元素它也被统一从 src/wired-elements.ts 的export * from ./wired-video中对外导出。若你引入的是整个组件库页面中所有 wired 系列组件会一并注册。直接通过 CDN 加载不经过打包工具时可把 ES Module 直接加载进 HTML 页面script typemodule srchttps://unpkg.com/wired-elements/lib/wired-video.js?module/script基本用法在 HTML 中直接书写自定义标签即可wired-video autoplay muted loop srcvideo.mp4/wired-video组件内部会创建一个原生video元素并将上述属性透传给它见 src/wired-video.ts。属性也可以按 Web Component 惯例用 JavaScript 动态设置例如const video document.querySelector(wired-video); video.src another.mp4; video.muted true;属性Properties一览wired-video对外暴露 5 个公开属性均与原生video的对应能力一一映射属性类型默认值说明srcString视频文件的 URL直接赋给内部video的srcautoplayBooleanfalse是否自动播放loopBooleanfalse是否循环播放mutedBooleanfalse是否静音播放playsinlineBooleanfalse是否在移动端内联播放iOS Safari 等环境源码中这些属性通过 lit 的property装饰器声明见 src/wired-video.tsproperty({ type: String }) src ; property({ type: Boolean }) autoplay false; property({ type: Boolean }) loop false; property({ type: Boolean }) muted false; property({ type: Boolean }) playsinline false;在render()模板中它们被绑定到内部video元素的对应属性上.autoplay、.loop、.muted、.playsinline使用属性绑定语法src直接作为属性输出因此原生视频元素支持的播放策略行为都会正常生效。注意playsinline属性的 HTML 写法是小写整体与组件属性名保持一致。需要说明的是autoplay的最终行为仍受浏览器自动播放策略约束例如移动端通常要求静音后才允许自动播放组件本身不绕过浏览器策略建议在自动播放场景下配合muted一起使用这也是 examples/video.html 中演示页面采用autoplay playsinline muted loop组合的原因。控制栏与内置交互wired-video自带一套完整的播放控制 UI全部由 wired 系列组件拼装而成见 src/wired-video.ts进度条wired-progress显示当前播放进度百分比 0100播放/暂停wired-icon-button内容在播放时为||、暂停时为▶时间显示格式为分:秒形如1:23 / 4:56currentTime / duration音量滑杆wired-slider范围 0100拖动即调整音量。对应的事件与处理逻辑如下原生事件处理函数行为play内联赋值playing true更新播放按钮状态pause内联赋值playing false更新播放按钮状态canplaycanPlay()用当前音量01初始化滑杆值乘以 100timeupdateupdateTime()计算进度百分比并更新时间显示进度计算逻辑见 src/wired-video.tsprivate updateTime() { if (this.video this.progressBar) { this.progressBar.value this.video.duration ? Math.round((this.video.currentTime / this.video.duration) * 100) : 0; this.timeDisplay ${this.getTimeDisplay(this.video.currentTime)} / ${this.getTimeDisplay(this.video.duration)}; } }播放/暂停与音量控制见 src/wired-video.tsprivate togglePause() { if (this.video) { if (this.playing) { this.video.pause(); } else { this.video.play(); } } } private volumeChange() { if (this.video this.slider) { this.video.volume this.slider.value / 100; } }可以看出音量滑杆的 0100 数值会在volumeChange中换算为 01 的video.volume取值反向地canPlay在视频可播放时把当前音量回填到滑杆保证 UI 与真实音量一致。手绘边框的绘制原理wired-video继承自WiredBasesrc/wired-base.ts这是 wired-elements 所有组件的公共基类负责管理 SVG 画布、尺寸变化重绘与wired-rendered类切换组件渲染完成后透明度从 0 变为 1。组件在draw()中绘制手绘矩形边框见 src/wired-video.tsprotected draw(svg: SVGSVGElement, size: Point) { rectangle(svg, 2, 2, size[0] - 4, size[1] - 4, this.seed); }其中rectangle是 src/wired-lib.ts 中导出的绘图工具函数基于 RoughJS 生成带随机抖动的线条路径this.seed是组件实例化时生成的随机种子Math.floor(Math.random() * 2 ** 31)因此每个实例的手绘笔迹都不尽相同这正是 sketchy 视觉效果的来源。此外组件在构造时检测window.ResizeObserver可用时用它监听自身尺寸变化并触发wiredRender()重绘否则退化为监听window.resize事件见 src/wired-video.ts、src/wired-video.ts保证容器尺寸变化后手绘边框依然贴合视频画面。CSS 自定义变量组件通过一个 CSS 变量暴露主题色控制进度条与音量滑杆旋钮的颜色变量说明默认值--wired-video-highlight-color进度条颜色与音量滑杆旋钮颜色rgb(51, 103, 214)蓝色在源码样式中该变量被映射到内部两个子组件的主题色见 src/wired-video.ts:host { --wired-progress-color: var(--wired-video-highlight-color, rgb(51, 103, 214)); --wired-slider-knob-color: var(--wired-video-highlight-color, rgb(51, 103, 214)); }--wired-progress-color由 src/wired-progress.ts 读取作为进度条填充路径path.progbox的描边颜色--wired-slider-knob-color由 src/wired-slider.ts 中的滑块旋钮样式读取。使用方式在wired-video或其祖先元素上设置该变量即可示例 examples/video.html 演示了通过类名覆盖主题色.pink { --wired-video-highlight-color: purple; }wired-video classpink srchttps://file-examples-com.github.io/uploads/2017/04/file_example_MP4_480_1_5MG.mp4/wired-video运行examples/video.html后可以看到两个视频一个使用默认蓝色高亮另一个通过.pink类变为紫色高亮。完整示例在页面中接入结合上述内容一个完整的最小页面如下!DOCTYPE html html head script typemodule srchttps://unpkg.com/wired-elements/lib/wired-video.js?module/script style body { margin: 0; padding: 10px; font-family: sans-serif; line-height: 1.5; } .pink { --wired-video-highlight-color: purple; } /style /head body wired-video autoplay playsinline muted loop srchttps://file-examples-com.github.io/uploads/2017/04/file_example_MP4_480_1_5MG.mp4 /wired-video wired-video classpink srchttps://file-examples-com.github.io/uploads/2017/04/file_example_MP4_480_1_5MG.mp4 /wired-video /body /html该示例与仓库内 examples/video.html 保持一致第一个视频开启自动播放并静音循环第二个视频由用户手动点击播放两个视频分别展示默认与自定义高亮色的效果。小结wired-video把原生视频播放能力与 wired-elements 的手绘美学做了完整结合通过 5 个与原生video一一对应的属性保持功能不缩水同时用wired-progress、wired-slider、wired-icon-button拼装出风格统一的手绘控制栏再以--wired-video-highlight-color一个变量完成主题配色。对于希望让视频播放器融入线框图或手绘风页面的开发者来说这是一个开箱即用且可深度定制的选择。组件源码位于 src/wired-video.ts官方文档见 docs/wired-video.md运行示例见 examples/video.html其他组件的 API 说明可继续查阅 docs 目录。License本组件及 wired-elements 项目采用 MIT License版权归作者 Preet Shihn 所有。赞分享UI组件前端【免费下载链接】wired-elementsCollection of custom elements that appear hand drawn. Great for wireframes or a fun look.项目地址https://gitcode.com/gh_mirrors/wi/wired-elements点击查看免费下载相关推荐Wired-Elements项目中的手绘风格列表组件wired-listbox详解Wired Elements项目中的手绘风格列表组件wired listbox详解 组件概述 wired listbox是Wired Elements项目提供的UI组件前端Wired Elements项目中的手绘风格组合框组件wired-combo详解Wired Elements项目中的手绘风格组合框组件wired combo详解 引言手绘UI的魅力与实用价值 在现代Web开发中用户界面的视觉表现越来越多UI组件前端GitHub_Trending/ma/machine-learning-for-trading中的无监督学习PCA与聚类分析GitHub_Trending/ma/machine learning for trading中的无监督学习PCA与聚类分析 在量化交易领域无监督学习技术能示例工程金融科技机器学习人工智能深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
华为U2000网管验收全流程与避坑指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 9:34:31
JESD204B高速数据采集实战:Xilinx IP核配置与MicroBlaze初始化 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 9:34:25
车载屏局部不显示故障排查:COF绑定与驱动链路维修指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 9:33:53
排班休假系统选型要点:规则引擎、移动端与劳动合规 大多数企业以为排班休假系统只是把 Excel 搬到线上,实际上真正的价值是把管理者从协调冲突、计算工时、审批堆积中解放出来。
一套智能化的排班休假系统,能将排班效率提升https://www.mokahr.com/blog/tag/%e6%8e%92%e7%8f%ad%e6%95%88%e7%8e%87%e6%8f%… · 2026/9/24 10:09:57
EMC暗室使用规范与维护心得:从屏蔽效能到吸波材料的日常保养 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 10:09:57
2026企业AI办公工具选型指南:从业务场景匹配到平台评估 企业在采购AI办公工具的阶段,很容易陷入功能清单对比的误区。很多管理者会直接统计产品内置功能数量,或是单纯依据报价、品牌声量做决策,忽略工具能否适配团队真实业务流程。还有部分团队直接照搬其他行业的采购方案,上线后才发现… · 2026/9/24 10:09:50
动力电池SOC估算算法解析:从BMS基础到卡尔曼滤波实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 10:09:50
去年考过信息安全工程师,最后30天我是这么刷题的 去年这时候,我在公司做安全运维,天天跟防火墙日志、漏洞扫描报告打交道。报名信息安全工程师的时候挺自信,觉得天天干这个,考试能难到哪去。结果一做题就懵了,密码学那章AES、SM4、RSA混着出,脑子直接卡住。… · 2026/9/24 10:09:44
昆仑通态触摸屏数据记录实战:定时存盘与U盘导出全攻略 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 10:09:44
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44