В этой статье перечислены некоторые из менее распространенныхWeb API
, контента больше, поэтому контента про совместимость в этой статье не будет, можете проверить сами. Следующие кейсы можно максимально сопоставить с анимацией, чтобы не было скучно, но если содержание неправильное, пожалуйста, сбрызните или поправьте👌
список методов
-
querySelector
(запрос элемента вниз, вернуть один) -
querySelectorAll
(запрос на элемент вниз, возвращает несколько) -
closest
(элементный запрос) -
dataset
(Получить элемент с помощью "data-
" для коллекции атрибутов) -
URLSearchParams
(параметр запроса) -
hidden
(скрытый элемент) -
contenteditable
(делает элемент редактируемым) -
spellCheck
(проверьте пиньинь) -
classList
(контроллер имени класса) -
getBoundingClientRect
(детали структуры пространства элементов) -
contains
(судя о том, включен ли указанный элемент) -
online state
(статус сети) -
battery state
(заряд батареи) -
vibration
(устройство вибрирует) -
page visibility
(видимость страницы) -
deviceOrientation
(гироскоп) -
toDataUrl
(Поворот содержимого холстаbase64
) -
customEvent
(настраиваемое событие) -
notification
(уведомление на рабочем столе) -
fullScreen
(полноэкранный) -
orientation
(ориентация экрана)
Разбить один за другим
1. querySelector
Все9102
лет, до сих пор используюgetElementById
😭
Получить соответствующий элемент в указанном элементеcss
Элементы селекторов:
// 作用在document
document.querySelector("#nav"); // 获取文档中id="nav"的元素
document.querySelector(".nav"); // 获取文档中class="nav"的元素
document.querySelector("#nav li:first-child"); // 获取文档中id="nav"下面的第一个li元素
// 也可以作用在其他元素
let nav = dodocument.querySelector("#nav");
nav.querySelector("li"); // 如果有多个li的话,返回第一个li
Примечание: В любом случае возвращается только один элемент, если элементов несколько, возвращается только первый ✅
2. querySelectorAll
Получить соответствующий элемент в указанном элементеcss
Все элементы селектора:
let list = document.querySelectorAll("li"); // NodeList(2) [li, li] 这里假设返回2个
Примечание. Возвращаемое значение представляет собой массив, подобный массиву, который можно использовать сforEach
(некоторые браузеры нельзя использовать, рекомендуется переключить), но нельзя использоватьfilter
,map
Подождите, нужно конвертировать:
Array.from(list).map();
3. closest
иquerySelector
Вместо этого элемент можно запрашивать вверх, то есть можно запрашивать родительский элемент:
document.querySelector("li").closest("#nav");
4. dataset
Как и в родном апплете WeChat, вы можете получать теги с помощью ""data-
" коллекция свойств с префиксом:
<p data-name="蜘蛛侠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛侠", age: "16"}
Примечание. Хотя вы можете использоватьgetAttribute
Метод получает любое значение атрибута, но природа другая. Это проблема спецификации разработки. Все пользовательские атрибуты должны быть добавлены.data-
Приставка О ✅
5. URLSearchParams
Предположим, что параметр URL-адреса браузера — «?name=Spiderman&age=16».
new URLSearchParams(location.search).get("name"); // 蜘蛛侠
6. hidden
Этоhtml
Атрибут, указывающий, является ли элемент скрытым, следует производительностьcss
изdisplay: none
Последовательный:
<div hidden>我被隐藏了</div>
document.querySelector("div").hidden = true / false;
7. contenteditable
Вы можете сделать элемент редактируемым пользователем:
<p contenteditable>我是P元素,但是我也可以被编辑</p>
Эффект следующий:
Если за этим свойством следуетstyle
Встречи с лейблами приводят к очень замечательной истории:Contenteditable и user-modify по-прежнему могут воспроизводиться так 🌚
8. spellcheck
такжеhtml
Атрибут, указывающий, проверяется ли входное содержимое на английское правописание:
<!-- 默认就是true,可省略 -->
<textarea spellcheck="true"></textarea>
Эффект следующий:
Настройка не проверяет:
<textarea spellcheck="false"></textarea>
Эффект следующий:
9. classList
Это объект, который инкапсулирует ряд методов для управления именами классов элементов:
<p class="title"></p>
let elem = document.querySelector("p");
// 增加类名
elem.classList.add("title-new"); // "title title-new"
// 删除类名
elem.classList.remove("title"); // "title-new"
// 切换类名(有则删、无则增,常用于一些切换操作,如显示/隐藏)
elem.classList.toggle("title"); // "title-new title"
// 替换类名
elem.classList.replace("title", "title-old"); // "title-new title-old"
// 是否包含指定类名
elem.classList.contains("title"); // false
10. getBoundingClientRect
Вы можете получить информацию о пространстве указанного элемента на текущей странице:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
11. contains
Вы можете определить, содержит ли указанный элемент указанный дочерний элемент:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
12. online state
Следите за текущими изменениями состояния сети, а затем выполните соответствующий метод:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你断网啦!");
});
Эффект на стороне ПК выглядит следующим образом:
Мобильный эффект заключается в следующем:
Сценарий использования: Подскажите пользователю, что сеть отключена, а всплывающее окно напугает пользователя ✅
13. battery state
Получить состояние батареи устройства:
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充电
chargingTime, // 充满电所需时间
dischargingTime, // 当前电量可使用时间
level, 剩余电量
onchargingchange, // 监听充电状态变化
onchargingtimechange, // 监听充满电所需时间变化
ondischargingtimechange, // 监听当前电量可使用时间变化
onlevelchange // 监听电量变化
}
Сценарий использования: сообщение пользователю о том, что аккумулятор полностью заряжен, или для того, чтобы пользователь чувствовал себя в безопасности, уровень заряда аккумулятора ниже99%
Когда придет время, всплывающее окно подскажет «пора заряжать» ✅
14. vibration
Хи-хи, заставь устройство вибрировать:
// 震动一次
navigator.vibrate(100);
// 连续震动,震动200ms、暂停100ms、震动300ms
navigator.vibrate([200, 100, 300]);
Эффект такой: извините, телефон приходится держать собственной рукой, чтобы его почувствовать;
Сценарии использования: обеспечение сенсорной обратной связи посредством вибрации, например непрерывной, когда к экрану не прикасались слишком долго.震动
Напомнить пользователям ✅
15. page visibility
Как следует из названия, этоAPI
используется для отслеживания изменений видимости страницы, вPC端
Переключение панели вкладок, минимизация сработает, в移动端
При переходе программы в фоновый режим она сработает Проще говоря страница исчезнет🤦♂️
document.addEventListener("visibilitychange", () => {
console.log(`页面可见性:${document.visibilityState}`);
});
Эффект на стороне ПК выглядит следующим образом:
Мобильный эффект заключается в следующем:
Сценарий использования: Когда программа переходит в фоновый режим, если в данный момент воспроизводится видео или выполняется какая-то анимация, вы можете сначала поставить ее на паузу ✅
16. deviceOrientation
Гироскоп, который является ориентацией устройства, также известного как гравитационное зондирование,API
существуетIOS
Решение сбоя на устройстве — изменить соглашение о доменном имени наhttps
;
Слева направо идутalpha
,beta
,gamma
;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
Действие мобильного терминала заключается в следующем (мобильный телефон в это время постоянно вращается):
Сценарий использования: Некоторые элементы на странице должны двигаться в соответствии с движением мобильного телефона для достижения эффекта параллакса, например, когда Король Славы входит в игровой интерфейс, фоновое изображение мобильного телефона будет двигаться вместе с Это.
17. toDataURL
этоcanvas
изAPI
, роль состоит в том, чтобы преобразовать содержимое холста вbase64
адрес изображения;
let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 画东西
...
let url = canvas.toDataURL("image/png"); // 将画布内容转换成base64地址
использоватьa标签
При загрузке изображения ссылка на изображение является междоменной (изображение является моим аватаром Nuggets), и загрузка не может быть выполнена, но выполняется предварительный просмотр изображения:
<img src="xxx">
<button>
<a href="xxx" download="avatar">下载图片</a>
</button>
Эффект следующий:
Это можно решить, инкапсулировав следующий код ✅
const downloadImage = (url, name) => {
// 实例化画布
let canvas = document.createElement("canvas");
let context = canvas.getContext("2d");
// 实例化一个图片对象
let image = new Image();
image.crossOrigin = "Anonymous";
image.src = url;
// 当图片加载完毕
image.onload = () => {
// 将图片画在画布上
canvas.height = image.height;
canvas.width = image.width;
context.drawImage(image, 0, 0);
// 将画布的内容转换成base64地址
let dataURL = canvas.toDataURL("image/png");
// 创建a标签模拟点击进行下载
let a = document.createElement("a");
a.hidden = true;
a.href = dataURL;
a.download = name;
document.body.appendChild(a);
a.click();
}
}
Эффект следующий:
или изменить текущийDOM
Преобразуйте его в изображение для скачивания, которое часто используется для создания постеров:html2canvas
18. customEvent
настраиваемые события, такие какvue
внутриon
иemit
Такой же;
Прослушивание пользовательских событий:
window.addEventListener("follow", event => {
console.log(event.detail); // 输出 {name: "前端宇宙情报局"}
});
Отправка пользовательских событий:
window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情报局"
}
}));
19. notification
Уведомления на рабочем столе на стороне ПК, такие как WeChat на веб-странице, при получении сообщения в правом нижнем углу появится уведомление (хотя вы сворачиваете браузер), потому что это уведомление не зависит от браузера и является родным контроль системы;
const notice = new Notification("前端宇宙情报局", {
body: "这20个不常用的Web API真的有用吗?,别问,问就是有用🈶",
icon: "我的掘金头像",
data: {
url: "https://www.baidu.com"
}
});
// 点击回调
notice.onclick = () => {
window.open(notice.data.url); // 当用户点击通知时,在浏览器打开百度网站
}
Эффект следующий:
Примечание: Если вы хотите успешно активировать уведомление, вы должны сначала авторизовать пользователя ✅
Notification.requestPermission(prem => {
prem == "granted" // 同意
prem == "denied" // 拒绝
})
Итак, сделайте запрос пользователю перед вызовом:
let permission = Notification.permission;
if (permission == "granted") {
// 已同意,开始发送通知
...
} else if (permission == "denied") {
// 不同意,发不了咯
} else {
// 其他状态,可以重新发送授权提示
Notification.requestPermission();
}
20. fullScreen
Это полноэкранный режим? Я просто использовал его для предыдущего проекта, его можно использовать не только вdocumentElement
также может воздействовать на указанный элемент;
/**
* @method launchFullScreen 开启全屏
* @param {Object} elem = document.documentElement 作用的元素
*/
const launchFullScreen = (elem = document.documentElement) => {
if(elem.requestFullScreen) {
elem.requestFullScreen();
} else if(elem.mozRequestFullScreen) {
elem.mozRequestFullScreen();
} else if(elem.webkitRequestFullScreen) {
elem.webkitRequestFullScreen();
}
}
работа надdocumentElement
На нем нечего вводить, он эквивалентенF11
Включить полноэкранный режим:
Итак, какое влияние это окажет на указанный элемент?
Так же, как и рендеры, полный экран будет открыт напрямую, и будут отображаться только указанные элементы, а ширина и высота элементов заполняют весь экран ✅
При закрытии полного экрана следует отметить, что единое использованиеdocument
Объект:
/**
* @method exitFullScreen 关闭全屏
*/
const exitFullScreen = () => {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
}
}
Сценарий использования: вам нужно позволить пользователю сосредоточиться на чем-то, например, на полном экране области редактирования кода✅
21. orientation
Он может отслеживать изменение направления вращения мобильного телефона пользователя;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋转后的角度值:${window.orientation}</p>`;
}, false);
Эффект следующий:
также можно использоватьcss
Медиа-запросы для:
/* 竖屏时样式 */
@media all and (orientation: portrait) {
body::after {
content: "竖屏"
}
}
/* 横屏时样式 */
@media all and (orientation: landscape) {
body::after {
content: "横屏"
}
}
Сценарий использования: страница требует, чтобы пользователь включил горизонтальный экран, чтобы получить лучший опыт, например, страница активности в Glory of Kings😂
Наконец
Если вы считаете, что эта статья хороша, пожалуйста, не забудьте нажать赞
и关注
О~😊