es6-常用实例

2023-11-01

这里写目录标题

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

const hide=(...el)=>[...el][0].forEach(e=>(e.style.display='none'));
hide(document.querySelectorAll('div'))

2.如何检查元素是否具有指定的类?

页面DOM里的每个节点上都有一个classList对象,程序员可以使用里面的方法新增、删除、修改节点上的CSS类。使用classList,程序员还可以用它来判断某个节点是否被赋予了某个CSS类。

const hasClass=(el,className)=>[].slice.call(el.classList).includes(className);
console.log(hasClass(document.querySelector('.bbb'),'aaa'))//true

[].slice.call() 将类数组转化成数组  同 Array.from

3.如何切换一个元素的类?

const toggleClass=(el,className)=>el.classList.toggle(className);
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:el.scrollTop
})getScrollPositon()  //(x:0,y:200)

5.如何平滑滚动到页面顶部?

window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行。
requestAnimationFrame:优势:由系统决定回调函数的执行时机。60Hz的刷新频率,那么每次刷新的间隔中会执行一次回调函数,不会引起丢帧,不会卡顿。

const scrollToTop=()=>{
    const c=document.documentElement.scrollTop||document.body.scrollTop;
    if(c>0){
       window.requestAnimationFrame(scrollToTop);
 window.scrollTo(0,c-c/8);      
    }
}
//例
scrollToTop()

6.如何检查父元素是否包含子元素?

const elementContains=(parent,child)=>parent!=child&&parent.contains(child);
//例
elementContain(document.querySelector('head'),document.querySelector('title'))

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)];
}
// false 表示的是不重复的 所有Img标签
getImages(document,true)
getImages(document,false)

9.如何确定设备是移动设备还是台式机/笔记本电脑?

const detectDeviceType=()=>
/Android|webOS|iphone|ipad|ipod|BlackBerry|IEMobile|OperaMini/i.test(navigator.userAgent)
?'Mobile':'Desktop';
//事例
detectDeviceType()
//Desktop 是电脑

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

const getURLParameters =url =>
(url.match(/([^?=&]+)(=([^&]*))/g)||[]).reduce(
   (a,v)=>((a[v.slice(0,v.indexOf('='))]=v.slice(v.indexOf('=')+1)),a),
   {}
)
getURLParameters('csdn.net/md/?articleId=119429376')
{articleId: "119429376"}

11.How to get the current URL?

const currentUrl=()=>window.location.href;
currentUrl()

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:'Testname'}

13.如何从对象检索给定选择器指示的一组属性?

const get=(from,...selectors)=>
  [...selectors].map(s=>
   s.replace(/\[([^\[\]]*)\]/g,'.$1.')
   .split('.')
   .filter(t=>t!=='')
   .reduce((prev,cur)=>prev&&prev[cur],from) 
);
const obj={selector:{to:{val:'val to select'}},target:[1,2,{a:'test'}] };
//事例
get(obj,'selector.to.val','target[0]','target[2].a')
// ["val to select", 1, "test"]

14.如何在等待指定时间后调用提供的函数?

const delay=
  (fn,wait,...args)=>setTimeout(fn,wait,...args);
delay(
  function(text){
   console.log(text)
  },
  1000,
  'later'
)
// 1s 后 打印 later

15.如何在给定元素上触发特定事件且能选择地传递自定义数据?

const triggerEvents=(el,eventType,detail)=>el.dispatchEvent(new CustomEvent(eventType,{detail}));
//例
triggerEvents(document.querySelector('.footer-column-t'),'click',{username:'wang'})

自定义事件的函数有 Event、CustomEvent 和 dispatchEvent

 Event
window.dispatchEvent(new Event('resize'))  //向window 派发一个resize事件
var event =new Event('build');//直接自定义事件 使用Event 构造函数
var elem =document.querySelector('.text-red');
elem.addEventListener('build',function(e){console.log(e,"-------�")},false)
//触发事件
elem.dispatchEvent(event)

CustomEvent 可以创建一个更高度自定义事件,还可以附带一些数据,具体用法如下:

