如何在JS脚本中调整DOM元素的margin值 实现方向键控制按钮移动
问题原因
- DOM元素的
style属性赋值必须带单位,直接传入数字10浏览器无法识别,需要拼接px单位 - 代码中使用的
=+是错误语法,效果等价于直接赋值为正10,不会累加数值;就算使用+=,直接给原本是字符串格式(带px)的margin值加数字也会触发字符串拼接,得到非法属性值被浏览器忽略 - 原有margin方向的控制逻辑有误,比如按左箭头加
marginRight不会触发按钮左移,方向和属性对应关系不对
正确实现代码
document.body.addEventListener("keydown", function (evt) { const btn = document.querySelector('button'); // 获取当前元素真实生效的margin值,转成数字处理 const currentMT = parseInt(getComputedStyle(btn).marginTop) || 0; const currentML = parseInt(getComputedStyle(btn).marginLeft) || 0; switch(evt.code) { case 'ArrowUp': btn.style.marginTop = `${currentMT - 10}px`; break; case 'ArrowDown': btn.style.marginTop = `${currentMT + 10}px`; break; case 'ArrowRight': btn.style.marginLeft = `${currentML + 10}px`; break; case 'ArrowLeft': btn.style.marginLeft = `${currentML - 10}px`; break; default: } })
实现说明
- 使用
getComputedStyle可以读取元素最终生效的样式值,不会受初始样式写在内嵌样式还是外部样式表的影响 - 统一修改
marginTop和marginLeft两个属性即可实现四个方向的位移控制,逻辑更简洁 - 计算完成后用模板字符串拼接
px单位,符合style属性的赋值要求
内容的提问来源于stack exchange,提问作者user16648942
相关产品推荐
相关产品推荐

