JS 网页特效

本文详细解析了CSS中的offset系列属性,包括元素与定位父级的距离、自身大小,以及offset与style的区别。同时介绍了client系列用于获取未包含边框的尺寸,scroll系列用于元素实际滚动范围。通过实例展示了如何使用这些属性实现动画效果,如滚动和缓动控制。
摘要由CSDN通过智能技术生成

元素偏移量offset系列

获得元素距离带有定位父元素的位置,也就是说元素必须要有定位

获得元素自身的大小

返回数值都不带单位

offset属性作用
element.offsetParent返回该元素带有定位的父级元素,如果父级没有定位返回body
element.offsetTop返回元素相对带有定位的父元素上方偏移,父级没有定位返回body
element.offsetLeft返回元素相对带有定位的父元素左侧偏移,父级没有定位返回body
element.offsetWidth返回自身包括padding,边框,内容区的宽度,返回数值都不带单位
element.offsetHeight返回自身包括padding,边框,内容区的高度,返回数值都不带单位
offset和style的区别

style只能得到行内样式表的样式,offset可以得到外部样式表的样式

style得到的是带单位的字符串,offset得到的是数值

style得到的值不包含padding,offset包含padding,边框

style既可以获取数值也可以写入,offset只能获取不能写入

获取鼠标在盒子内的坐标
<body>
    <div class="box"></div>
    <script>
        var box = document.querySelector('.box');
        box.addEventListener('mousemove',function(e){
            var x = e.pageX - this.offsetLeft;
            var y = e.pageY - this.offsetTop;
            this.innerHTML = x + '#' + y
        })
    </script>
</body>

元素偏移量client系列

client属性作用
element.clientTop返回元素上边框大小
element.clientLeft返回元素左边框大小
element.clientWidth返回自身包括padding,内容区的宽度,不含边框,返回值不带单位
element.clientHeight返回自身包括padding,内容区的高度,不含边框,返回值不带单位

元素滚动scroll系列

scroll是我们元素的实际大小,内容超出会算超出去的内容(overflow:auto

scroll属性作用
element.scrollTop返回被卷去的上侧距离,返回数值不带单位
element.scrollLeft返回被卷去的左侧距离,返回数值不带单位
element.scrollWidth返回自身实际宽度,不含边框,返回数值不带单位
element.scrollHeight返回自身实际高度,不含边框,返回数值不带单位

立即执行函数

不需要调用,立马就能执行的函数

(function(){})()或者(function(){}()),第二个小括号可以看做调用函数,括号内可以传递参数

立即执行函数创建了一个独立的函数作用域

缓动动画函数

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=fro, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0px;
            padding: 0px;
        }

        .box {
            position: absolute;
            left: 300px;
            width: 200px;
            height: 200px;
            background-color: aqua;
        }

        span {
            display: block;
            position: absolute;
            top: 200px;
            left: 0px;
            width: 51px;
            height: 50px;
            background-color: burlywood;
        }
    </style>
</head>

<body>
    <div class="box"></div>
    <script>
        // obj:目标对象 
        // target:目标位置
        function animate(obj, target) {
            // 给对象添加一个timer的定时器属性,让元素只有一个定时器执行
            clearInterval(obj.timer);
            obj.timer = setInterval(function () {
                if (obj.offsetLeft == target) {
                    // 停止动画本质上是关掉定时器
                    clearInterval(obj.timer);
                }
                else {
                    // 缓动动画,向上取整
                    var step = (target - obj.offsetLeft) / 20
                    step = step > 0 ? Math.ceil(step) : Math.floor(step);
                    obj.style.left = obj.offsetLeft + step + 'px';
                }
            }, 30);
        }
        var div = document.querySelector('div');
        animate(div, 0);
    </script>
</body>

</html>

引入外部JS文件

外部文件./animate.js

function animate(obj, target, callback) {
    clearInterval(obj.timer);
    obj.timer = setInterval(function () {
        if (obj.offsetLeft == target) {
            clearInterval(obj.timer);
            if (callback) {
                callback();
            }
        }   
        else {
            var step = (target - obj.offsetLeft) / 20
            step = step > 0 ? Math.ceil(step) : Math.floor(step);
            obj.style.left = obj.offsetLeft + step + 'px';
        }
    }, 30);
}
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=fro, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0px;
            padding: 0px;
        }

        span {
            display: block;
            position: absolute;
            top: 200px;
            right: 0px;
            width: 50px;
            height: 50px;
            background-color: red;
            line-height: 50px;
            font-size: 20px;
        }

        .con{
            padding-right: 50px;
            position: absolute;
            top: 200px;
            right: -150px;
            width: 150px;
            height: 50px;
            background-color: royalblue;
            line-height: 50px;
            text-align: center;
            z-index: -1;
        }
        .sliderbar{
            position: absolute;
            top: 200px;
            right: 0px;
            width: 200px;
            height: 50px;
        }
    </style>
    <script src="./animate.js"></script>
</head>

<body>
    <div class="sliderbar">
        <span><b><-</b></span>
        <div class="con">出来啦</div>
    </div>
    <script>
        var sliderbar = document.querySelector('.sliderbar');
        var con = document.querySelector('.con');
        sliderbar.addEventListener('mouseenter',function(){
            con.style.display = 'block';
            animate(con,0,function(){
                sliderbar.children[1].innerHTML='回去啦';
            });
        })
        sliderbar.addEventListener('mouseleave',function(){
            animate(con,150,function(){
                con.style.display = 'none';
            });
        })
    </script>
</body>

</html>

常见案例

网页轮播图

常叫焦点图,是比较常见的网页特效

返回顶部

window.scroll(x,y)将页面滚动到相应的位置

本地存储

数据存储在本地浏览器,刷新不会对视数据,只能存储JSON字符串

window.sessionStorage

可以存储5mb,生命周期为关闭浏览器窗口

// 存储数据
sessionStorage.setItem(key,value);
// 获取数据
sessionStorage.getItem(key);
// 删除数据
sessionStorage.removeItem(key);
// 清除所有数据
sessionStorage.ckear();
window.localStorage

可以存储20mb,生命周期永久除非手动删除

// 存储数据
localStorage.setItem(key,value);
// 获取数据
localStorage.getItem(key);
// 删除数据
localStorage.removeItem(key);
// 清除所有数据
localStorage.ckear();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LyaJpunov

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值