首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jQuery中为方程式制作动画

在jQuery中为方程式制作动画
EN

Stack Overflow用户
提问于 2013-05-01 23:32:26
回答 1查看 521关注 0票数 1

我想模拟一个扔石头的场景。

X轴上的运动方程:x = v*t*cos(Ɵ)

在y轴上:y = v*t*sin(Ɵ)-.5*g*t^2

v=initial velocity, t=time, Ɵ=the angle of throwing

我是否可以使用animate()函数以及如何使用,或者有更好的方法来实现这一点。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-05-02 02:28:47

我拼凑了一把小提琴,做了我想你要找的东西。

您可以根据需要调整角度、g和v变量(或者您可以将它们设置为HTML input或甚至jQuery UI滑块。

作为奖励,我创建了一个余像效果,每隔几帧就“跟踪”一次路径。

小提琴:http://jsfiddle.net/azWHu/

来源:

代码语言:javascript
复制
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

    <div id="content">
      <div id="projectile"></div>
    </div>

    <script>
    var framerate = 50; // Desired frames per second
    var frame_interval = 1000/framerate;
    var start_x = null; // desired starting x offset
    var start_y = null; // desired starting y offset

    var v = 96.0;  // velocity
    var t = 0; // time
    var angle = 45.0; // angle
    var g = 32.0; // gravity
    var projectile = null;
    var i = 0;

    $(function(){
      // Document is ready
        projectile = $("#projectile"); 
        start_x = projectile.offset().left;
        start_y = projectile.offset().top;

        // Define an interval that will execute every [frame_interval] milliseconds 
        var anim_interval = setInterval(function() {
            t = t+ frame_interval;
            updatePosition(t/1000, start_x, start_y);
            if (t > 8000) {
                clearInterval(anim_interval);
            }
        }, frame_interval);

    });

    function updatePosition(t, start_x, start_y) {

        change_x = v*t*Math.cos(angle);
        change_y = (v*t*Math.sin(angle)) - (0.5*g * Math.pow(t, 2));    

        projectile.css({
            left: start_x + change_x + 'px',
            top: start_y - change_y + 'px'
        });    

        i++;
        if (i % 15 == 0) {
            c = projectile.clone();
            c.css("opacity", "0.3");
            $("#content").append(c);
        }    
    }


    </script>

    <style>
    #content {
        border: 1px solid #000;
        width: 640px;
        height: 480px;
        overflow: hidden;
        position: absolute;
    }
    #projectile {
        position: absolute;
        background-color: #ff0000;
        left:12px;
        top: 440px;
        width:8px;
        height:8px;
        border-radius: 8px;
        z-index: 9;
    }
    </style>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16321241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档