前端面试题之HTML篇

1.src和href的区别

src用于替换当前元素,href用于在当前文档和引用资源之间确立联系。

src可用于img、input、style、script、iframe---同步加载执行

href可用于link、a---异步

|----------|---------------------------------------------------------------------------------------------------------------------------------------------|
| 1.用途不同 | src 用于引入外部资源,通常是图像、视频、JavaScript 文件等,它会加载并嵌入资源到页面中。 href 用于指定超链接的目标地址,通常是网页的 URL 地址,用于页面间的跳转或者外部资源的引用。 |
| 2.加载行为不同 | src 会阻塞后续的页面渲染,直到资源加载完成。例如,浏览器在遇到script或img标签时,会等待对应资源加载完毕再继续执行后续操作。 href 不会阻塞页面渲染,它仅仅是提供了跳转的地址。当浏览器解析到带有 href 的链接时,它会异步加载目标资源,并在用户点击时进行跳转。 |
| 3.影响范围不同 | src 影响的是元素本身,指定的资源会直接嵌入到该元素中。 href 影响的是页面间的跳转或外部资源的加载,点击链接后,页面或资源会加载到新的位置。 |

2.对HTML语义化的理解

语义化:根据内容的结构化(内容语义化),选择合适的标签(代码语义化)。

具体来讲就是---在编写HTML代码时,使用具有明确含义的标签来构建网页内容的过程。这些标签不仅描述了内容的结构,还传达了内容的含义,从而使得网页内容更加清晰、易于理解和维护。

优点:

SEO(搜索引擎)优化---搜索引擎可以通过语义化的标签更好地理解网页内容,从而提高网站在搜索引擎中的排名。

可访问性---语义化标签使得网页在没有CSS的情况下也能呈现出良好的结构,便于辅助技术(如屏幕阅读器)为残障人士提供更好的访问体验。

代码可读性和可维护性---使用语义化标签可以使代码更加清晰和有组织,便于团队协作和代码维护。

|-------------------------|--------------|
| 常见的语义化标签 ||
| <header></header> | 头部 |
| <nav></nav> | 导航栏 |
| <section></section> | 区块(有语义化的div) |
| <main></main> | 主要区域 |
| <article></article> | 主要内容 |
| <aside></aside> | 侧边栏 |
| <footer></footer> | 底部 |

3.DOCTYPE(文档类型)的作用

DOCTYPE是HTML5中一种标准通用标记语言的文档类型声明,它的目的是告诉浏览器(解析器)应该以什么样(html或xhtml)的文档类型定义 来解析文档,不同的渲染模式会影响浏览器对 CSS 代码甚⾄ JavaScript 脚本的解析。它必须声明在HTML⽂档的第⼀⾏。

浏览器渲染页面的两种模式(可通过document.compatMode获取):

1.CSS1Compat:标准模式,也是默认模式,浏览器使用W3C的标准解析渲染页面。在标准模式中,浏览器以其支持的最高标准呈现页面。

2.BackCompat:怪异模式,浏览器使用自己的怪异模式解析渲染页面。在怪异模式中,页面以一种比较宽松的向后兼容的方式显示。

4.文档声明(DOCTYPE)和<!DOCTYPE HTML>有何作用?严格模式与混杂模式如何区分?它们有何意义?

文档声明(DOCTYPE​​​​​​​)的作用: 文档声明是为了告诉浏览器,当前HTML文档使用什么版本的HTML来写的,这样浏览器才能按照声明的版本来正确的解析。

<!DOCTYPE HTML>​​​​​​​的作用: <!DOCTYPE HTML> 的作用就是让浏览器进入标准模式,使用最新的 HTML5 标准来解析渲染页面;如果不写,浏览器就会进入混杂模式,我们需要避免此类情况发生。

严格模式与混杂模式的区分:

  • 严格模式 : 又称为标准模式,指浏览器按照W3C标准解析代码;
  • 混杂模式: 又称怪异模式、兼容模式,是指浏览器用自己的方式解析代码。混杂模式通常模拟老式浏览器的行为,以防止老站点无法工作;

