1.获取URL的query参数

  • 作用:根据传入的属性名输出对应的值,没有则输出null
  • 注意:url传参中包含中文时,默认的获取结果会乱码,需要进行解码
//解析query传参 url参数中含有中文时将decode设为true
getQueryVal(key,decode = false) {
var searchObj = {}
//截取参数字符串
var searchStr = window.location.search.substring(1)
//转换成数组
var arr = searchStr.split('&')
//转换成对象
arr.forEach(str = >{
var mark_index = str.indexOf('=')
var key = str.substring(0,mark_index)
var val = str.substring(mark_index + 1)
searchObj[key] = val
}) //根据属性名输出对应的值
if (searchObj.hasOwnProperty(key)) {
//如果传入true 则进行解码
if(decode){
return decodeURI(searchObj[key])
}else{
return searchObj[key]
}
} else {
return null
}
},

2.生成最近N天的日期数组

  • 由来:在做图表的时候经常需要生成最近日期列表(最近7天/15天/30天),在此封装一个,免得重复造轮子
  • 语法:getDateList(天数,结束时间)
  • 依赖:函数依赖moment.js,使用前请先引入
<script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
getDateList(length = 15, end_time = new Date()) {
//日期数组
var date_list = [] //结束时间 日期对象
var temp_date = end_time
for (var i = 0; i < length; i++) {
//加入到数组中
date_list.unshift(`${moment(temp_date).format('MM-DD')}`)
//日期减一
temp_date.setDate(temp_date.getDate() - 1)
} return date_list
},

3.生成最近的月份列表

  • 由来:在做图表的时候经常需要生成最近月份列表(最近6个月/12个月),在此封装一个,免得重复造轮子。
  • 语法:getMonthList(天月数,结束时间)
  • 依赖:函数依赖moment.js,使用前请先引入函数依赖moment.js,使用前请先引入
<script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
getMonthList(length = 6, end_time = new Date()) {
//日期数组
var month_list = [] //结束时间 日期对象
var temp_date = end_time
for (var i = 0; i < length; i++) {
//加入到数组中
date_list.unshift(`${moment(temp_date).format('YYYY-MM')}`)
//月份减一
temp_date.setMonth(temp_date.getMonth() - 1)
} return month_list
},

4.根据年月输出每月天数

  • 由来:制作月报表时,需要渲染当月每天的数据,就需要知道当前月有多少天
  • 思路:除了2月,每个月天数都是固定的,只要判断是否是闰年还是平年即可确定2月份的天数(判断是否是闰年:年份如果是整百 则除以400取余 否则除以4取余)
//根据年月输出当月天数
getDaysByMonth(year,month){
var year = Number(year)
var month = Number(month) - 1
//平年每月天数
var days_arr = [31,28,31,30,31,30,31,31,30,31,30,31]
//判断是否是闰年 如果是整百 则除以400取余 否则除以4取余
if ( (year%100 == 0 && year%400 == 0) || (year%100 != 0 && year%4 == 0)) {
console.log('闰年')
days_arr[1] = 29
}
return days_arr[month]
}

5.节流和防抖

  • 节流含义:当一个事件被频繁触发时(滚动条滚动,鼠标移动事件),为了节省性能,降低其触发频率
  • 实现方式:设定一个时间周期,一个周期内只能触发一次,以此降低其触发频率
<script>
//记录上次回调执行的时间,再对比本次触发的时间,超过周期则执行回调,并记录最新的回调执行时间
function throttle(cb,delay){
//记录上次回调执行时的时间戳
var prev = 0
//定义内部函数并返回,形成闭包,缓存prev
return function(){
//事件触发时上下文
var context = this
//事件触发时的参数
var args = arguments
//对比时间差 超过时间间隔则执行回调
if(Date.now() - prev >= delay){
//执行回调(绑定this,传递参数)
cb && cb.apply(context,args)
//更新prev
prev = Date.now()
}
} } //事件回调
function handle(e){
console.log(e)
} //事件监听并设置节流
window.addEventListener('scroll', throttle(handle,200))
</script>
  • 防抖含义:当事件频繁触发时,不执行回调,直到事件触发告一段落才执行回调,通俗的说,就是只在最后一次触发时才执行,一般用于实时输入搜索
  • 实现方式:每次触发都将回调放入延时定时器中,如果定时器范围内接着触发,则清除这个定时器,并开启新的,保证永远只有一个最新的定时器执行,如果后续不再触发,则执行这个延时定时器的回调,在执行回调时,需要绑定事件发生时的context和参数
