• 记好这 24 个 ES6 方法,用来解决实际开发的 JS 问题(上)


    本文主要介绍 24 中 es6 方法,这些方法都挺实用的,本本请记好,时不时翻出来看看。

    1.如何隐藏所有指定的元素

    const hide = (el) => Array.from(el).forEach(e => (e.style.display = 'none'));
    
    // 事例:隐藏页面上所有`<img>`元素?
    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.How to get the current URL?

    const currentURL = () => window.location.href
    
    // 事例
    currentURL() // 'https://google.com'

    11.如何创建一个包含当前URL参数的对象?

    const getURLParameters = url =>
      (url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce(
        (a, v) => ((a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1)), a),
        {}
      );
    
    // 事例
    getURLParameters('http://url.com/page?n=Adam&s=Smith'); // {n: 'Adam', s: 'Smith'}
    getURLParameters('google.com'); // {}

    12.如何将一组表单元素转化为对象?

    const formToObject = form =>
      Array.from(new FormData(form)).reduce(
        (acc, [key, value]) => ({
          ...acc,
          [key]: value
        }),
        {}
      );
    
    // 事例
    formToObject(document.querySelector('#form')); 
    // { email: 'test@email.com', name: 'Test Name' }
  • 相关阅读:
    tomcat 启动超时
    读书笔记-String
    读书笔记-集合
    读书笔记-算法
    多变量梯度下降
    多变量线性回归
    梯度下降算法在线性回归中的运用
    梯度下降
    线性回归——代价函数
    线性回归
  • 原文地址:https://www.cnblogs.com/ZXH-null/p/13221457.html
Copyright © 2020-2023  润新知