你可能不知道的一些关于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

🍌 写在最后

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

目录
相关文章
|
JavaScript 前端开发
vue element plus Empty 空状态
vue element plus Empty 空状态
596 0
vue element plus Empty 空状态
|
测试技术
用navigator.sendBeacon完成网页埋点异步请求记录用户行为,当网页关闭的时候,依然后完美完成接口请求,不会因为浏览器关闭了被中断请求。
用navigator.sendBeacon完成网页埋点异步请求记录用户行为,当网页关闭的时候,依然后完美完成接口请求,不会因为浏览器关闭了被中断请求。
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
988 11
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
9月前
|
IDE Java 开发工具
IntelliJ IDEA 使用技巧与插件推荐
IntelliJ IDEA 是一个功能强大、扩展性丰富的开发工具。通过掌握常用的快捷键和技巧,结合合适的插件,可以大幅提升你的开发效率。
454 1
|
移动开发 人工智能 物联网
移动应用与系统:探索现代移动开发的趋势与挑战####
本文深入探讨了当前移动应用开发和移动操作系统的最新趋势、技术挑战及未来展望。通过分析Android、iOS等主流平台的演进,以及跨平台开发工具的兴起,揭示了开发者在构建高性能、安全且用户友好的移动应用时面临的机遇与挑战。文章还强调了人工智能、物联网集成及5G技术如何重塑移动生态系统,为读者提供了一个全面的行业视角。 ####
|
开发工具 iOS开发 开发者
「Mac畅玩鸿蒙与硬件2」鸿蒙开发环境配置篇2 - 在Mac上安装DevEco Studio
本篇将专注于如何在 Mac 上安装鸿蒙开发工具 DevEco Studio,确保开发环境能够顺利搭建。完成安装后,可以正式开始鸿蒙应用的开发工作。
1359 1
「Mac畅玩鸿蒙与硬件2」鸿蒙开发环境配置篇2 - 在Mac上安装DevEco Studio
|
JavaScript
【第12期】Vue3+TypeScript+Vite中动态引入图片等静态资源
【第12期】Vue3+TypeScript+Vite中动态引入图片等静态资源 c
2507 0
|
缓存 前端开发 JavaScript
React和Next.js开发常见的HTTP请求方法
React和Next.js开发常见的HTTP请求方法
572 0
|
缓存 前端开发 UED
实战指南:如何优化前端性能提升用户体验
本文探讨了在当今互联网时代,前端性能优化对于提升用户体验的重要性,以及如何利用各种技术手段实现前端性能的优化。通过介绍前端性能优化的原则、常见的性能优化技巧和工具,以及实际案例分析,帮助开发者深入了解并掌握提升前端性能的方法,从而提升网站的加载速度、响应速度,提高用户的满意度和留存率。