你可能不知道的一些关于a标签的小细节

简介: 本篇文章详细介绍了关于a标签的几个小细节,也可以说是一些sao操作,完全可以在开发中使用,体验非常奈斯
Hi~,我是 一碗周,一个在舒适区垂死挣扎的前端,如果写的文章有幸可以得到你的青睐,万分有幸~

🍒 写在前面

关于a标签是什么,我就不浪费时间写了;这篇文章介绍几个a标签的小细节,如下图所示:

a标签的小细节.png

🍐 阻止默认行为

当我们不需要<a>标签点击发生跳转行为可以通过以下两种方式实现:

  • 通过href属性实现,可以使其指向空或者不反悔任何内容:

    <!-- 通过 href 实现点击无跳转 -->
    <a href="javascript:;">a标签</a>
    <a href="javascript:void(0);">a标签</a>
  • 通过事件处理,阻止其默认行为

    <body>
      <!-- 通过 href 实现点击无跳转 -->
      <!-- 通过事件阻止默认行为 -->
      <a href="https://juejin.cn" onclick="return false">掘金</a>
      <a href="https://juejin.cn" id="link">掘金</a>
      <script>
        const $a = document.getElementById('link')
        $a.addEventListener('click', e => {
          e.preventDefault()
        })
      </script>
    </body>

🍇 target属性的妙用

target属性用于设置以哪种方式打开链接(说了个废话),他有几个关键字,比如_self(当前窗口打开)、_blank(新窗口打开),除了关键字,它还支持使用任意名称作为值,而且值相同情况下会使用一个标签页打开链接

这个特性非常的有用,这可以完全避免打开很多标签页,实例代码如下:

<a href="https://juejin.cn" class="btn" target="juejin">首页</a>
<a
  href="https://juejin.cn/user/3350967174838701"
  class="btn"
  target="juejin"
  >个人主页</a
>

代码运行效果如下:

01.gif

🍉 用download实现下载功能

如果为<a>标签增加一个download属性,可以实现下载功能,但是这仅限于同源,如果是跨域下载的话可以借助blob:URLs实现,实例代码如下:

<body>
  <a
    href="javascript:void(0);"
    class="btn"
    onclick="downloadFile(event)"
    src="https://p6-passport.byteacctimg.com/img/user-avatar/75e47e118bbc3ff51aa2731f74953c35~300x300.image"
    >下载图片</a
  >
  <script>
    function downloadFile(e) {
      const url = e.target.getAttribute('src')
      const image = new Image()

      image.setAttribute('crossOrigin', 'anonymous')
      image.src = url

      image.onload = () => {
        const canvas = document.createElement('canvas')
        const ctx = canvas.getContext('2d')
        const name = image.src.substring(image.src.lastIndexOf('/') + 1)

        canvas.width = image.width
        canvas.height = image.height

        ctx.drawImage(image, 0, 0, image.width, image.height)

        canvas.toBlob(blob => {
          const url = window.URL.createObjectURL(blob)
          const a = document.createElement('a')

          a.href = url
          a.download = '下载'
          a.click()
          a.remove()

          window.URL.revokeObjectURL(url)
        })
      }
    }
  </script>
</body>

此时点击a标签就可以实现跨域的图片下载,这里正是借用的download属性。

除了图片也可以下载其他类型的文件,但是需要后端配置,伪代码如下:

export function downloadFile(e) {
  const url = e.target.getAttribute('src')
  // 文件名
  const name = url.substring(url.lastIndexOf('/') + 1)

  axios.get(url, { responseType: 'blob' }).then(res => {
    const blob = res.data
    const url = URL.createObjectURL(blob)
    const a = document.createElement('a')

    a.href = url
    a.download = name
    a.click()
    a.remove()

    window.URL.revokeObjectURL(url)
  })
}

使用这种方式可以更加的灵活。

🍊 通过锚点实现丝滑滚动

锚点定位配合CSS属性scroll-behavior可以实现一个非常丝滑的滚动效果,就比如回到顶部的功能,无需JS参与即可实现,示例代码如下:

<style>
  html,
  body {
    scroll-behavior: smooth;
  }
</style>
<body>
  <div class="box">
    <img src="./../image/a标签的小细节.png" alt="" style="height: 300px" />
  </div>
  <a href="#" class="btn">回到顶部</a>
</body>

代码运行效果如下:

02.gif

🍌 写在最后

本篇文章到这就结束了,如果觉着这篇文章对你有帮助,可以点赞评论支持一下~

目录
相关文章
|
人工智能
【AI绘画】ControlNet 之 Reference only 锁定面部跑图
【AI绘画】ControlNet 之 Reference only 锁定面部跑图
1256 0
|
4月前
|
IDE Java 开发工具
IntelliJ IDEA 使用技巧与插件推荐
IntelliJ IDEA 是一个功能强大、扩展性丰富的开发工具。通过掌握常用的快捷键和技巧,结合合适的插件,可以大幅提升你的开发效率。
219 2
|
9月前
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
559 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
算法 调度
贪心算法基本概念与应用场景
尽管贪心算法在许多问题中都非常有效,但它并不总是会产生最优解。因此,在应用贪心算法前,重要的是先分析问题是否适合采用贪心策略。一些问题可能需要通过动态规划或回溯等其他算法来解决,以找到确切的全局最优解。
461 1
|
JavaScript CDN
JS:NPM发布一个Vue组件UI库并使用CDN引入使用
JS:NPM发布一个Vue组件UI库并使用CDN引入使用
710 0
|
存储 JavaScript Windows
Electron——如何检测应用程序的未响应状态
Electron——如何检测应用程序的未响应状态
297 0
|
缓存 前端开发 JavaScript
React和Next.js开发常见的HTTP请求方法
React和Next.js开发常见的HTTP请求方法
381 0
|
数据采集 算法 编译器
倚天710规模化应用 - 性能优化 -自动反馈优化分析与实践
编译器优化分成静态优化与动态优化,静态优化指传统编译器gcc/llvm时,增加的优化等级,如O1,O2,O3,Ofast,此时,编译器会依据编译优化等级增加一些优化算法,如函数inline、循环展开以及分支静态预测等等。一般情况下,优化等级越高,编译器做的优化越多,性能会更会好。在阿里生产环境中,单纯依赖于静态优化,并不能达到程序运行流畅目的,通过分析CPU硬件取指令、执行指令,往往会出现一些分支预测失败导致iCacheMiss率高的场景,限制了程序的性能进一步提升。基于此,业务引入了动态反馈优化工具,依据生产环境的实际运行数据,反哺指导编译器对程序代码进一步调整编译优化策略,提高分支预准确率
基于antd实现动态修改节点的Tree组件
基于antd实现动态修改节点的Tree组件
1017 0