首页 > 其他分享 >39. JS动画效果的实现(附带示例)

39. JS动画效果的实现(附带示例)

时间:2022-10-11 16:56:53浏览次数:59  
标签:function 动画 39 示例 JavaScript JS div CSS

1. 前言

在学习 CSS 时我们知道,通过 CSS 可以实现简单的动画效果,但对于比较复杂的动画,使用 CSS 实现起来就会比较麻烦。除了可以使用 CSS 来实现外,也可以使用 JavaScript 来实现。JavaScript 动画主要是通过修改元素样式来实现的,能够实现许多 CSS 动画所不能实现的效果,例如暂停、回放等。
与 CSS 动画相比,JavaScript 动画具有以下特点:

  • JavaScript 动画控制能力更强,可以在动画播放过程中对动画进行控制,例如开始、暂停、回放、终止、取消等;
  • JavaScript 动画的效果比 CSS 动画更丰富,比如曲线运动,冲击闪烁,视差滚动等效果,只有 JavaScript 动画才能完成;
  • CSS 动画有兼容性问题,而 JavaScript 大多时候没有兼容性问题。

JavaScript 主要通过代码修改 DOM 元素来实现动画的,并且可以配合定时器来实现循环播放,示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JavaScript</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        #box {
            width: 200px;
            height: 200px;
            margin-top: 10px;
            background: rgb(43, 221, 255);
            position: relative;
            left: -200px;
            top: 0;
        }
        #box span {
            width: 20px;
            background: rgb(255, 119, 157);
            position: absolute;
            left: 200px;
            top: 75px;
            color: #fff;
            text-align: center;
            cursor: pointer;
            padding: 5px 1px 5px 0;
            border-radius: 0 5px 5px 0;
        }
        #box span:hover {
            background: rgb(255, 84, 137);
        }
    </style>   
</head>
<body>
    <div id="box">
        <span id="share">分享</span>
    </div>
    <script>
        window.onload = function () {
            //动画
            var div = document.getElementById("box");
            var timer = null;
            div.onmouseover = function () {
                startMove(0);
            };
            div.onmouseout = function () {
                startMove(-200);
            };
            function startMove(targetPosition) {
                clearInterval(timer);
                var speed = 0;
                if (targetPosition < 0) {
                    speed = -10;
                } else {
                    speed = 10;
                }
                timer = setInterval(function () {
                    if (div.offsetLeft == targetPosition) {
                        clearInterval(timer);
                    } else {
                        div.style.left = div.offsetLeft + speed + 'px';
                    }
                }, 17);
            }
        };
    </script>
</body>
</html>

运行结果如下:

JS动画效果示例1
图1:JavaScript 动画效果

提示:如今,大多数显示器的刷新率为 60HZ,为了实现更加平滑的动画效果,使用定时器的最佳循环间隔约为 17ms。

下面再通过一个示例来演示如何创建 JavaScript 动画,示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JavaScript</title>
    <style type="text/css">
        * {
            margin: 0 auto;
            padding: 0;
        }
        ul {
            list-style: none;
        }
        #view {
            position: relative;
            width: 320px;
            height: 120px;
            border: 10px solid #bc8f8f;
            overflow: hidden;
            margin-top: 5px;
        }
        #img_list {
            position: absolute;
            width: 960px;
        }
        #img_list li {
            float: left;
            width: 320px;
            height: 120px;
        }
    </style>
</head>
<body>
    <div id="view">
        <ul id="img_list">
            <li style="background-color: #87ceeb;"></li>
            <li style="background-color: #ff69b4;"></li>
            <li style="background-color: #98fb98;"></li>
        </ul>
    </div>
    <script type="text/javascript">
        var img_list = document.getElementById('img_list');
        setInterval(function() {
            for (var i = 0; i <= 100; i++) {
                (function(pos) {
                    setTimeout(function() {
                        img_list.style.left = - (pos / 100) * 320 + 'px';
                    }, (pos + 1) * 10)
                })(i)
            }
            var current = img_list.children[0];
            setTimeout(function() {
                img_list.appendChild(current);
                img_list.style.left = '0px';
            }, 1100);
        }, 2000);
    </script>
</body>
</html>

运行结果如下:

JS动画效果示例2
图2:JavaScript动画效果

标签:function,动画,39,示例,JavaScript,JS,div,CSS
From: https://www.cnblogs.com/jiajunling/p/16779755.html

相关文章

  • 初识node.js[1]
    一、浏览器中JavaScript组成部分JS核心语法【变量、数据类型;循环、分支、判断;函数、作用域、this;etc...】WebApi【DOM;BOM;Ajax;...】为什么JavaScript可以在浏览器内运行......
  • nlohmann / json 使用
       下载地址   https://github.com/nlohmann/json/tree/develop/single_include/nlohmann/json.hpp  引入工程  json.hpp是源文件包含了所有的函数,引入......
  • NETCORE中如何操作Appsettings.json 文件
    对于很多初学NETCORE的同学来说,怎么从appsettings.json文件中获取各种类型数据,一直没搞明白。今天我们就对它的几种数据格式的读取做个说明。appsettings.json 是我们......
  • jvm 虚拟机 探秘 结构 内容 gc 算法 gc 选择 和不同场景配置 示例
    目录​​1.介绍​​​​2.虚拟机组成​​​​2.1.数据隔离区域​​​​2.1.1.程序计数器​​​​2.1.2.jvm虚拟机栈​​​​2.1.3.本地方法栈​​​​2.2.数据共享区域​​......
  • workerman/gatewayworker使用protobuffer和json的对比
    作者回答“在websocket上传输json更通用一些,调试也更方便一些。”“快0.00001秒没有什么太大意义。另外最好压测下php的json和protobuffer到底哪个快,php下还真不一定prot......
  • js中 问号点(?.)和双问号(??)的用法
    当访问多层对象属性(比如res.data.list)时,如果属性res.data为空,则会报引用错误,为此我们不得不这么处理:letdataList=res&&res.data&&res.data.list//......
  • 接口返回JSON字符串压缩和解压
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.IO;usingSystem.IO.Compression;namespaceCSIBrowser.Client.Util{......
  • JSP实用教程 PDF 下载
    下载地址:https://kohler.lanzouv.com/iJVIn0dm49gf访问密码:公众号:愚生浅末回复1011获取。......
  • JS_0066:date 相关方法 获取时间字符串 计算时间差
    1,获取时间字符串varnowdatestr=newDate().toLocaleDateString();获取时间格式如:2022/10/10 2,计算时间差$nowdate=date('Y-m-dH:i:s',time());$ret['leftday......
  • JSX语法规则
    1.定义虚拟DOM时,不要写引号。创建虚拟DOM:constVDOM=(<h2id="atguigu">HelloReact!</h2>)渲染虚拟DOM到页面ReactD......