前言:为了能够加深和方便以后查阅,自己记录了一些我在开发中遇到的各种千奇百怪的bug
javaScript代码开发中的细节
top变量在全局中声明报错
在全局中声明top变量会报错,是因为top已经在window中定义过,属于关键字系列。
let top = "无法使用";
console.log(top);
// Uncaught SyntaxError: Identifier 'top' has already been declared
onload事件只执行一次
定义一个onload事件后,该事件在页面中只会执行一次,你之后再多次调用onload事件是不会在去执行的了。
window.onload = function () {
console.log("只执行一次")
}
js中获取不到图片宽高
在js中获取图片标签的宽高,你获取的宽高值却一直都是0。
原因:因为在游览器中图片标签的渲染是异步执行的,在你通过js获取图片宽高的时候,图片在这时候是还没有加载出来的。
解决:只需要在页面加载完毕之后在去执行获取图片标签宽高的代码块,定义代码块在onload事件中执行,如下
window.onload = function () {
let imgW = imgObj.offsetWidth; // 获取宽高
}
淘宝放大镜效果中鼠标移动时小块出现闪动
在做图片放大镜效果时,通过event.offsetX
获取鼠标在元素中移动时鼠标相对图片元素的坐标值后,黄色标记显示在的鼠标的下方。在这里出现了一个问题,就是当鼠标移动的时候,黄色标记会时不时的出现闪动。
原因:当你鼠标在元素中移动的时候,获取的鼠标坐标是相对于该元素的位置,而这里是根据冒泡原理中的
event.target
来判定鼠标是相对那个元素的坐标值。于是当你鼠标不小心移动到黄色标志上的的时候,这时获取的鼠标坐标值就是相对于黄色标记的坐标值,而不是相对图片元素的坐标值了。可以想象一下,你开始相对元素的坐标是(230,50),突然变成了(0,5),当然会出现闪动的效果了。解决:我们可以通过
event.pageX & event.pageY
获取鼠标相对文档的坐标值,用这个坐标值减去图片的offsetLeft & offsetTop
值,就可以得到鼠标相对于这个图片元素的坐标值了。
let imgX = event.pageX - imgObj.offsetLeft; // left坐标
let imgY = event.pageY - imgObj.offsetTop; // top坐标
之后遇到的bug我都会把它添加到这博客里面来,方便记忆和后期查询。