手写深拷贝
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()
}