CustomEvent
options={
   bubbles:true,//是否冒泡
   cancelable:false,//是否取消默认事件
}
var myEvent=new CustomEvent(eventname,options);//eventname 可以自己自定义名字

var elem =document.querySelector('.text-red');
elem.addEventListener('wangj',function(e){console.log(e,"-----")},false)
undefined
elem.dispatchEvent(myEvent)

16.如何从元素中移除事件监听器?

const off=
(el,evt,fn,opts=false)=>el.removeEventListener(evt,fn,opts);
const fn=()=>console.log('!');
document.body.addEventListener('click',fn);
// 解除点击事件的click事件
off(document.body,'click',fn);

17.如何获得给定毫秒数的可读格式?

const formatDuration= ms =>{
  if(ms<0)ms=-ms;
 const time={
    day:Math.floor(ms/86400000),
    hour:Math.floor(ms/3600000)%24,
    minute:Math.floor(ms/60000)%60,
    second:Math.floor(ms/1000)%60,
    millisecond:Math.floor(ms)%1000
 };
  return Object.entries(time)
  .filter(val=>val[1]!==0)
  .map(([key,val])=>`${val}${key}${val!==1?'s':''}`)
  .join(', ')
}
//例子
formatDuration(1001)
"1second, 1millisecond"

18.如何获得两个日期之间的差异(以天为单位)?

const getDayDiffBetweenDates = (dataInitial,dateFinal)=>
(dataInitial-dateFinal)/(1000*3600*24);
//例
getDayDiffBetweenDates(new Date('2021-08-13'),new Date('2021-08-01'))12

19.如何向传递的URL发出GET请求?

const httpGet=(url,callback,err=console.error)=>{
    const request=new XMLHttpRequest();
    request.open('GET',url,true);
    request.onload=()=>callback(request.responseText);
    request.onerror=()=>err(request);
    request.send();
}

httpGet(
  'http://www.baidu.com',
  console.log
)

20.如何对传递的URL发出POST请求?

const httpPost=(url,data,callback,err=console.error)=>{
    const request=new XMLHttpRequest();
    request.open('POST',url,true);
    request.setRequestHeader('Content-type','application/json;charset=utf-8');
    request.onload=()=>callback(request.responseText);
    request.onerror=()=>err(request);
    request.send(data);
}
const newPost={
	userId:1,
        id:1337,
        title:'Foo',
        body:'bar bar '
};
const data=JSON.stringify(newPost);
httpGet(
  'http://www.baidu.com',
   data,
  console.log
)

21.如何为指定选择器创建具有指定范围,步长和持续时间的计数器?

const counter=(selector,start,end,step=1,duration=2000)=>{
    let current=start,
     _step=(end-start)*step<0?-step:step,
   timer=setInterval(()=>{
       current+=_step;
       document.querySelector(selector).innerHTML=current;
       if(current>=end)document.querySelector(selector).innerHTML=end;
       if(current>=end)clearInterval(timer);
   },Math.abs(Math.floor(duration/(end-start))));
  return timer;
}
counter('#my-id',1,1000,5,20000);
//让id="my-id"的元素创建一个2s的计时器  从1到 1000

22.如何确定页面的浏览器选项卡是否聚焦?

const isBrowserTabFocused =()=>!document.hidden;
isBrowserTabFocused();

23.如何创建目录(如果不存在)?

const fs=require('fs');
const createDirIfNotExits=
  dir=>(!fs.existsSync(dir)?fs.mkdirSync(dir):undefined);
createDirIfNotExits('test')

24.如何将字符串复制到剪贴板?

const copyToClipBoard =str=>{
    const el =document.createElement('textarea');
    el.value=str;
    el.setAttribute('readonly','');
    el.style.position='absolute';
    el.style.left='-9999px';
    document.body.appendChild(el);
    const selected=
     document.getSelection().rangeCount>0?document.getSelection().getRangeAt(0):false
    el.select();
     document.execCommand('copy');
     document.body.removeChild(el);
     if(selected){
        document.getSelection().removeAllRanges();
        document.getSelection().addRanges(selected);
     }
}
//例
copyToClipBoard('copyToClipBoard')
ctrl+v 就能粘贴

