ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PC 端网页特效

2022-04-19 01:01:44  阅读:151  来源: 互联网

标签:box 特效 console log 获取 PC 网页 div 属性


一、元素偏移量 offset 系列

offset 偏移量,相关属性可以动态获取元素的位置、大小等

ie9+ 以上才支持

注意:返回的数值都不带单位

1、属性

<div class="box">
    <div class="box-in"></div>
</div>
<script type="text/javascript">
    var box = document.querySelector('.box');
    // 1.offsetLeft 属性
    console.log(box.offsetLeft);  //相对于父元素(带有定位的)左侧的距离,都没有定位就相对于body  
    console.log(box.children[0].offsetLeft);
    // 2.offsetTop 属性
    console.log(box.offsetTop);   //相对于父元素(带有定位的)上侧的距离,都没有定位就相对于body  
    // 3.offsetWidth 属性
    console.log(box.offsetWidth);  //获取元素实际宽度(width + border + padding)
    // 4.offsetHeight 属性
    console.log(box.offsetHeight); //获取元素实际高度(height + border + padding)
    // 5.offsetParent 属性
    console.log(box.offsetParent); //获取父元素(带有定位的),都没有定位就获取到的是body
    console.log(box.children[0].offsetParent); 
</script>

2、offset 与 style 获取宽高的区别

  ① style 只能获取行内样式,offset 可以获取任意样式

  ② style 获取的值是 width,offset 获取的值是 width + height + padding

  ③ style 获取的是带单位的字符串,offset 获取的是不带单位的数值

  ④ style 属性可以获取也可以赋值,offset 只能获取不能赋值

总结:想获取元素大小、位置用 offset 更合适,想修改大小、位置用 style 更合适

二、元素可视区 client 系列

client 客户端,相关属性可以动态得到该元素的边框大小、元素大小

ie9+ 以上才支持

注意:返回的数值都不带单位

<div class="box"></div>
<script type="text/javascript">
    var box = document.querySelector('.box');
    // 1.clientLeft 属性
    console.log(box.clientLeft);  //获取元素左边框大小
    // 2.clientTop 属性
    console.log(box.clientTop);   //获取元素上边框大小
    // 3.clientWidth 属性
    console.log(box.clientWidth);  //获取宽度 width + padding(不含 border)
    // 4.clientHeight 属性
    console.log(box.clientHeight); //获取高度 height + padding(不含 border)
</script>

三、元素滚动 scroll 系列

scroll 滚动的,相关属性可以动态得到该元素的大小、滚动距离等

ie9+ 以上才支持

注意:返回的数值都不带单位

1、属性

<div id="">
    我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容
    我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容
</div>
<script type="text/javascript">
    var div = document.querySelector('div');
    //1.scrollLeft 属性
    div.addEventListener('scroll', function() {   //onscroll事件
        console.log(div.scrollLeft); //左侧被卷去的距离
    })
    //2.scrollTop 属性
    div.addEventListener('scroll', function() {
        console.log(div.scrollTop); //上侧被卷去的距离
    })
    //3.scrollWidth 属性
    console.log(div.scrollWidth);  //获取宽度 width + padding(不含 border)
    //4.scrollHeight 属性
    console.log(div.scrollHeight); //获取高度 height + padding(不含 border)
</script>

2、scroll 与 client 获取宽高的区别

scroll 的 width + padding 里的width包含溢出内容,client 是里的width指定的 width

3、网页滚动

页面上侧被卷去的距离用 window.pageYOffset 和 window.pageXOffset 获取;

网页 oncroll 滚动事件的事件源是页面 document

4、三大系列总结

获取元素位置:offsetLeft、offsetTop

获取元素大小:clientWidth、clientHeight

获取滚动距离:scrollTop、scrollLeft

5、mouseover 和 mouseenter 区别

mouseover 经过自身和子盒子都会触发,mouseenter 经过自身触发,经过子盒子不会触发;

之所以这样是因为 mouseenter 不会冒泡;

跟 mouseenter 搭配的鼠标离开事件 mouseleave 同样不会冒泡

四、动画函数封装

1、动画

动画利用定时器和定位实现,例如:

<div></div>
<script type="text/javascript">
    var div = document.querySelector('div');  //元素需要添加 定位
    var time = setInterval(function(){   //用定时器不断重复这个操作
        div.style.left = div.offsetLeft + 1 + 'px'; //让盒子在当前位置加上1个移动距离 
        if (div.offsetLeft > 1000) {   //结束定时器的条件
            clearInterval(time); 
        }
    }, 100);
</script>

2、动画函数的封装

将上面的动画进行动画函数的封装,例如:

<div></div>
<script type="text/javascript">
    function animate(obj, target) { //传入目标对象obj 目标位置target
        var time = setInterval(function(){   
            obj.style.left = obj.offsetLeft + 1 + 'px'; 
            if (obj.offsetLeft > target) {   
                clearInterval(time); 
            }
        }, 10);
    }
    var div = document.querySelector('div');  
    animate(div, 600);
</script>

3、动画函数封装的优化

(1)存在的问题

① 每调用一次 animate() 函数,就会开辟一个新的内存空间(因为 var 会开辟空间)

② 每个目标对象的定时器名称都相同,都是 time

③ 如果控制动画的开启,比如一个 button,如果点击多次,那么动画会越来越快(因为一个动画函数是持续一段时间的,多次点击会有多个计时器叠加,效果也就叠加了) 

(2)解决

<div></div>
<button type="button">开启动画</button>
<script type="text/javascript">
    function animate(obj, target) { 
        clearInterval(obj.timer);  //清除掉以前的定时器
        obj.timer = setInterval(function(){   //采用给对象添加属性的方法给定时器命名
            obj.style.left = obj.offsetLeft + 1 + 'px'; 
            if (obj.offsetLeft > target) {   
                clearInterval(obj.timer); 
            }
        }, 10);
    }
    var div = document.querySelector('div');  
    var btn = document.querySelector('button');
    btn.addEventListener('click', function() {
        animate(div, 600);
    })
</script>

 

标签:box,特效,console,log,获取,PC,网页,div,属性
来源: https://www.cnblogs.com/eidolonw/p/16163543.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有