javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > js实现动画效果

JavaScript动画原理之如何使用js进行动画效果的实现

作者:Aic山鱼

在现在做页面很多时候都会用上动画效果,比如下拉菜单,侧边搜索栏,层的弹出与关闭等等,下面这篇文章主要给大家介绍了关于JavaScript动画原理之如何使用js进行动画效果实现的相关资料,需要的朋友可以参考下

前言

动画对于我们来说都不陌生,css里面就有很多动画,2d,3d等各种动画,本篇主要是如何使用js实现动画效果,如果本篇文章对你有帮助,点赞支持一下吧!

1.动画原理

        1.获得盒子当前位置

        2.让盒子在当前位置加上1个移动距离

        3.利用定时器不断重复这个操作

        4.加一个结束定时器的条件        

        5.注意该元素需要添加定位,才能使用element.style.left

<body>
    <div>
 
    </div>
    <script>
 
        var div = document.querySelector('div');
        var timer = setInterval(function () {
            if (div.offsetLeft >= 500) {
                clearInterval(timer);
            }
            div.style.left = div.offsetLeft + 2 + 'px';
        }, 30)
    </script>
</body>

主要核心就是利用定时器进行动画的实现

2.动画函数的封装

<script>
        // 简单动画函数封装
        function animate(obj, rug) {
            var timer = setInterval(function () {
                if (obj.offsetLeft >= rug) {
                    clearInterval(timer);
                }
                obj.style.left = obj.offsetLeft + 2 + 'px';
            }, 30)
        }
        var div = document.querySelector('div');
    animate(div,300);
    </script>

把这个动画封装成一个函数,方便以后的使用,该封装函数里的obj是哪个元素要进行动画的实现rug是该元素要移动多少距离

3.给不同元素添加定时器

<body>
    <div>
 
    </div>
    <button>点击走</button>
    <script>
        // 简单动画函数封装
        // 给不同元素添加定时器
        function animate(obj, rug) {
            clearInterval(obj.timer);
            obj.timer = setInterval(function () {
                if (obj.offsetLeft >= rug) {
                    clearInterval(obj.timer);
                } else {
                    obj.style.left = obj.offsetLeft + 2 + 'px';
                }
            }, 30)
        }
        var div = document.querySelector('div');
        var but = document.querySelector('button');
        but.addEventListener('click', function () {
            animate(div, 200);
        })
    </script>

这样就能实现多个元素进行动画的使用了,并且每个元素都有属于自己的定时器

4.缓动动画原理

公式:目标值-现在的位置/10 ,作为每次的移动距离

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            position: absolute;
            left: 0;
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
</head>
<body>
    <button>点击</button>
    <div></div>
    <script>
        function animate(obj, rug) {
            clearInterval(obj.timer);
            obj.timer = setInterval(function () {
                // 步长值
                var step = (rug - obj.offsetLeft) / 10;
                if (obj.offsetLeft == rug) {
                    clearInterval(obj.timer);
                } else {
                    obj.style.left = obj.offsetLeft + step + 'px';
                }
            }, 15)
        }
        var div = document.querySelector('div');
        var but = document.querySelector('button');
        but.addEventListener('click', function () {
            animate(div, 500);
        })
    </script>
</body>
 
</html>

5.给动画添加回调函数

回调函数原理:函数可以作为一个参数。将这个函数作为参数传到另一个函数里面 ,当那个函数执行完之后,再执行传进去的这个函数,这个过程就叫做回调。

当跑完800米后,会弹出一个框“hello”,这个就是在执行完800米这个动画后再次进行的函数,这就是回调函数

6.动画函数的使用

实现侧边栏滑动效果

当鼠标经过slider就会让con这 个盒子滑动到左侧

当鼠标离开slider就会让con这 个盒子滑动到右侧

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./js/animate.js"></script>
    <style>
        .silder {
            margin-left: 1600px;
            text-align: center;
            position: relative;
            line-height: 100px;
            width: 100px;
            height: 100px;
            background-color: aqua;
        }
        span {}
 
        .con {
            position: absolute;
            top: 0;
            left: 0;
            z-index: -1;
            width: 200px;
            height: 100px;
            background-color: rgb(132, 0, 255);
        }
    </style>
</head>
<body>
    <div class="silder">
        <span>←</span>
        <div class="con">问题反馈</div>
    </div>
    <script>
        var silder = document.querySelector('.silder');
        var con = document.querySelector('.con');
        var span = document.querySelector('span');
        silder.addEventListener('mouseenter', function () {
            animate(con, -200, function () {
                span.innerHTML = '→';
            });
        })
        silder.addEventListener('mouseleave', function () {
            animate(con, 0, function () {
                span.innerHTML = '←';
            });
        })
    </script>
</body>
 
</html>

写在最后

到此这篇关于JavaScript动画原理之如何使用js进行动画效果的实现的文章就介绍到这了,更多相关js实现动画效果内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文