美文网首页
利用原生js做出拖拽弹射效果

利用原生js做出拖拽弹射效果

作者: 刘翾 | 来源:发表于2017-11-08 21:04 被阅读8次

预览图

这里写图片描述

效果图帧数有点低...., 下面附上代码, 大家仔细研究, 总之它会在当前可视区内弹来弹去

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ceshi</title>
    <style>
    *{
        margin: 0;
        top: 0;
    } 
    #demo{
        border-radius: 50%;
        background: pink;
        position: absolute;
        left: 0;
        top: 0;
        width: 100px;
        height: 100px;
    }
    </style>
</head>
<body>
<div id="demo">
</div>
    <script type="text/javascript">
    var Odiv = document.getElementById('demo');
Odiv.onmousedown = function (e) {//拖拽小物体
    clearInterval(this.timer);
    var event = e || window.event;
    var disX = event.clientX - this.offsetLeft;
    var disY = event.clientY- this.offsetTop;
    var _self = this;
    var ispeedX = 0;
    var ispeedY = 0;
    var lastX = Odiv.offsetLeft;
    var lastY = Odiv.offsetTop;
    document.onmousemove = function (e) {//实时更新当前小物体的位置
        event = e || window.event;
        var newL = event.clientX - disX;
        var newT = event.clientY - disY;
        ispeedX = newL - lastX;
        ispeedY = newT - lastY;
        lastX = newL;
        lastY = newT;
        _self.style.left = newL + 'px';
        _self.style.top = newT + 'px';
    }
    document.onmouseup = function() {//当鼠标移开时, 触发事件
        document.onmousemove = null;//移除onmousemove事件
        document.onmouseup = null;
        startTSMove(_self, ispeedX, ispeedY);
    }
}

function startTSMove (obj, ispeedX, ispeedY) {
    clearInterval(obj.timer);
    var g = 3;//模拟重力加速度
    obj.timer = setInterval(function() {
        ispeedY += g;
        var newL = obj.offsetLeft + ispeedX;
        var newT = obj.offsetTop + ispeedY;

        if(newT >= (document.documentElement.clientHeight - obj.offsetHeight)){
             ispeedY *= -1;//每次撞到当前可视区窗口时, 速度变为相反
             ispeedX *= 0.8;//每次撞击模拟动能损失
             ispeedY *= 0.8;
             newT = document.documentElement.clientHeight - obj.offsetHeight;
        }
        if(newT < 0){
            ispeedY *= -1;
            ispeedY *= 0.8;
            newT = 0;
        }
        if(newL >= (document.documentElement.clientWidth - obj.offsetWidth)){
            ispeedX *= -1;
            ispeedX *= 0.8;
            newL = document.documentElement.clientWidth - obj.offsetWidth;
        }
        if(newL < 0){
            ispeedX *= -1;
            ispeedX *= 0.8;
            newL = 0;
        }
        if(Math.abs(ispeedX) < 1){
            ispeedX = 0
        }
        if(Math.abs(ispeedY) < 1){
            ispeedY = 0
        }
        if(ispeedX === 0 && ispeedY === 0 && newT === (document.documentElement.clientHeight - obj.offsetHeight) ){//当停下来时, 清除定时器
            console.log('over');
            clearInterval(obj.timer);
        }
        obj.style.left = newL + 'px';//实时更新当前小物体的位置
        obj.style.top = newT + 'px';
    }, 30)
}




    </script>
</body>
</html>

相关文章

  • 利用原生js做出拖拽弹射效果

    预览图 效果图帧数有点低...., 下面附上代码, 大家仔细研究, 总之它会在当前可视区内弹来弹去

  • 原生js拖拽效果

    最近新学了拖拽效果,没有好记性,只好用烂笔头记录一下了。首先讲讲拖拽的思路(只分析水平方向,垂直方向类似): 首先...

  • 原生js鼠标拖拽效果

    常用的鼠标事件有onmousedown(鼠标按下)、onmousemove(鼠标拖动)、onmouseup(鼠标弹...

  • js拖拽html元素工具类

    复制就能用的拖拽js方法 原生js实现拖拽元素方法 使用(注意拖拽目标元素需绝对定位 position: 'abs...

  • Drag Drop---API

    在h4标准中,我们定义个拖拽事件是很麻烦的,用原生的js来实现拖拽的效果。我们需要计算拖拽的元素的坐标位置和距离之...

  • 原生JS实现拖拽条效果

    HTML结构: 首先是我们的HTML结构,我们的拖拽条使用了 标签来实现, 10类型设置为range即可出现拖拽条...

  • 实现拖拽

    原生js实现 HTML5原生实现:拖拽draggable属性、DataTranfers对象

  • HTML5实现拖拽

    实现拖拽效果源元素 - 要拖拽的文件目标元素 - 要拖拽到哪里去 目前实现拖拽效果使用原生DOM就能实现 - 最麻...

  • 原生JS实现Tab切换效果和模态框效果

    原生JS实现Tab切换效果 效果展示 原生JS实现模态框效果 效果展示

  • react实现拖拽容器边框改变容器宽度

    大概是想要这么个效果(只能拖拽中间的线条 拖动其他无效): 怎么实现这个效果呢?原生js中已经提供了相应的api:...

网友评论

      本文标题:利用原生js做出拖拽弹射效果

      本文链接:https://www.haomeiwen.com/subject/obfumxtx.html