本文主要介绍24中es6方法,这些方法都挺实用的,本本请记好,时不时翻出来看看。
1.如何隐藏所有指定的元素
const hide = (el) => Array.from(el).forEach(e => (e.style.display = 'none'));
// 事例:隐藏页面上所有``元素?
hide(document.querySelectorAll('img'))
2.如何检查元素是否具有指定的类?
页面DOM里的每个例程上都有一个classList对象,程序员可以使用里面的方法添加,删除,修改例程的CSS类。使用classList,程序员还可以用它来判断某处是否被替换了某人个CSS类。
const hasClass = (el, className) => el.classList.contains(className)
// 事例
hasClass(document.querySelector('p.special'), 'special') // true
3.如何切换一个元素的类?
const toggleClass = (el, className) => el.classList.toggle(className)
// 事例 移除 p 具有类`special`的 special 类
toggleClass(document.querySelector('p.special'), 'special')
4.如何获取当前页面的滚动位置?
const getScrollPosition = (el = window) => ({
x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft,
y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop
});
// 事例
getScrollPosition(); // {x: 0, y: 200}
5.如何平滑滚动到页面顶部
const scrollToTop = () => {
const c = document.documentElement.scrollTop || document.body.scrollTop;
if (c > 0) {
window.requestAnimationFrame(scrollToTop);
window.scrollTo(0, c - c / 8);
}
}
// 事例
scrollToTop()
window.requestAnimationFrame() 告诉浏览器-你希望执行一个动画,并且要求浏览器在下一重绘之前调用指定的函数更新动画。之前执行。
requestAnimationFrame:优势:由系统决定决定功能的执行时机。60Hz的刷新频率,然后每次刷新的间隔中会执行一次替换函数,不会引起丢帧,不会卡顿。
6.如何检查父元素是否包含子元素?
const elementContains = (parent, child) => parent !== child && parent.contains(child);
// 事例
elementContains(document.querySelector('head'), document.querySelector('title'));
// true
elementContains(document.querySelector('body'), document.querySelector('body'));
// false
7.如何检查指定的元素在视口中是否可见?
const elementIsVisibleInViewport = (el, partiallyVisible = false) => {
const { top, left, bottom, right } = el.getBoundingClientRect();
const { innerHeight, innerWidth } = window;
return partiallyVisible
? ((top > 0 && top < innerHeight) || (bottom > 0 && bottom < innerHeight)) &&
((left > 0 && left < innerWidth) || (right > 0 && right < innerWidth))
: top >= 0 && left >= 0 && bottom <= innerHeight && right <= innerWidth;
};
// 事例
elementIsVisibleInViewport(el); // 需要左右可见
elementIsVisibleInViewport(el, true); // 需要全屏(上下左右)可以见
8.如何获取元素中的所有图像?
const getImages = (el, includeDuplicates = false) => {
const images = [...el.getElementsByTagName('img')].map(img => img.getAttribute('src'));
return includeDuplicates ? images : [...new Set(images)];
};
// 事例:includeDuplicates 为 true 表示需要排除重复元素
getImages(document, true); // ['image1.jpg', 'image2.png', 'image1.png', '...']
getImages(document, false); // ['image1.jpg', 'image2.png', '...']
9.如何确定设备是移动设备还是台式机/笔记本电脑?
const detectDeviceType = () =>
/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
? 'Mobile'
: 'Desktop';
// 事例
detectDeviceType(); // "Mobile" or "Desktop"
10.如何获取当前URL?
const currentURL = () => window.location.href
// 事例
currentURL() // 'https://google.com'