<script>
//当事件频繁触发时,只在最后一次触发时执行回调
function debounce(fn, delay){
// 声明计时器
var timer = null
// 定义内部函数并返回,形成闭包,缓存 timer
return function() {
//事件触发时上下文
var context = this
//事件触发时的参数
var args = arguments
//清除定时器
clearTimeout(timer)
//开启新定时器
timer = setTimeout(function () {
//给回调绑定this,传入事件参数并执行
fn.apply(context, args)
}, delay)
}
} //事件回调
function handle(e){
console.log('handle',e)
} //监听事件并设置防抖
window.addEventListener('resize', debounce(handle,200))
</script>

6.数组的最大值与最小值

  • 实现思路:先进行数组排序,然后数组的第一个和最后一个元素就是最大值与最小值
  • 注意:排序使用sort()方法进行,如果数组元素是对象,可以将p1-p2替换成p1[key]-p2[key],这样排序时可以根据数组元素的某个属性值进行比较
<script>
function getMaxMin(arr){
var max = null
var min = null
if(arr.length > 0){
//先对数组进行排序
var tem_arr = arr.sort((p1,p2)=>{
//p1-p2就是升序
//p2-p1就是降序
return p2-p1
})
max = tem_arr[0]
min = tem_arr[tem_arr.length-1]
}
return {
max,min
}
}
</script>

7.文件大小转换

  • 作用:根据文件大小,为其适配一个合适的单位输出
  • 实现方式:循环取商,依次提升单位("B"->"K"->"M"->"G"),直到找到最后的单位为止
<script>
//根据文件大小,为其适配一个合适的单位输出
//传入的文件大小单位字节B
function formatterSize(cellValue){
//当前尺寸
var size = cellValue
//当前单位(B代表字节)
var unit = "B"
//单位列表(B代表字节,1024进位)
var units = ["B","K","M","G"]
//循环取商(如果除以进位后,仍然大于1024,则接着除,并提升单位,一直到最后的单位为止)
while(units.length > 0 && size >= 1024){
//单位进位(移除过小的单位)
units.shift()
//单位更新
unit = units[0]
//取商
size = size / 1024
}
//保留小数点后2位
size = Math.floor(size*100) / 100
return size + " " + unit
} //500B
console.log(formatterSize(500)) //500 B
//1KB
console.log(formatterSize(1024)) //1 K
//1k + 100B
console.log(formatterSize(1024 + 100)) //1.09 K
//2M
console.log(formatterSize(1024 * 1024 * 2)) //2 M
</script>

