前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5 个 JavaScript “罕见”原生的 API

5 个 JavaScript “罕见”原生的 API

作者头像
掘金安东尼
发布2022-09-19 10:45:46
4120
发布2022-09-19 10:45:46
举报
文章被收录于专栏:掘金安东尼

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情


本篇带来 5 个 “罕见的” JavaScriot 原生 API,谁还不是个 API 调用大师呢?🐶

闲言少叙,开冲~~

window.getComputedStyle()

window.getComputedStyle()方法返回一个 CSSStyleDeclaration 对象,与 style 属性的类型相同,其中包含元素的计算样式;

用法如下:

代码语言:javascript
复制
document.defaultView.getComputedStyle(element, [pseudo-element])

// or
window.getComputedStyle(element, [pseudo-element])

它有两个参数,第一个是计算样式的元素,第二个是伪元素;若伪元素不存在,则传 null;

看例子就明白了:

代码语言:javascript
复制
<!DOCTYPE html>
<html>

<head>
    <style type="text/css">
        #root {
            background-color: pink;
            width: 100px;
            height: 200px;
        }

        #root::after {
            content: 'Haskell';
            display: table;
            clear: both;
        }
    </style>
</head>

<body>
    <div id="root" style="background-color: rgb(135, 206, 235);"></div>
</body>
<script>
    function getStyleByAttr(node, name) {
        return window.getComputedStyle(node, null)[name]
    }

    const node = document.getElementById('root')

    // rgb(135, 206, 235)
    console.log(getStyleByAttr(node, 'backgroundColor'))

    // 100px
    console.log(getStyleByAttr(node, 'width'))

    // 200px
    console.log(getStyleByAttr(node, 'height'))

    // table
    console.log(window.getComputedStyle(node, '::after').display)

    // Haskell
    console.log(window.getComputedStyle(node, '::after').content)
</script>

</html>

getBoundingClientRect()

Element.getBoundingClientRect()方法返回一个 DOMRect 对象,该对象提供元素大小及其相对于视口的位置信息;

用法如下:

代码语言:javascript
复制
domRect = element.getBoundingClientRect();

返回元素的 left, top, right, bottom, x, y, width, and height 值;

image.png
image.png

比如说要获得 DOM 元素相对于网页左上角的定位距离 top 和 left 的值:

代码语言:javascript
复制
const h3 = document.querySelector("h3");
const rect = h3.getBoundingClientRect();
const topElement = document.documentElement;

const positionTop = topElement.scrollTop + rect.top;
const positionLeft = topElement.scrollLeft + rect.left;

once: true

once: true 可不是 API,它长得也不像 API,它是用来做属性配置的,有了它,再也不用 lodash 的once 了;

代码语言:javascript
复制
const container = document.querySelector<HTMLDivElement>('.container');

container?.addEventListener('click', () => {
  console.log('I will only do it once !')
}, {
  // 配置 once 后,最多调用一次
  once: true
})

哇!原来 JS 就一直自带,你知道吗?

clipboard.readText()

粘贴板,想必是常见要用功能吧~

要从剪贴板读取文本,调用 navigator.clipboard.readText()并等待返回的 Promise 以进行解析:

代码语言:javascript
复制
async function getClipboardContents() {
  try {
    const text = await navigator.clipboard.readText();
    console.log('Pasted content: ', text);
  } catch (err) {
    console.error('Failed to read clipboard contents: ', err);
  }
}

而要将文本复制到剪贴板,则是调用 writeText()

代码语言:javascript
复制
async function copyPageUrl() {
  try {
    await navigator.clipboard.writeText(location.href);
    console.log('Page URL copied to clipboard');
  } catch (err) {
    console.error('Failed to copy: ', err);
  }
}

getModifierState()

如果按下或激活指定的修改键,getModifierState() 方法会返回true。

我们可以借助它,比如监听用户输入的时候是否按大小切换键,再根据情况给出合适的提示;

代码语言:javascript
复制
<input type="text" size="40" onkeydown="myFunction(event)">

<p id="demo"></p>

<script>
    function myFunction(event) {
        var x = event.getModifierState("CapsLock");
        document.getElementById("demo").innerHTML = "大写锁定激活: " + x;
    }
</script>

OK,以上就是本篇分享,你“学废”了吗?

我是掘金安东尼,输出暴露输入,技术洞见生活。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • window.getComputedStyle()
  • getBoundingClientRect()
  • once: true
  • clipboard.readText()
  • getModifierState()
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档