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

🍌 写在最后

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

目录
相关文章
|
4月前
|
前端开发
css 巧用 ::after 和 ::before 实现竖排分类导航
css 巧用 ::after 和 ::before 实现竖排分类导航
42 1
|
5月前
|
前端开发 JavaScript
一篇文章讲明白iframe分栏拖拽伸缩例子
一篇文章讲明白iframe分栏拖拽伸缩例子
72 0
|
前端开发 测试技术 容器
【CSS】如何给自己头像打造3D动态悬浮效果?(慎入!有点难)
有设想过,当你鼠标移入头像时,展现出从圆圈或洞中探出的那种效果吗?我有类似的想法,但采用了不同的方式并添加了一些动画。我感觉非常实用,并且可以产生简洁的悬停效果,可以在您自己的头像之类的东西上使用。
【CSS】如何给自己头像打造3D动态悬浮效果?(慎入!有点难)
|
6月前
|
前端开发
让页面里的字体变清晰,变细用CSS怎么做?
让页面里的字体变清晰,变细用CSS怎么做?
158 2
|
6月前
|
JSON JavaScript 前端开发
原生js做树形菜单(详细注释+加简易版)
原生js做树形菜单(详细注释+加简易版)
57 0
|
JavaScript 前端开发 索引
如何用原生JS写Tab切换
1. 基本思路 ① 遍历Tab选项 ② 然后给每个Tab选项绑定点击事件 ③ 每次点击时清除所有Tab选项及Tab选项内容的样式,然后给当前Tab选项添加标记样式,给当前Tab选项添加显示样式 2.
3201 1
|
前端开发
【网页前端】CSS样式表进阶文本样式
【网页前端】CSS样式表进阶文本样式
130 0
【网页前端】CSS样式表进阶文本样式
|
Web App开发 前端开发 程序员
好程序员web前端教程分享3种方法实现CSS隐藏滚动条并可以滚动内容
好程序员web前端教程分享3种方法实现CSS隐藏滚动条并可以滚动内容,隐藏滚动条的同时还需要支持滚动,我们经常在前端开发中遇到这种情况,最容易想到的是加一个iscroll插件,但其实现在CSS也可以实现这个功能,我已经在很多地方使用了,下面一起看看这三种方法。
1622 0