博客列表 >js的运动与拖拽特效

js的运动与拖拽特效

李明伟的博客
李明伟的博客原创
2019年01月21日 13:29:15558浏览

js的运动与拖拽

1.小球的运动原理

    第一步——设置DOM结构

<button>动起来</button>
<div>
</div>

    第二步——设置样式

div {
width: 50px;
height: 50px;
background: lightblue;
padding: 10px;
border: 2px solid red;
margin: 20px;
border-radius: 50%;
position: absolute;
top: 50px;
left: 10px;
}

    第三步——获取结点

var btn = document.querySelector('button');
var ball = document.querySelector('div');

    第四步——设置点击事件

btn.onclick = function () {

    第五步——在点击事件中设置一个定时器,在定时器中改变div的属性从而实现其运动(定时器函数 setInterval()用于间歇行某一函数

timer = setInterval(function () {
ball.style.left = ball.offsetLeft + 5 + 'px';
},1000);

    第六步——添加条件判断,并在不满足条件的情况下清除定时器

clearInterval(timer);
timer = setInterval(function () {
if (ball.offsetLeft < 1000) {
ball.style.left = ball.offsetLeft + 5 + 'px';
} else {
clearInterval(timer);
}
}, 100);
}

    全部代码:

实例

<!DOCTYPE html>
<style>
    div {
        width: 50px;
        height: 50px;
        background: lightblue;
        padding: 10px;
        border: 2px solid red;
        margin: 20px;
        border-radius: 50%;
        position: absolute;
        top: 50px;
        left: 10px;
    }
</style>
<html>

<head>
    <meta charset="utf-8" />
    <title>js中的元素运动原理</title>
</head>

<body>
    <button>动起来</button>
    <div>
    </div>
    <script>
        var btn = document.querySelector('button');
        var ball = document.querySelector('div');
        //offsetWidth(盒子的可视宽度)offsetWidth = width + padding +border
        //当前盒子的可视宽度: 50 + 10*2 + 2*2 = 74 (数值不是字符串)
        //offsetLeft(盒子相对定位父级的左边定位相对位置):left + margin-left

        // 经过分析,只需要改变offsetLeft就可以使这个小球向右动起来
        // 小球的margin-left不会改变,只要不断的改变left就可以
        // 需要使用到定时器函数 setInterval()用于间歇执行某一函数
        var timer = null;
        btn.onclick = function () {
            
            // console.log(timer);
            clearInterval(timer);
        timer = setInterval(function () {
            //clearInterval(timer);
            if (ball.offsetLeft < 1000) {
                ball.style.left = ball.offsetLeft + 5 + 'px';
            } else {
                clearInterval(timer);
            }
        }, 100);
        }
    </script>
</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


2.小球的拖拽原理

  第一步——设置DOM结构

<div id="ball"></div>

  第二步——添加样式

#ball {
width: 50px;
height: 50px;
background-color: lightpink;
border-radius: 50%;
box-shadow: 2px 2px 1px #888;
position: absolute;
}

  第三步——获取所有节点

var ball = document.getElementById('ball');

  第四步——为小球设置鼠标按下事件,通过按下事件得出现在鼠标与小球的相对位置

ball.onmousedown = function (event) {
var x = event.clientX - this.offsetLeft;
var y = event.clientY - this.offsetTop;

  第五步——在按下事件中为整个HTML文档(document对象)设置鼠标移动事件,并得出鼠标的坐标,将giant坐标减去相对位置的x,y值,得到此时小球应该在的坐标。

document.onmousemove = function (event) {
ball.style.left = event.clientX - x + 'px';
//console.log(ball.style.left); 
ball.style.top = event.clientY - y + 'px';
}

   第六步——再按下事件中设置鼠标放开事件,在其中清空移动事件的值,让小球在鼠标放开后不再跟随鼠标

document.onmouseup = function(){
document.onmousemove = null;
}
}

全部代码:

实例

<!DOCTYPE html>
<html>
<style>
    #ball {
        width: 50px;
        height: 50px;
        background-color: lightpink;
        border-radius: 50%;
        box-shadow: 2px 2px 1px #888;
        position: absolute;
    }
</style>

<head>
    <meta charset="utf-8" />
    <title>Page Title</title>
</head>

<body>
    <div id="ball"></div>
</body>
<script>
    var ball = document.getElementById('ball');
    ball.onmousedown = function (event) {
        var x = event.clientX - this.offsetLeft;
       var y = event.clientY - this.offsetTop;
        //console.log(x, y);
        document.onmousemove = function (event) {
            ball.style.left = event.clientX - x + 'px';
            //console.log(ball.style.left); 
            ball.style.top = event.clientY - y + 'px';
        }
        document.onmouseup = function(){
            document.onmousemove = null;
        }
    }
</script>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议