




应使用addEventListener替代内联事件、requestAnimationFrame替代定时器、classList控制样式、insertAdjacentHTML安全插入DOM,并重视动画时机与边界处理。
addEventListener 替代内联事件,避免 HTML 和逻辑耦合直接写 onclick="doSomething()" 看似简单,但后期维护难、无法批量绑定、调试不便。真实项目中应把行为和结构分离。
实操建议:
document.getElementById('toggle').addEventListener('click', handler) 绑定container.addEventListener('click', e => { if (e.target.matches('.card-btn')) { ... } })
requestAnimationFrame 做平滑动画,别用 setTimeout 或 setInterval
滚动、缩放、淡入淡出等视觉变化,如果靠定时器驱动,容易卡顿、掉帧、不同步屏幕刷新率。
实操建议:
requestAnimationFrame(animate) 启动,而不是 setInterval(animate, 16)
style.transform 或 style.opacity
cancelAnimationFrame(id) 防止内存泄漏classList 控制样式切换,少碰 style 属性直接改 element.style.color = 'red' 会覆盖 CSS 文件里的其他声明,且难以复用、不利于主题切换。
实操建议:
.is-loading、.is-expanded
element.classList.add('is-active')、.toggle
('is-hidden')、.contains('is-disabled') 操作CSSStyleSheet.insertRule(),而非拼接 style 字符串fetch 数据回来再 innerHTML += ... 很常见,但若插入的 HTML 含 或依赖子元素初始化(如第三方组件),容易执行失败或错位。
实操建议:
insertAdjacentHTML('beforeend', htmlStr) 替代 innerHTML +=,更安全、不重绘已有节点querySelector 定位新元素再 addEventListener
fetch().then() 里直接操作尚未挂载的节点;先确认父容器已存在于 document 中