区分:网页中的DTD(文档类型定义),直接影响到使用的是严格模式还是混杂模式,可以说DTD的使用与这两种方式的区别息息相关。

  • 如果文档包含严格的DOCTYPE ,那么它一般以严格模式呈现(严格 DTD ------严格模式);
  • 包含过渡 DTDURLDOCTYPE ,也以严格模式呈现,但有过渡 DTD 而没有 URL (统一资源标识符,就是声明最后的地址)会导致页面以混杂模式呈现(有 URL 的过渡 DTD ------严格模式;没有 URL 的过渡 DTD ------混杂模式);
  • DOCTYPE 不存在或形式不正确会导致文档以混杂模式呈现(DTD不存在或者格式不正确------混杂模式);
  • HTML5 没有 DTD ,因此也就没有严格模式与混杂模式的区别,HTML5 有相对宽松的 法,实现时,已经尽可能大的实现了向后兼容(HTML5 没有严格和混杂之分)。

总之,严格模式让各个浏览器统一执行一套规范兼容模式保证了旧网站的正常运行。

5.script标签中defer和async的区别

如果没有defer或async属性,浏览器会立即加载并执行相应的脚本。它不会等待后续加载的文档元素,读取到就会开始加载和执行,这样就阻塞了后续文档的加载。

defer 和 async属性都是去异步加载外部的JS脚本文件,它们都不会阻塞页面的解析,其区别如下:

1.defer要等到整个页面正常渲染结束,才会执行;而async一旦下载完,渲染引擎就会中断渲染,执行这个脚本以后,再继续渲染(当渲染在脚本下载过程就完成,后续就直接执行)。defer 是【渲染完再执行async 是【下载完就执行】。

2.如果有多个defer脚本,会按照它们在页面出现的顺序加载,而多个async脚本不能保证加载顺序。

6.常用的meta标签有哪些

meta 标签由 namecontent 属性定义,用来描述网页文档的属性,比如网页的作者,网页描述,关键词等。

|---------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| 常用的meta标签: ||
| <meta charset="UTF-8" > | 用来描述HTML文档的编码类型 |
| <meta name="keywords" content="关键词" /> | 页面关键字 |
| <meta name="description" content="页面描述内容" /> | 页面描述 |
| <meta http-equiv="refresh" content="0;url=" /> | 页面重定向和刷新 |
| <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> | 适配移动端,可以控制视口的大小和比例 |
| <meta name="robots" content="index,follow" /> | 搜索引擎索引方式 |

7.HTML5有哪些更新

1.语义化标签

|-------------------------|-------------------|
| <header></header> | 定义文档的页眉(头部) |
| <nav></nav> | 定义导航链接的部分 |
| <section></section> | 定义文档中的节(有语义化的div) |
| <main></main> | 主要区域 |
| <article></article> | 定义文章内容 |
| <aside></aside> | 定义其所处内容之外的内容(侧边栏) |
| <footer></footer> | 定义文档或节的页脚(底部) |

2.媒体标签

|---------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|
| <audio src='' controls autoplay loop='true'></audio> | 音频 controls 控制面板 autoplay 自动播放 loop='true'循环播放 |
| <video src='' poster='imgs/aa.jpg' controls></video> | 视频 poster:指定视频还没有完全下载完毕,或者用户还没有点击播放前显示的封面。默认显示当前视频文件的第一针画面,当然通过poster也可以自己指定。 controls 控制面板 width 宽度 height 高度 |
| <video > <source src='aa.flv' type='video/flv'></source> <source src='aa.mp4' type='video/mp4'></source> </video> | 因为浏览器对视频格式支持程度不一样,为了能够兼容不同的浏览器,可以通过source来指定视频源。 |

3.表单

