网站首页 > 基础教程 正文
上一篇文章介绍了Stimulus:连接HTML和Javascript的桥梁,实现复制到粘贴板的按钮
尽管粘贴板API在当前主流浏览器中都有被很好支持的,但是还有一小部分的用户使用了旧的浏览器,我们也希望他们也可以正常使用我们的网页。
我们还应该预料到人们在访问我们的网页时偶尔会出问题。例如,在加载js时,可能会遇到间歇性的网络问题,或者CDN不可用导致加载失败。
我们来优化一下上一篇文章的复制按钮功能,当浏览器不支持时,隐藏这个复制按钮。这样就避免了显示了按钮但是没用这种情况。
我们先用写一个CSS来隐藏按钮。然后在controller中测试一下浏览器是否支持复制。如果浏览器支持的话,就给按钮添加一个class,使按钮显示出来。
我们找到包含data-controller属性的div,加上属性data-clipboard-supported-class=“clipboard—supported”:
<div data-controller="clipboard" data-clipboard-supported-class="clipboard--supported">
然后给button添加class=“clipboard- button”:
<button data-action="clipboard#copy" class="clipboard-button">Copy to Clipboard</button>
然后修改public/main.css:
.clipboard-button {
display: none;
}
.clipboard--supported .clipboard-button {
display: initial;
}
根据属性data-clipboard-supported-class="clipboard--supported",Stimulus会把supported当作class逻辑名,在controller中声明一下classes包含supported,就可以访问this.supportedClass得到"clipboard--supported"这个值。
static classes = [ "supported" ]
这个让我们可以控制HTML中的CSS类,我们的controller就变得可以更加适应各种不同CSS。添加的指定class可以通过this.supportedClass访问。
现在在controller中添加connect()方法,如果用户拥有权限修改粘贴板的话,给controller所连接的元素上增加一个class:
connect() {
navigator.permissions.query({ name: "clipboard-write" }).then((result) => {
if (result.state === "granted") {
this.element.classList.add(this.supportedClass);
}
});
}
经过优化后,一开始复制按钮默认是隐藏的,当检测到用户可以使用复制功能,就会将按钮显示出来。
在本文中,我们对剪贴板controller进行了轻微的修改,使其能够应对旧的浏览器和弱网络环境。
猜你喜欢
- 2024-10-09 基于JavaScript实现的步骤引导进度条
- 2024-10-09 ?? ??????前端开发,实现B站首页动态banner
- 2024-10-09 有条件地启用和禁用DOM元素 在有条件使用
- 2024-10-09 详解Web导航菜单吸顶效果 详解web导航菜单吸顶效果怎么设置
- 2024-10-09 vue实践中的常见知识漏洞001 vue常见问题总结
- 2024-10-09 很多人不知道 Vue 中的组件就是一个函数
- 2024-10-09 javascript一个可以让你学会很多东西的实例「312」
- 2024-10-09 Webpack基础应用篇 -「9」管理资源(下)
- 2024-10-09 移动开发第三天 移动开发什么意思
- 2024-10-09 读 Vue3 文档的时候我只学会了 Vue3?
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)