25.||= 和 &&=

或等于(||=)   a ||= b 等同于 a || (a = b);

且等于(&&=)   a &&= b 等同于 a && (a = b);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

es6-常用实例 的相关文章

  • Ant Design Pro从零到一(Mock使用)

    认识Mock 学到这里就算是开始踏入AntD的门 然后我们还得学习一下常用的一些操作 例如Mock 针对与Mock他大致就是用来模拟数据的 为什么会有它的出现呢 因为现在前后端开发基本是分离的 但是数据结构一般都会先定好 在日常开发中 为了
  • => js 中箭头函数使用总结

    箭头函数感性认识 箭头函数 是在es6 中添加的一种规范 x gt x x 相当于 function x return x x 箭头函数相当于 匿名函数 简化了函数的定义 语言的发展都是倾向于简洁 对人类友好的 减轻工作量的 就相当于我最钟
  • 2023最全最新前端面试题(附加解答)

    JS 1 说一下innerHTML 与 innerText的作用与区别 作用 都可以获取或者设置元素的内容 区别 innerHTML可以解析内容中的html标签 innerText不能解析内容中的html标签 2 JavaScript 由以
  • 小程序web-view 跳转到h5 监听返回按钮

    1 跳转到h5之后 先给页面堆栈 然后就可以监听到返回事件了
  • QLExpression学习使用教程

    文章目录 QLExpress 简介 支持特性 Maven引入 例子github源码 图分解 提示 例子 初次使用 Runner执行器设置 执行器执行命令的设置 支持普通的Java语法执行 运算符支持 运算符分类 示例 部分运算符列举 样例使
  • Vue 报错:Duplicate keys detected

    Vue 报错 Duplicate keys detected object Object This may cause an update error 在vue 组件中使用 v for 并且加了key 值 如果key 值不唯一 就会出现这样
  • Vue.js中的v-model指令(双向绑定)

    Vue js中v model的作用 v model的作用和使用场景 1 v model的作用 双向绑定 2 v model双向绑定的使用场景 表单 3 总结 v model的作用和使用场景 你好 Vue js作为现在最为常用的前端框架之一
  • Map 转化为数组

    含义 Map 数据结构类似于对象 也是键值对的集合 但是键的范围不限于字符串 各种类型的值 包括对象 都可以当做键 Map 结构提供了 值 值 的对应 是更完善的 Hash 结构实现 Map 可以作为构造函数 新建 Map new Map
  • Vue刻度尺组件

    1 安装刻度尺组件 npm install cs ruler 2 在main js中全局引入组件 import CsRuler from cs ruler 刻度尺组件 Vue use CsRuler 3 组件使用
  • ES6知识点总结一:const、let、箭头函数

    1 ES6常量及变量的声明const let ES6 新增了let命令来声明变量 const用来声明常量 ES6新增的let和const拥有 块级作用域 ES5只有 全局作用域 和 函数作用域 const与var区别 var声明的变量可以重
  • JS ES6 单链表2种插入尾部方式

    一种是类里加一个指向尾部最后一个元素指针 通过他添加一个元素到队列最后 一种是每次增一个元素都从头开始遍历直到最后一个 然后添加 打开出来有单链表结构是一样的 除了上面的 多了一个队尾指针 class Node 单个结点 data next
  • Object.entries()方法使用详解

    一 概述 对象的数据处理方法 我们熟知的有很多 比如Object keys Object values for in等 本文将其与其它常见使用方法进行对比 详细解析其特性 二 对比 for in Object entries 方法的优势 1
  • 【按照年月去统计信息并分类展示】

    1 前言 需求是需要将历史订单按照年月分类展示 并展示汇总值 由于后端返回的是数组的数据 并没有将数据做好统计分类 出于对自己的自信以及不想给别人添麻烦的信息 然后自己写了一下处理的方法 然后放上最后的效果图吧 2 代码实现 按照月份统计每
  • vue打包及运行白屏,Android低版本适配

    版本支持 对于Android 4 X无法打开的问题 具体表现 1 运行后低版本谷歌浏览器打开后白屏 2 打包后低版本Android系统打不开 白屏 打包前npm run build后低版本浏览器打开白屏 如果低版本打开白屏那么打包后低版本A
  • 深入理解ES6箭头函数中的this

    简要介绍 箭头函数中的this 指向与一般function定义的函数不同 比较容易绕晕 箭头函数this的定义 箭头函数中的this是在定义函数的时候绑定 而不是在执行函数的时候绑定 1 何为定义时绑定 我们来看下面这个例子 1 var x
  • React解密:React Hooks函数之useCallback和useMemo

    之所以将useCallback和useMemo放到一起 从某种意义上说 他们都是性能优化的始作俑者 他们也有很多的共性 我们先来回顾一下class组件性能优化的点 调用 setState 就会触发组件的重新渲染 无论前后 state 是否相
  • 138-139-----JS基础-----二级菜单-完成基本功能、过渡效果

    一 代码 这两节的代码还是有点的难度的 有这样的需求时 按照类似的接口去做即可 不一定要和他的需求完全一样 因为我看他的需求好像点开另一个 已经打开的选项会被自动关闭 这样感觉不好 因为可能用户有时想要看到所有的选项的要求
  • 137-----JS基础-----类的操作

    一 代码 不算难 如果后续操作到类的话 可以直接使用下面封装好的接口到自己的tool中
  • VUE实践优化:轮询机制与代码结构升级

    前言 我们之前探讨过 对于包含处理状态的表格数据 我们可以通过轮询的方式进行处理 轮询更新进度条 JavaScript中的定时器和异步编程技巧 然而 当我们离开页面时 定时器仍会继续触发请求 这会造成资源的浪费 因为返回的数据并没有被渲染出
  • 【JavaScript】Set方法

    基本用法 ES6 提供了新的数据结构 Set 它类似于数组 但是成员的值都是唯一的 没有重复的值 Set 本身是一个构造函数 用来生成 Set 数据结构 const s new Set 2 3 5 4 5 2 2 forEach x gt

