小球拖拽效果实现

拖拽效果

刚学了一个拖拽效果,其实里面涉及的东西思想,很多,仔细琢磨下来对自身提高有一定的帮助

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #box{
            width: 100px;
            height: 100px;
            background-color: red;
            border-radius: 50%;
            position: fixed;
            left: 0;
            top: 0;
        }       
    </style>
</head>

<body>
    <div id="box"></div>
    <script>
        var oBox = document.getElementById('box');
        oBox.onmousedown = function(e){ 
            //鼠标按下,触发事件,获取鼠标到box边缘的距离
            var mouseToBox = {
                //声明一个对象,装着鼠标距离box边缘的距离
                x:e.offsetX,
                y:e.offsetY
            }
            //console.log(e); 
            document.onmousemove = function(e){
                var  oBoxLocation = {
                    left:e.clientX - mouseToBox.x,
                    top:e.clientY - mouseToBox.y
                    //鼠标移动的时候设置一个left和top,用一个对象装着
                    //分别是鼠标距离文档的left和top,用鼠标距离文档(屏幕)的距离减去鼠标距离box边缘的距离
                    //其实这个left和top是指box左上角的坐标
                }
                if(oBoxLocation.left <= 0){//控制box不能小于屏幕飞出去
                    oBoxLocation.left = 0;
                }else if(oBoxLocation.left >= document.documentElement.clientWidth - oBox.offsetWidth ){
                    /*用else if 而不是else.因为只要限制box在边缘区域,而不是对他进行
                    单纯大小于0的比较,所以用elseif,下面控制top也是一样的
                    obox.offsetWidth就是元素的宽度,也就是100px
                    document.documentelement.clientWidth指的是文档的宽度(屏幕拉的大小)  
                    console.log(document.documentElement.clientWidth,oBox.offsetWidth);*/
                    oBoxLocation.left = document.documentElement.clientWidth - oBox.offsetWidth
                    //让他最大不能超过文档(屏幕)减去box这个元素的宽度 
                }
                   
                if(oBoxLocation.top <= 0){
                    oBoxLocation.top = 0;
                }else if(oBoxLocation.top >= document.documentElement.clientHeight - oBox.offsetHeight){
                    oBoxLocation.top = document.documentElement.clientHeight - oBox.offsetHeight;
                }   
                
                //算出来之后就要把值赋给box的left和top
                oBox.style.left = oBoxLocation.left + "px";
                oBox.style.top = oBoxLocation.top + "px";
            }
            //控制完小方块移动,发现一个问题,
            //移动完不能暂停,接下来要设置一个让他随时暂停随时启动暂停
            document.onmouseup = function(){
                document.onmousemove = null;
                document.onmouseup = null;
            }
        }
        /* oBox.onmouseup = function(){
            document.onmousemove = null;
             oBox.style.left = 0 + "px";
            oBox.style.top = 0 + "px" 
        } */
    </script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 JavaScript 和 CSS 实现小球跟随鼠标的效果。具体实现步骤如下: 1. 在 HTML 中添加一个小球元素: ```html <div id="ball"></div> ``` 2. 在 CSS 中设置小球的样式,包括大小、颜色、圆角等: ```css #ball { position: absolute; width: 20px; height: 20px; background-color: red; border-radius: 50%; z-index: 9999; } ``` 3. 在 JavaScript 中添加事件监听器,监听鼠标移动事件,并获取鼠标的坐标: ```javascript var ball = document.getElementById('ball'); document.addEventListener('mousemove', function(event) { var x = event.clientX; var y = event.clientY; }); ``` 4. 计算小球应该距离页面左边和顶部的距离,并将其设置为小球的样式: ```javascript var ball = document.getElementById('ball'); document.addEventListener('mousemove', function(event) { var x = event.clientX; var y = event.clientY; var ballX = x - ball.offsetWidth / 2; var ballY = y - ball.offsetHeight / 2; ball.style.left = ballX + 'px'; ball.style.top = ballY + 'px'; }); ``` 完整的代码如下: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>小球跟随鼠标</title> <style> #ball { position: absolute; width: 20px; height: 20px; background-color: red; border-radius: 50%; z-index: 9999; } </style> </head> <body> <div id="ball"></div> <script> var ball = document.getElementById('ball'); document.addEventListener('mousemove', function(event) { var x = event.clientX; var y = event.clientY; var ballX = x - ball.offsetWidth / 2; var ballY = y - ball.offsetHeight / 2; ball.style.left = ballX + 'px'; ball.style.top = ballY + 'px'; }); </script> </body> </html> ``` 这样,就实现小球跟随鼠标的效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值