码迷,mamicode.com
首页 > Web开发 > 详细

JS运动-自由落体运动

时间:2015-05-23 08:51:01      阅读:314      评论:0      收藏:0      [点我收藏+]

标签:自由落体   拖拽   

模拟物理中的自由落体运动:废话不多说,先看效果!!

技术分享

图片效果不太好,有些卡,可以把代码考出来自己运行看下效果!!

基本过程:鼠标可拖拽div,当鼠标抬起的时候,div会自由下落,然后弹起下落,直到速度为0运动停止,下落和弹起直至停止的过程是模拟 自由落体运动

完成测试代码:

<div id="box"></div>

<style>
        #box{
            position: absolute;left: 0;top: 0;
            width: 100px;height: 100px;
            background: green;
        }
</style>

<script>
    window.onload = function () {
        var oDiv = document.getElementById('box');
        var disX = 0,
            disY = 0;
        /*拖拽事件*/
        oDiv.onmousedown = function(ev){
            disX = ev.clientX - oDiv.offsetLeft;
            disY = ev.clientY - oDiv.offsetTop;
            document.onmousemove = function (ev) {
                var ev = ev || window.event;
                oDiv.style.left = ev.clientX - disX +'px';
                oDiv.style.top = ev.clientY - disY +'px';
            }
            document.onmouseup = function () {
                document.onmousemove = null;
                startMove(oDiv);
                document.onmouseup = null;
            }
        }
        
        var iSpeed = 0;// 自由落体开始速度为0
        var timer = null;
        function startMove(obj){
            clearInterval(timer);
            var clientH = document.documentElement.clientHeight || document.body.clientHeight;
            var maxT = clientH - obj.offsetHeight; // 当div的top值等于浏览器可视区的高 减去div自身高的时候 说明碰到了可视区的底边

            timer = setInterval(function(){
                iSpeed += 3;// 下落过程速度约来越大
                var T =  obj.offsetTop + iSpeed;
                if(T > maxT){
                    T = maxT;
                    iSpeed *= -1;// 当碰到底边时 弹上来速度为负
                    iSpeed *= 0.75;// 模拟摩擦力
                }
                if(T < 0){
                    T = 0;
                    iSpeed *= -1;
                }
                oDiv.style.top = T +'px';
            },30);
        }

    }

</script>
关于拖拽部分实现的讲解,请参考《JS拖拽》这篇文章

自由落体要点:

1. 计算物体可下落的做大距离:maxT

2. 开启定时器 通过速度iSpeed的改变 不断改变物体的top值

3. 当物体下落到最大距离时,开始反弹,此时通过iSpeed*0.75 来模拟摩擦力,使物体能停下来

JS运动-自由落体运动

标签:自由落体   拖拽   

原文地址:http://blog.csdn.net/u014205965/article/details/45922471

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!