随机推荐

  • qt当通过子进程的方式嵌入窗口后,键盘按键响应不了怎么办?

    案例问题 当通过QProcess类 创建了一个子线程后 再将该子线程中的窗口封装到QWidget后嵌入当前主窗口中后 当在操作主进程窗口后 再去操作子进程窗口时 这时出现子进程窗口无法获取到键盘消息 或者先操作子进程中的窗口后 再切换到主进
  • linux重启nginx脚本

    Nginx 启动 重启 停止脚本 第一步 先运行命令关闭nginx ps ef grep nginx 查看状态 sudo kill 9 进程号 第二步 sudo vi etc init d nginx 输入以下内容 bin bash ngi
  • Qt的信号与槽

    依旧是根据 C GUI QT4 这本书继续学习 槽函数是普通C 成员函数几乎是一样的 可以为虚函数 可以被重载 可以为公有 可以为私有 也可以被其他C 成员函数直接调用 同时 他们的参数可以为任意类型 唯一不同的是 槽函数可以和信号连接在一
  • Unable to cast object of type 'System.Object[]' to type 'Employee[]'

    错误 Unable to cast object of type System Object to type Employee public class Employee public int id public string firstN
  • spring boot 使用spring-boot-starter-mail发送邮件

    1 引入依赖
  • 小窗帘

    anjiula 给你的小情书 就像起风了 扯着飘飘摇摇的衣角 拉长简简单单的街道 轻轻浅浅的步伐 那时公交站台的星光 裹挟着被吹散的温度 一边冷 一边暖 还有我们傻傻的脑袋 思绪穿透黑夜里的 小窗帘 挡不住光线 也挡不住念想
  • MPC5643L单片机——CAN通信FIFO接收使用笔记

    一 一个FIFO最多可存储几组CAN数据 手册里介绍了RX FIFO的寄存器数据结构 0x90 0xDC保留用作存储FIFO引擎 它里面的结构和上面0x80 0x90完全一样吗 也是16个字节吗 好像没有说明 根据大小计算0xDC 0x90
  • MS Learn 宝藏资源库 - 学习经验分享

    点击蓝字 关注我们 作者 刘轶民 大家好 我是东北电力大学的一名在校学生 我叫刘轶民 很高兴能以 MS Learn 的受益者的身份 来分享一些经验与看法 作为正在上学的我来讲 很多时候我可能更多的去面临着新技术的学习而不是基于一套熟悉的框架
  • 如何快速爬取国内985大学学术学报pdf文件

    背景 最近 在爬取关于国内985大学的学报时 我注意到大部分大学学报站点格式都采用相似的形式 并且PDF链接都使用自增的ID 然而 我也发现了一个问题 即大多数PDF链接的ID并不是连续的 现在我将向你分享一些方法 以快速获取所有的大学学报
  • MATLAB二维绘图(二)向图中添加标题,坐标轴,图标和文字信息

    MATLAB二维绘图 二 向图中添加标题 坐标轴 图标和文字信息 1 添加标题 图例 x轴信息和y轴信息 示例 添加标题 clear clc close all x 0 0 1 2 pi y1 sin x y2 exp x plot x y
  • BUUCTF Misc杂项前十二道题的思路和感悟

    title BUUCTF Misc date 2021年8月18日 17点27分 tags MISC categories MISC 1 BUUCTF 签到题 直接告诉了flag 2 BUUCTF 第二道题 Stegsolve 下载附件之后
  • gdb

    gdb一般命令 1 gdb l 从第一行开始例出原码 2 gdb break 1 设置断点 在源程序第1行处 3 gdb info break 查看断点信息 4 gdb r 运行程序 run命令简写 5 gdb n 单条语句执行 next命
  • 【Linux】如何创建daemon进程&fork一次和fork两次有什么区别

    前言 本文适合对Linux进程有了解过的读者 Linux中有一种进程叫做守护进程 又称精灵进程 它运行在后台 很重要 Linux下大多数服务器就是用守护进程实现的 因为它独立于终端运行 也就是说它的运行不受当前登录或者注销的影响 自成会话
  • HJ96:表示数字

    题目描述 将一个字符中所有出现的数字前后加上符号 其他字符保持不变 public static String MarkNum String pInStr return null 注意 输入数据可能有多行 输入描述 输入一个字符串 输出描述
  • Python应用程序自动化:提升效率的简易指南

    前言 自动化操作 是一门可以 提高工作效率 和 简化工作流程 的重要手段 而使用 Python 编程语言进行自动化操作应用程序 是极其方便的 Python 为我们提供了许多强大的工具和库 使得我们能够轻松地控制桌面应用程序或Windows上
  • javascript 怎么实现一行输出5个字符之后换行

    js源码
  • FPGA-结合协议时序实现UART收发器(五):串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive

    FPGA 结合协议时序实现UART收发器 五 串口顶层模块UART TOP 例化PLL UART FIFO uart drive 串口顶层模块UART TOP 例化PLL UART FIFO uart drive 功能实现 文章目录 FPG
  • 向大佬低头

    最近那篇blog是2017 04 26 两年多时间 也不那么矫情了 爱咋咋地 大概二十多年后又是一条好汉的感觉 数据啊什么的 就那样了 毕竟生活还在继续 回来还有个原因是 网上好多都是这个网站抄抄其他地方的内容 然后其他网站接着抄抄 就算你
  • 自定义View之轮播控件BannerView

    一 介绍 在项目中使用的自动轮播控件一直是网上别人做的 在出现问题的时候去看代码细节扫雷就非常浪费时间 于是痛定思痛自己造个轮子 这个控件在app中使用非常频繁 并且原理也不复杂 就是在前后各加一页 相信每一个android开发者都会做这个
  • es6-常用实例

    这里写目录标题 1 如何隐藏所有指定的元素 2 如何检查元素是否具有指定的类 3 如何切换一个元素的类 4 如何获取当前页面的滚动位置 5 如何平滑滚动到页面顶部 6 如何检查父元素是否包含子元素 7 如何检查指定的元素在视口中是否可见 8