|----------------|-------------------------------------------------------------------|
| 表单类型: <input type="表单类型" /> ||
| email | 能够验证当前输入的邮箱地址是否合法 |
| url | 验证URL |
| number | 只能输入数字,其他类型输入不了,而且自带上下增大减小箭头,max属性可以设置为最大值,min可以设置为最小值,value为默认值。 |
| search | 输入框后面会给提供一个小叉,可以删除输入的内容,更加人性化。 |
| range | 可以提供给一个范围,其中可以设置max和min以及value,其中value属性可以设置为默认值 |
| color | 提供了一个颜色拾取器 |
| time | 时分秒 |
| date | 日期选择年月日 |
| datetime | 时间和日期(目前只有Safari支持) |
| datetime-local | 日期时间控件 |
| week | 周控件 |
| month | 月控件 |

|-----------------------------------------|----------------------------------------------|
| 表单属性: ||
| placeholder | 提示信息 |
| autofocus | 自动获取焦点 |
| autocomplete="on" 或者 autocomplete="off" | 使用这个属性需要有两个前提: 表单必须提交过,必须有name属性。 |
| required | 要求输入框不能为空,必须有值才能够提交。 |
| pattern=" " | 里面写入想要的正则模式,例如手机号patte="^(+86)?\d{10}$" |
| multiple | 可以选择多个文件或者多个邮箱 注意:在选择文件的时候要按住Ctrl键才能同时选择多个文件 |
| form=" form表单的ID" | |

|-----------|----------------------------|
| 表单事件: ||
| oninput | 每当input里的输入框内容发生变化都会触发此事件。 |
| oninvalid | 当验证不通过时触发此事件。 |

4.进度条、度量器

|------------|--------------------------------------------------------------------------------------------------------|
| progress标签 | 用来表示任务的进度(IE、Safari不支持),max用来表示任务的进度,value表示已完成多少 |
| meter标签 | 用来显示剩余容量或剩余库存(IE、Safari不支持) |

5.DOM查询操作

