requestAnimationFrame

手写深拷贝

function deepClone(obj={}){
    if(typeof obj !=='object'|| obj == null){
        return obj
    }
let result
if(obj instancof Array){
    result=[]
}else{
    result={}
}
for{let key in obj}{
    if(obj.hasOwnProperty(key)){
    //递归调用
        result[key]=deepClone(obj[key])
    }
}
return result
}

注意:Object.assign不是深拷贝
介绍一下RAF requestAnimationFrame

要想动画流程,更新频率要60帧/s,即16.67ms更新一次

setTimeout要手动控制频率,而RAF浏览器会自动控制

后台标签或隐藏在iframe中,RAF会暂停,而setTimeout依然会执行

bootcdn上把jquery引入https://www.bootstrapcdn.com/
RAF.JS
//3s把宽度从100px变为640 px, 即增加为540px
// 60帧/s ,3s 就是180帧, 每次变化3px
const $div1=$(‘#div1’)
let curWidth = 100
const maxWidth =640
//setTimeout
function animate(){
curWidth =curWidth +3
$div1.css(‘width,curWidth){
if(curWidth<maxWidth){
setTimeout(animate,16.7)//自己控制时间
}
}
animate()
}

funtion animate(){
    curWidth =curWidth +3
    $div1.css('width,curWidth){
        if(curWidth<maxWidth){
            window.requestAnimationFrame(animate)
        }
    }
animate()
}