














//页面加载完毕之后 再执行js代码window.addEventListener('load', function () {var preview_img = document.querySelector('.preview_img'); //事件源var mask = document.querySelector('.mask'); //图标上面的小遮罩盒子var big = document.querySelector('.big'); //存放放大图片的盒子// 1. 当我们鼠标经过preview_img 就显示和隐藏 mask 遮罩层 和big 大盒子preview_img.addEventListener('mouseover', function () {mask.style.display = 'block';big.style.display = 'block';})preview_img.addEventListener('mouseout', function () {mask.style.display = 'none';big.style.display = 'none';})// 2. 鼠标移动的时候,让黄色的盒子跟着鼠标来走preview_img.addEventListener('mousemove', function (e) {// (1). 先计算鼠标在盒子里面的坐标var x = e.pageX - this.offsetLeft;var y = e.pageY - this.offsetTop;console.log(x, y);// (2). 减去盒子自身高度的一般,让鼠标位于盒子中心// (3). 我们mask 移动的距离var maskX = x - mask.offsetWidth / 2;var maskY = y - mask.offsetHeight / 2;// (4). 如果X 坐标小于0 就让他停在0的位置// 遮挡层的最大移动距离var maskMax = preview_img.offsetWidth - mask.offsetWidth;if (maskX <= 0) {maskX = 0;} else if (maskX >= maskMax) {maskX = maskMax;}if (maskY <= 0) {maskY = 0;} else if (maskY >= maskMax) {maskY = maskMax;}mask.style.left = maskX + 'px';mask.style.top = maskY + 'px';// 大图片的移动距离 = 遮挡层移动距离 * 大图片最大移动距离 / 遮挡层的最大移动距离var bigImg = document.querySelector('.bigImg');// 大图片最大移动距离var bigMax = bigImg.offsetWidth - big.offsetWidth;// 大图片的最大移动距离var bigX = maskX * bigMax / maskMax;var bigY = maskY * bigMax / maskMax;bigImg.style.left = -bigX + 'px';bigImg.style.top = -bigY + 'px';})})






Scroll 是内容高度和宽度的大小(包含内边距,但不包含边框)



<body><div class="slider-bar"><span class="goBack">返回顶部</span></div><div class="header w">头部区域</div><div class="banner w">banner区域</div><div class="main w">主体部分</div><script>// 1. 获取元素var sliderbar = document.querySelector('.slider-bar'); //侧部导航栏var banner = document.querySelector('.banner');// console.log(banner.offsetTop); //到带有定位的父盒子上方的偏移// banner.offsetTop 就是被卷去的头部var bannerTop = banner.offsetTop;// 当我们侧边栏 固定定位后 应该变化的数值var sliderbarTop = sliderbar.offsetTop - bannerTop;// 获取main 主体元素var main = document.querySelector('.main');var goBack = document.querySelector('.goBack')var mainTop = main.offsetTop;// 2. 页面滚动事件 scrolldocument.addEventListener('scroll', function () {// window.pageYOffset 页面被卷去的头部// console.log(window.pageYOffset);// 3. 当我们页面被卷去的头部大于等于了172 此时 侧边栏就要改为固定定位if (window.pageYOffset >= bannerTop) {sliderbar.style.position = 'fixed';sliderbar.style.top = sliderbarTop + 'px';} else {sliderbar.style.position = 'absolute';sliderbar.style.top = '300px';}if (window.pageYOffset >= mainTop) {goBack.style.display = 'block';} else {goBack.style.display = 'none';}})goBack.addEventListener('click', function () {//滚动条返回顶部window.scrollTo(0, 0);})</script></body>