|-----------------------------|-------------------------------------|
| document.querySelector() | 它们选择的对象可以是标签,可以是类(需要加点),可以是ID(需要加#) |
| document.querySelectorAll() | 它们选择的对象可以是标签,可以是类(需要加点),可以是ID(需要加#) |

6.Web存储

|----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| localStorage | 没有时间限制的数据存储 |
| sessionStorage | 针对一个 session 的数据存储 注意:sessionStorage和session不是同一个东西 sessionStorage 是浏览器端的存储机制,用于保存页面会话期间的数据,而 session 是服务器端的会话机制,用于跟踪用户状态和保存用户信息。两者的作用域和存储位置不同,但它们都可以用于在 Web 应用程序中管理数据和用户会话。 |

7.其他

|------------------------------------------------------------------|----------------------------------------------------------------------------------------|
| <img draggable="true" /> | 拖放是一种常见的特性,即抓取对象以后拖到另一个位置。 |
| <canvas id="myCanvas" width="200" height="100"></canvas> | canvas 元素使用 JavaScript 在网页上绘制图像。画布是一个矩形区域,可以控制其每一像素。canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。 |
| SVG | VG 指可伸缩矢量图形,用于定义用于网络的基于矢量的图形,使用 XML 格式定义图形,图像在放大或改变尺寸的情况下其图形质量不会有损失,它是万维网联盟的标准 |
| Geolocation(地理定位) | 用于定位用户的位置 |

8.img的srcset属性的作用

实现响应式图片。

在指定宽度像素密度的情况下加载对应的图片地址

|-------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------|
| <img src="image-128.png" srcset="image-128.png 128w, image-256.png 256w, image-512.png 512w" sizes="(max-width: 360px) 340px, 128px" /> | 其中srcset 指定图片的地址和对应的图片质量。sizes用来设置图片的尺寸零界点。对于 srcset 中的 w 单位,可以理解成图片质量。如果可视区域小于这个质量的值,就可以使用。浏览器会自动选择一个最小的可用图片。 |

9.行内元素有哪些?块级元素有哪些?空(void)元素有哪些?

|------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 行内元素 | a、b、span、img、input、select、strong |
| 块级元素 | div、ul、ol、li、dl、dt、dd、h1、h2、h3、h4、h5、h6、p |
| 空元素 | 空元素是在开始标签中关闭的,也就是空元素没有闭合标签 常见的有:<br><hr><img><input><link><meta> 鲜见的有:<area><base><col><colgroup><command><embed><keygen><param><source><track><wbr> |

10.对web worker的理解

1.什么是Web Worker?

JavaScript 语言采用的是单线程的,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。Web Worker 是一种在浏览器中实现多线程处理的技术,允许在后台线程中执行脚本,从而避免长时间运行的脚本阻塞用户界面。Web Worker 的作用,就是为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。在主线程运行的同时,Worker 线程在后台运行,两者互不干扰。等到 Worker 线程完成计算任务,再把结果返回给主线程。主线程与 Worker 之间的通信内容,可以是文本,也可以是对象。
2.Web Worke主要特点

|------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 同源限制 | Worker 线程必须与主线程的脚本文件同源。 |
| 通信机制 | 主线程和 Worker 线程之间不能直接通信,必须通过消息传递(postMessage 和 onmessage)进行通信。消息传递是异步的,确保了线程间的隔离和安全性。 双方都使用 postMessage() 方法发送各自的消息,使用 onmessage 事件处理函数来响应消息(消息被包含在 message 事件的 data 属性中)。这个过程中数据并不是被共享而是被复制。 self.postMessage():向产生这个 Worker 线程发送消息。 Worker.postMessage():向 Worker 线程发送消息。 |
| 资源限制 | Worker 线程不能访问 DOM,也不能使用某些全局对象(如 window),也无法读取本地文件,即不能打开本机的文件系统(file://),它所加载的脚本,必须来自网络。 |

11.HTML5的离线存储怎么使用,它的工作原理是什么?

离线存储指的是:在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件。
原理: HTML5的离线存储是基于一个新建的 .appcache 文件的缓存机制(不是存储技术),通过这个文件上的解析清单离线存储资源,这些资源就会像cookie一样被存储了下来。之后当网络在处于离线状态下时,浏览器会通过被离线存储的数据进行页面展示。
使用方法:

(1)创建一个和 html 同名的 manifest 文件,然后在页面头部加入 manifest 属性:

|----------------------------------------------|
| <html lang="en" manifest="index.manifest"> |

(2)在 cache.manifest 文件中编写需要离线存储的资源:

|-----------------------------------------------------------------------------------------------------------|
| CACHE MANIFEST #v0.11 CACHE: js/app.js css/style.css NETWORK: resourse/logo.png FALLBACK: / /offline.html |

  • CACHE: 表示需要离线存储的资源列表,由于包含 manifest 文件的页面将被自动离线存储,所以不需要把页面自身也列出来。
  • NETWORK: 表示在它下面列出来的资源只有在在线的情况下才能访问,他们不会被离线存储,所以在离线情况下无法使用这些资源。不过,如果在 CACHE 和 NETWORK 中有一个相同的资源,那么这个资源还是会被离线存储,也就是说 CACHE 的优先级更高。
  • FALLBACK: 表示如果访问第一个资源失败,那么就使用第二个资源来替换他,比如上面这个文件表示的就是如果访问根目录下任何一个资源失败了,那么就去访问 offline.html 。

如何更新缓存:

(1)更新 manifest 文件

(2)通过 javascript 操作

(3)清除浏览器缓存

注意事项:

(1)浏览器对缓存数据的容量限制可能不太一样(某些浏览器设置的限制是每个站点 5MB)。

(2)如果 manifest 文件,或者内部列举的某一个文件不能正常下载,整个更新过程都将失败,浏览器继续全部使用老的缓存。

(3)引用 manifest 的 html 必须与 manifest 文件同源,在同一个域下。

(4)FALLBACK 中的资源必须和 manifest 文件同源。

(5)当一个资源被缓存后,该浏览器直接请求这个绝对路径也会访问缓存中的资源。

(6)站点中的其他页面即使没有设置 manifest 属性,请求的资源如果在缓存中也从缓存中访问。

(7)当 manifest 文件发生改变时,资源请求本身也会触发更新。

12.浏览器是如何对HTML5的离线储存资源进行管理和加载?

在线的情况下:

浏览器发现 html 头部有 manifest 属性,它会请求 manifest 文件,如果是第一次访问页面 ,那么浏览器就会根据 manifest 文件的内容下载相应的资源并且进行离线存储。如果已经访问过页面并且资源已经进行离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的 manifest 文件与旧的 manifest 文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,就会重新下载文件中的资源并进行离线存储。

离线的情况下:

浏览器会直接使用离线存储的资源。

13.title与h1的区别、b与strong的区别、i与em的区别?

title属性没有明确意义只表示是个标题,h1则表示层次明确的标题,对页面信息的抓取有很大的影响。(title是网页的标题,h1是网页内容中的标题)

strong标签有语义,是起到加重语气的效果,而b标签是没有的,b标签只是一个简单加粗标签。b标签之间的字符都设为粗体,strong标签加强字符的语气都是通过粗体来实现的,而搜索引擎更侧重strong标签。

i内容展示为斜体,em表示强调的文本

14.iframe有哪些优点和缺点?

优点:

  • 解决加载缓慢的第三方内容,例如图标和广告等的加载问题
  • 能并行加载脚本
  • 方便管理,指的是如果有多个页面需要用到iframe的内容,那么只要修改iframe的内容就可以实现统一管理
  • iframe可以原封不动的把嵌入的网页显示出来

缺点:

  • 会产生很多的页面,不容易管理
  • 会增加服务器的http请求对大型网址不可取
  • 会阻塞父页面的load事件
  • iframe和主页面共享连接池,而浏览器对相同域的链接有限制,所以会影响页面的并行加载,也就是说子文档和父文档的请求数会被计算在一起
  • 不利于搜索引擎优化,也就是不利于SEO

解决方法:如果需要使用iframe,最好是通过JavaScript动态给iframe添加src属性值。

15.label的作用是什么?如何使用?

label标签来定义表单控件的关系:当用户选择label标签时,浏览器会自动将焦点转到和label标签相关的表单控件上。

|----------------------------------------------------------------------------|------------------------------------------------|
| 使用方式: ||
| <label for="mobile">Number:</label> <input type="text" id="mobile"/> | <label>Date:<input type="text"/></label> |

16.Canvas和SVG的区别

1.Canvas

Canvas是画布,通过Javascript来绘制2D图形,是逐像素进行渲染的。其位置发生改变,就会重新进行绘制。

特点:

  • 依赖分辨率
  • 不支持事件处理器
  • 弱的文本渲染能力
  • 能够以 .png 或 .jpg 格式保存结果图像
  • 最适合图像密集型的游戏,其中的许多对象会被频繁重绘

2.SVG

SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言XML 描述的2D图形的语言,SVG基于XML就意味着SVG DOM中的每个元素都是可用的,可以为某个元素附加Javascript事件处理器。在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。

特点:

  • 不依赖分辨率
  • 支持事件处理器
  • 最适合带有大型渲染区域的应用程序(比如谷歌地图)
  • 复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)
  • 不适合游戏应用

总结:Canvas按像素渲染,SVG按xml绘制,所以Canvas缩放会更模糊,但是动态效果更好,SVG则反之。

17.head标签有什么作用,其中什么标签必不可少?

<head> 标签用于定义文档的头部,它是所有头部元素的容器。<head> 中的元素可以引用脚本、指示浏览器在哪里找到样式表、提供元信息等。

文档的头部描述了文档的各种属性和信息,包括文档的标题、在 Web 中的位置以及和其他文档的关系等。绝大多数文档头部包含的数据都不会真正作为内容显示给读者。

|-----------|------------------------|
| 在head部分使用的标签: ||
| <base> | <link> |
| <meta> | <script> |
| <style> | <title>(文档的标题,必需的元素) |

18.浏览器乱码的原因是什么?如何解决?

产生乱码的原因:

  • 网页源代码是gbk的编码,而内容中的中文字是utf-8编码的,这样浏览器打开即会出现html乱码,反之也会出现乱码;
  • html网页编码是gbk,而程序从数据库中调出呈现是utf-8编码的内容也会造成编码乱码;
  • 浏览器不能自动检测网页编码,造成网页乱码。

解决办法:

  • 使用软件编辑HTML网页内容;
  • 如果网页设置编码是gbk,而数据库储存数据编码格式是UTF-8,此时需要程序查询数据库数据显示数据前进行程序转码;
  • 如果浏览器浏览时候出现网页乱码,在浏览器中找到转换编码的菜单进行转换。

19.渐进增强和优雅降级之间的区别

渐进增强(progressive enhancement):主要是针对低版本的浏览器进行页面重构,保证基本的功能情况下,再针对高级浏览器进行效果、交互等方面的改进和追加功能,以达到更好的用户体验。

优雅降级 graceful degradation: 一开始就构建完整的功能,然后再针对低版本的浏览器进行兼容。

两者区别:

  • 优雅降级是从复杂的现状开始的,并试图减少用户体验的供给;而渐进增强是从一个非常基础的,能够起作用的版本开始的,并在此基础上不断扩充,以适应未来环境的需要;
  • 降级(功能衰竭)意味着往回看,而渐进增强则意味着往前看,同时保证其根基处于安全地带。

"优雅降级"观点认为应该针对那些最高级、最完善的浏览器来设计网站。而将那些被认为"过时"或有功能缺失的浏览器下的测试工作安排在开发周期的最后阶段,并把测试对象限定为主流浏览器(如 IE、Mozilla 等)的前一个版本。 在这种设计范例下,旧版的浏览器被认为仅能提供"简陋却无妨 (poor, but passable)" 的浏览体验。可以做一些小的调整来适应某个特定的浏览器。但由于它们并非我们所关注的焦点,因此除了修复较大的错误之外,其它的差异将被直接忽略。

"渐进增强"观点则认为应关注于内容本身。内容是建立网站的诱因,有的网站展示它,有的则收集它,有的寻求,有的操作,还有的网站甚至会包含以上的种种,但相同点是它们全都涉及到内容。这使得"渐进增强"成为一种更为合理的设计范例。这也是它立即被 Yahoo 所采纳并用以构建其"分级式浏览器支持 (Graded Browser Support)"策略的原因所在。

20.说一下HTML5 drag API

|-----------|----------------------------------|
| dragstart | 事件主体是被拖放元素,在开始拖放被拖放元素时触发。 |
| drag | 事件主体是被拖放元素,在正在拖放被拖放元素时触发。 |
| dragend | 事件主体是被拖放元素,在整个拖放操作结束时触发。 |
| dragenter | 事件主体是目标元素,在被拖放元素进入某元素时触发。 |
| dragover | 事件主体是目标元素,在被拖放在某元素内移动时触发。 |
| dragleave | 事件主体是目标元素,在被拖放元素移出目标元素是触发。 |
| drop | 事件主体是目标元素,在目标元素完全接受被拖放元素时触发。 |

学习链接:前端面试题之HTML篇https://www.yuque.com/cuggz/interview/gme0bw

相关推荐
大数据追光猿几秒前
Python中的Flask深入认知&搭建前端页面?
前端·css·python·前端框架·flask·html5
莫忘初心丶3 分钟前
python flask 使用教程 快速搭建一个 Web 应用
前端·python·flask
横冲直撞de34 分钟前
前端接收后端19位数字参数,精度丢失的问题
前端
我是哈哈hh35 分钟前
【JavaScript进阶】作用域&解构&箭头函数
开发语言·前端·javascript·html
摸鱼大侠想挣钱36 分钟前
ActiveX控件
前端
谢尔登38 分钟前
Vue 和 React 响应式的区别
前端·vue.js·react.js
酷酷的阿云39 分钟前
Vue3性能优化必杀技:useDebounce+useThrottle+useLazyLoad深度剖析
前端·javascript·vue.js
神明木佑40 分钟前
HTML 新手易犯的标签属性设置错误
前端·css·html
老友@42 分钟前
OnlyOffice:前端编辑器与后端API实现高效办公
前端·后端·websocket·编辑器·onlyoffice
bin91531 小时前
DeepSeek 助力 Vue 开发:打造丝滑的缩略图列表(Thumbnail List)
前端·javascript·vue.js·ecmascript·deepseek