js 拖拽 碰撞 + 重力 运动

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>拖拽 碰撞+重力运动</title>
    <style>
        #div1
        {
            width:100px;
            height:100px;
            background:red;
            position:absolute;
        }
    </style>

    <script type="text/javascript">
        window.onload = function(){
            var oDiv = document.getElementById("div1");

            var lastX = 0;
            var lastY =0;

            oDiv.onmousedown = function(ev){

                var en = ev || event;

                var disX = en.clientX - oDiv.offsetLeft;
                var disY = en.clientY - oDiv.offsetTop;

                document.onmousemove = function(ev){
                    var e = ev || event;
                    var l = e.clientX - disX;
                    var t = e.clientY - disY;

                    oDiv.style.left = l +‘px‘;
                    oDiv.style.top = t + ‘px‘;

                    speedX = l - lastX;
                    speedY = t - lastY;
                }

               document.onmouseup = function(){
                    document.onmousemove = null;
                    document.onmouseup = null;
                    //开始运动
                    move();

               }
               //关闭定时器
               clearInterval(timer);

            }

        }

         //碰撞+重力 运动(计算空气阻力)
        var timer = null;
        //横向初速度
        var speedX = 0;
        //竖向初速度速度
        var speedY = 0;

        function move(){

            clearInterval(timer);

            timer = setInterval(function(){

                var oDiv = document.getElementById("div1");

                //类似重力加速度 : g = 3;
                //竖向加速度:3
                speedY+=3;

                var l = oDiv.offsetLeft + speedX ;
                var t = oDiv.offsetTop + speedY;

                if(t >= document.documentElement.clientHeight-oDiv.offsetHeight)
                {
                    //竖向空气阻力
                    speedY*=-0.8;
                    //横向空气阻力
                    speedX*=0.8;
                    //将top设置为(document.documentElement.clientHeight - oDiv.offsetHeight)px
                    t = document.documentElement.clientHeight - oDiv.offsetHeight;
                }
                else if(t<=0)
                {
                    //竖向空气阻力
                    speedY*=-0.8;
                    //横向空气阻力
                    speedX*=0.8;
                    //将top设置为0px
                    t=0;
                }

                if(l>=document.documentElement.clientWidth-oDiv.offsetWidth)
                {
                    //横向空气阻力
                    speedX*=-0.8;
                    //将left设置为(document.documentElement.clientWidth - oDiv.offsetWidth)px
                    l = document.documentElement.clientWidth - oDiv.offsetWidth;
                }
                else if(l<=0)
                {
                    //横向空气阻力
                    speedX*=-0.8;
                    //将left设置为0px
                    l = 0;
                }

                //将横向速度设置为0
                if(Math.abs(speedX)<1)
                {
                    speedX = 0;
                }
                //将竖向速度设置为0
                if(Math.abs(speedY)<1)
                {
                    speedY = 0;
                }

                //关闭定时器

                //横、竖速度都为空及物体距顶部高度为(可视窗口高度 - 物体高度)
                if(speedX==0 && speedY==0 && t==document.documentElement.clientHeight-oDiv.offsetHeight)
                {
                    clearInterval(timer);
                }
                else
                {
                    oDiv.style.left = l+‘px‘;
                    oDiv.style.top = t +‘px‘;
                }           

            },30);
        }
    </script>
</head>
<body>

   <div id="div1">
    </div>
    <span style="width:1px;height:300px;background:black;left:300px"></span>
</body>
</html>
时间: 2024-11-07 07:10:44

js 拖拽 碰撞 + 重力 运动的相关文章

js 碰撞 + 重力 运动

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>碰撞+重力运动</title>

js拖拽效果实现

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head>    <meta

一步一步实现JS拖拽插件

js拖拽是常见的网页效果,本文将从零开始实现一个简单的js插件. 一.js拖拽插件的原理 常见的拖拽操作是什么样的呢?整过过程大概有下面几个步骤: 1.用鼠标点击被拖拽的元素 2.按住鼠标不放,移动鼠标 3.拖拽元素到一定位置,放开鼠标 这里的过程涉及到三个dom事件:onmousedown,onmousemove,onmouseup.所以拖拽的基本思路就是: 1.用鼠标点击被拖拽的元素触发onmousedown (1)设置当前元素的可拖拽为true,表示可以拖拽 (2)记录当前鼠标的坐标x,y

React.js实现原生js拖拽效果及思考

一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖拽效果. 首先,其实拖拽效果的思路是很简单的.主要就是三个步骤: 1.onmousedown的时候,启动可拖拽事件,记录被拖拽元素的原始坐标参数. 2.onmousemove的时候,实时记录鼠标移动的距离,结合被拖拽元素第一阶段的坐标参数,计算并设置新的坐标值. 3.onmouseup的时候,关闭可拖拽事件

再谈React.js实现原生js拖拽效果

前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目地就是要尽量避免直接操作dom元素,所以我们在对dom元素进行操作的时候需要注意,我之前为了获取form的参数就直接用了var dragBox=document.getElementById('form')去找dom,但是其实记录from的初始位置,可以在其子组件更新父组件参数的时候调用.即在MyF

拖拽+碰撞+重力加速度

鼠标在标题处按下,然后拖动,放下的那一刻执行碰撞+重力加速度事件 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>拖拽+碰撞+重力加速度</title> <met

php+mysql+js拖拽div实例

php+mysql+js拖拽div实例 代码已改好,放在目录下可直接使用.适合新手学习! 效果如下图,比较适合做可以移动,拖拽的留言板. 实现思路: 思路也是很简单了,就是js获取定位后的数据,然后请求给PHP,php将定位的横向坐标和纵向坐标存到数据库! 代码实例下载地址:http://download.csdn.net/detail/u011986449/8099045

js拖拽分析

js拖拽分析 思路 1.三个鼠标事件,mousedown,mousemove,mouseup 2.可移动性absolute 3.边界限制 得到鼠标点击处和div边界的距离,然后得出top 和 left 的值 具体 mousedown div.onmousedown=function(event){ var event=event||window.event var diffX=event.clientX-div.offsetLeft var diffY=event.clientY-div.off

js拖拽原理和碰撞原理

拖拽的原理onmousedown 选择元素onmousemove 移动元素onmouseup 释放元素 1:如果拖拽的时候有文字:被选中,会产生问题原因:当鼠标按下的时如果页面中有文字或者图片被选中的时候,则会发生文字默认可以被拖动,因此标准 :e.preventDefalut(); 阻止他的默认行为 非标准的阻止默认行为 非标准:window.event.returnValue=false; 2:给某元素设置全局捕获,当我们给一个元素设置全局捕获,那么这个元素会监听后续发生的所有事件,当有事件