zoukankan      html  css  js  c++  java
  • 抛物线函数封装

    /*
     * 抛物线函数
     * 参数:
     * elem:被操作的元素
     * targetX:目标点
     * targetY:目标点
     * a:        a<0时,开口朝下; a>0时,开口朝上
     * fn:        运动执行后,所触发的函数
     */
    function parabola(elem, targetX, targetY, a, fn){
        // 起点
        var [originX, originY] = [elem.offsetLeft, elem.offsetTop];
        // 目标点
        // targetX, targetY
        var x = targetX - originX;
        var y = targetY - originY;
        var c = 0;    
        // 抛物线公式
        // y = axx + bx + c;
        // b = (y-axx-c)/x
        var b = (y-a*x*x-c)/x;
        // 已知a、b、c后,随意给一个x,求这个x所对应的y
        x = 0;    
        clearInterval(elem.timer2);
        elem.timer2 = setInterval( ()=>{
            //x += 1;    // 匀速运动
            x += (targetX-elem.offsetLeft)/6;    // 缓冲运动
            x = Math.ceil(x);
            // 根据抛物线公式,已知x,求y
            y = a*x*x + b*x + c;        
            // 更新坐标
            elem.style.left = originX+x+'px';
            elem.style.top = originY+y+'px';
            // 如果到了目标点
            if( originX+x>=targetX ){
                elem.style.left = targetX+'px';
                elem.style.top = targetY+'px';
                clearInterval(elem.timer2);    // 停止定时器
                if(fn){ // 如果设置了回调函数,
                    fn(); // 则执行回调函数
                }
            }
        }, 50 );
    }
  • 相关阅读:
    2.1 String的特性
    sql语句对列进行操作
    java 集合排序
    C#抽象类及其方法的学习
    haproxy+keepalived实现高可用负载均衡
    RPC框架简易实现
    WCF中的ServiceHost初始化两种方式
    C# Stopwatch与TimeSpan详解
    HBase入门篇
    nginx+tomcat+redis完成session共享
  • 原文地址:https://www.cnblogs.com/l8l8/p/8931359.html
Copyright © 2011-2022 走看看