js查漏补缺-14

it2023-01-23  56

0x00 scroll

    scroll与client十分相似,都是返回值不带边框且不带单位,与client不同的一点就是,当元素超出盒子之后,client返回的值仍是盒子的大小,scroll返回的大小则是加上了超出盒子元素的大小。

0x01 offset client scroll三大系列的对比总结

    offset系列主要用于获取元素位置offsetLeft offsetTop;

    另外需要注意的是以上两个方法兼容性差,只兼容ie9及以上的浏览器。offsetWidth和offsetHeight则兼容性更好,全线兼容

    client系列主要用于获取元素大小clientWidth,clientHeight,兼容性较好,唯一要注意的是ie6有点问题

    scroll系列主要用于获取滚动距离scrollTop scrollLeft,

0x02 mouseenter与mouseover事件对比

    这两个事件都是鼠标经过时触发;

    但是mouseenter事件没有冒泡事件,不会触发父元素的事件,所以只有经过盒子本身才触发

    而mouseover事件经过子元素也会触发。

0x03 一个简单的缓动动画效果

    算法为(目标值-当前移动的距离)/10做本次移动的距离

<body> <div class="father"> </div> <script> function animate(obj,target){ clearInterval(obj.timer); obj.timer = setInterval(function (){ let step = target - obj.offsetLeft; if(step >= 0){ step = Math.ceil((target - obj.offsetLeft) / 10); }else { step = Math.floor((target - obj.offsetLeft) / 10); } if(obj.offsetLeft == target){ clearInterval(obj.timer); }else{ obj.style.left = obj.offsetLeft + step + 'px'; console.log(obj.style.left); } }, 30) } </script> </body>

0x04 轮播图的无缝滚动

    原理是复制一份第一张图片,当轮播图播放完最后一张图片时,然后播放到这张复制的图片,再点击下一张时,

    ps:页面的滚动用winodw.scroll(0,0);如果需要播放滚动动画则用上面的动画实现。

0x05 筋斗云效果实现

<body> <div class="box"> <span class="aqua"></span> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> </ul> </div> <script src="js/annimate.js"></script> <script> function animate(obj,target){ clearInterval(obj.timer); obj.timer = setInterval(function (){ let step = target - obj.offsetLeft; if(step >= 0){ step = Math.ceil((target - obj.offsetLeft) / 10); }else { step = Math.floor((target - obj.offsetLeft) / 10); } if(obj.offsetLeft == target){ clearInterval(obj.timer); }else{ obj.style.left = obj.offsetLeft + step + 'px'; console.log(obj.style.left); } }, 30) } window.addEventListener('load',function (){ let aqua = document.querySelector('.aqua'); let box = document.querySelector('.box'); let li = box.querySelectorAll('li'); let position = 0; for(let i = 0;i < 6;i++){ li[i].addEventListener('mouseenter',function (){ animate(aqua,this.offsetLeft); }) li[i].addEventListener('mouseleave',function (){ animate(aqua,position); }) li[i].addEventListener('click',function (){ position = this.offsetLeft; }) } }) </script> </body>

0x06 移动端touch

    touchstart事件表示刚触碰;

    touchmove事件表示触碰时移动;

    touchend事件表示结束触碰;

0x07 移动端click事件延迟300ms解决方案

    方案1:在视口标签中加入user-scalable=no,禁用用户缩放。

    方案2:

0x08 本地储存

    window.sessionStorage以浏览器关闭作为生命周期;在同一个窗口下数据可以共享;以键值对的形式存储使用

      sessionStorage有三个常用方法,setItem(key,value)用来存储数据;getItem(key)用来获取数据;removeItem(key)用来删除数据

    window.localStorage生命周期为永久,并且同一浏览器下的不同窗口可以共享;以键值对的形式存储使用。

      方法同上

    

    

最新回复(0)