Javascript 常用封装(一)的更多相关文章

  1. JavaScript 常用功能总结

    小编吐血整理加上翻译,太辛苦了~求赞! 本文主要总结了JavaScript 常用功能总结,如一些常用的JS 对象,基本数据结构,功能函数等,还有一些常用的设计模式. 目录: 众所周知,JavaScri ...

  2. 第一百三十六节,JavaScript,封装库--事件绑定

    JavaScript,封装库--事件绑定 在函数库添加两个函数 添加事件绑定函数 删除事件绑定函数 添加事件绑定函数 /** addEvent()函数库函数,跨浏览器添加事件绑定,注意:传入事件名称时 ...

  3. javascript 常用手势 分析

    javascript 常用手势, 个人觉得有3个 tap,swipe(swipeLeft,swipeRight,swipeTop,swipeRight),hold tap 是轻击 判断的原则是,在to ...

  4. Javascript常用的设计模式详解

    Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...

  5. JavaScript常用库

    提供个学习几种库的url,记录下. 1.JavaScript简介 JavaScript是Netscape公司开发的一种脚本语言(scripting language).JavaScript的出现使得网 ...

  6. 原生JavaScript常用本地浏览器存储方法一(方法类型)

    有时需要将网页中的一些数据保存在浏览器端.好处就是当下次访问页面时,直接就可以从本地读取数据,不需要再次向服务器请求数据.目前常用的有以下几种方法: 1.cookie cookie会随着每次HTTP请 ...

  7. 7 种 Javascript 常用设计模式学习笔记

    7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...

  8. 学习关于JavaScript常用的8大设计模式

    JavaScript 常用的8大设计模式有 工厂模式:工厂模式是一种创建对象的模式,可以通过一个共同的接口创建不同类型的对象,隐藏了对象的创建过程. 单例模式:单例模式是一种只允许实例化一次的对象模式 ...

  9. 2016/11/17 周四 <javascript的封装简单示例>

    这是一个简单的javascript代码封装的示例以及封装后的调用方法: var ticker={ n:0, add:function() { this.n++; }, show:function() ...

  10. select元素javascript常用操作 转

    /*------------------------------------------------------ *作者:xieyu @ 2007-08-14 *语言:JavaScript *说明:s ...

随机推荐

  1. CSS单位em、rem、vh和vw等及CSS3的calc()以及line-height百分比

    css单位我们常用的是px,也即是像素.随着网页开发自适应的要求,css3新增了许多单位,rem.vw和vh.vmin和vmax.ch和ex等. em 做前端的应该对em不陌生,不是什么罕见的单位,是 ...

  2. CSP-J 2024游记

    CSP-J 2024游记 题目难度 总体来说,这次考试题目对于我这个初一牲难度不高.前面的选择题出现了少量难题(格蕾码). 选择题 选择题出现了一个搞人心态的BYD题目--格蕾码.这道题我蒙的, 阅读 ...

  3. hive操作 -- zeppelin安装及配置

    当时写hive用的是zeppelin,这个工具可以直接在页面上写sql语句,操作服务器上的hive库,还挺方便的 通过zeppelin实现hive的查询结果的可视化 启动过程中会报错:User: to ...

  4. /proc/pids/status

    /proc/279/status是一个Linux内核中的文件,其中包含了当前进程的状态信息.每行的含义如下: Name: 进程的名称,例如"java"或"bash&quo ...

  5. ftrace irqs跟踪器

    当中断被关闭(俗称关中断)了,CPU就不能响应其他的事件,如果这时有一个鼠标中断,要在下一次开中断时才能响应这个鼠标中断,这段延迟称为中断延迟.向current_tracer 文件写入 irqsoff ...

  6. C#/.NET/.NET Core优秀项目和框架2024年9月简报

    前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍.功能特点.使用方式以及部分功能截图 ...

  7. 有封装过v-model相关的双向绑定组件吗?

    有的,之前在做⼀个通⽤的上传组件的时候,⼀开始是通过传统的⽗⼦通信实现的,⽗传⼦实现的图⽚ 回显,⼦传⽗实现的图⽚url抛出传给给接⼝,后来使⽤v-model做了⼀点优化,简单了不少 追问: 具体是怎 ...

  8. 如何对 Vue 首屏加载实现优化 ?

    首屏加载优化是对于 SPA 来说的 ,首次加载所有的 html css js 所需的文件 ,后面就不会因为用户对页面的操作而跳转页面 ,没有跳转页面如何展示不同的内容呢 ? 使用 Vue 的路由机制 ...

  9. 18 . 介绍一下 Promise

    Promise 是js内置的构造函数,也叫做期约函数 ,它有 3 种状态 ,等待状态 pending ,成功状态 fullfilled ,失败状态 reject :2 个过程, 等待状态到成功状态 会 ...

  10. kotlin类和对象—>属性与字段

    1.声明属性,Kotlin 类中的属性既可以用关键字 var 声明为可变的,也可以用关键字 val 声明为只读的 class Address { var name: String = "Ho ...