原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】

下面是对原生JavaScript运动函数的封装示例的详细攻略。

一、运动函数的封装

经常使用的运动函数有匀速运动、缓动运动、抛物线运动等。将这些运动函数封装成通用的函数,可以提高代码的复用性。下面是一个基本的运动函数的封装。

function move(obj, attr, target, duration, fx, callback) {
    var startTime = Date.now();  // 记录起始时间
    var startVal = parseInt(getStyle(obj, attr));  // 获取初始值
    var distance = target - startVal;  // 计算总距离
    var times = Math.ceil(duration / 16.7);  // 计算运动次数
    var t = 0;  // 记录当前次数

    clearInterval(obj.timer);  // 清除之前可能存在的定时器

    obj.timer = setInterval(function () {
        t++;
        if (t > times) {
            clearInterval(obj.timer);
            callback && callback();  // 运动结束后执行回调函数
        } else {
            var val = fx(t,  startVal, distance, times);  // 根据运动曲线计算当前值
            obj.style[attr] = val + 'px';  // 将当前值设置给运动对象
        }
    }, 16.7);  // 每隔16.7ms计算一次运动状态
}

参数说明:

  • obj: 运动的DOM对象
  • attr: 运动的CSS属性
  • target: 运动的目标值
  • duration: 运动的总时间
  • fx: 运动曲线,可选。默认为匀速运动。
  • callback: 运动结束后执行的回调函数,可选。

二、匀速运动示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>匀速运动示例</title>
    <style>
        #box {
            width: 100px;
            height: 100px;
            background-color: red;
            position: absolute;
            left: 0;
            top: 0;
        }
    </style>
</head>
<body>
    <div id="box"></div>
    <script>
        function linear(t, b, c, d) {
            return c * t / d + b;
        }
        function getStyle(obj, attr) {
            if (window.getComputedStyle) {
                return window.getComputedStyle(obj, null)[attr];
            } else {
                return obj.currentStyle[attr];
            }
        }
        var box = document.getElementById('box');
        move(box, 'left', 300, 2000, linear);
    </script>
</body>
</html>

使用上面封装的运动函数,可以通过将fx参数设置为linear,实现匀速运动。

三、抛物线运动示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>抛物线运动示例</title>
    <style>
        #box {
            width: 50px;
            height: 50px;
            background-color: red;
            position: absolute;
        }
    </style>
</head>
<body>
    <div id="box"></div>
    <script>
        function parabola(t, b, c, d) {
            return c * Math.pow((t / d), 2) + b;
        }
        var box = document.getElementById('box');
        move(box, 'left', 300, 2000, parabola);
        move(box, 'top', 300, 2000, parabola);
    </script>
</body>
</html>

上面的示例演示了如何通过将fx参数设置为parabola,实现抛物线运动。需要注意的是,抛物线运动是有两个方向的,这里我们分别运动了水平和垂直方向。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • javascript限制用户只能输汉字中文的方法

    要限制用户只能输入汉字中文,可以在JavaScript中使用正则表达式来检查用户输入的文本字符。以下是可以用来实现此目的的JavaScript代码: // 使用正则表达式检查文本中是否包含非中文字符 function isChinese(str) { var regex = /^[\u4E00-\u9FA5]+$/; // 匹配所有汉字 return reg…

    JavaScript 2023年5月19日
    00
  • javascript 中对象的继承〔转贴〕

    以下是javascript中对象的继承攻略: 1. 继承的概念 在Javascript中,可以通过继承的方式来实现代码的复用性。继承是一种以已有类(或对象)为基础,创建新类(或对象)的技术,新创建的类或对象具有已有类(或对象)的属性和行为。 2. 原型链继承 原型链继承是Javascript中最基础的继承方式,它的原理就是通过让一个构造函数的原型指向另一个构…

    JavaScript 2023年5月27日
    00
  • JavaScript实现的反序列化json字符串操作示例

    JavaScript实现反序列化json字符串的操作示例,可以使用JSON.parse(),eval()等方法实现。 1.使用JSON.parse()方法实现反序列化json字符串 示例代码如下: const jsonString = ‘{"name":"Lily","age":20,"s…

    JavaScript 2023年5月27日
    00
  • javascript url几种编码方式详解

    JavaScript URL几种编码方式详解 在JavaScript中,对URL进行编码是一项常见的任务。URL编码是将URL中的字符串转换为可安全传输的格式的过程。在编码URL之前,需要了解几种不同的URL编码方式以及它们的适用场景。 encodeURIComponent() encodeURIComponent() 是Javascript中常用的编码函数…

    JavaScript 2023年5月20日
    00
  • 详解Javascript中的原型OOP

    详解JavaScript中的原型OOP 什么是原型OOP 原型OOP是指JavaScript中通过原型链实现面向对象编程的方式。它利用每个JavaScript对象都有一个指向原型的指针,通过原型链可以实现继承和复用,从而实现面向对象编程的特性。 原型链 原型链是通过每个对象都有一个指向原型的指针,从而形成的链式结构。例如: let animal = { ea…

    JavaScript 2023年6月10日
    00
  • JavaScript变量基本使用方法实例分析

    首先我们需要理解什么是JavaScript变量,变量是一个容器,用于存储数据值。在JavaScript中创建变量时需要使用var、let或const关键字进行声明。 声明变量 var变量 使用var声明的变量在声明的时候没有值,我们可以在后面对其进行赋值,也可以在声明时直接赋值。var有全局作用域和函数作用域两种,而且var可以被重复声明。 var a = …

    JavaScript 2023年5月27日
    00
  • JSP request.setAttribute()详解及实例

    我可以为您提供JSP request.setAttribute()的详细攻略。 什么是request.setAttribute()? 在JSP中,request.setAttribute()是一个用于在request对象中设置属性值的方法。它是通过request对象将数据从服务器端传递到客户端的一个常用方式。 通常,我们通过JSP页面和JavaBean之间的…

    JavaScript 2023年6月10日
    00
  • jquery无法设置checkbox选中即没有变成选中状态

    当使用 jQuery 设置一个 checkbox 的选中状态时,在某些情况下可能会出现并没有设置成功的情况,通常是因为没有正确理解 checkbox 的3种状态:选中(checked)、未选中(unchecked)和半选状态(indeterminate)。 首先,我们需要明确 checkbox 的3种状态,如果一个 checkbox 没有设置“选中”或“未选…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部