javascript - 鼠标移动事件上不需要的轻弹效果

标签 javascript html css

我有一个框架(父)和其中的一个矩形(子),我想根据鼠标位置在 x 轴上移动这个矩形......每当我尝试移动这个矩形时,我都会看到轻弹效果......有人可以指导我如何解决这个问题吗?

 let frame = document.querySelector('.frame') ;
        let slider = document.querySelector('.frame .slider') ; 
        let mouseX = undefined ;
        frame.addEventListener('mousemove',function(e){
            mouseX = e.offsetX ;
            slider.style.left = mouseX + 'px' ;
        }) ;
 html,body{
            height: 100%;
        }
        body{
            padding: 0 ;
            margin: 0 ;
        }
        .frame{
            width: 75vw ;
            height: 75vh;
            border: 4px solid rgb(220,220,220) ;
            position: relative ;
            top: 50% ;
            left: 50%;
            transform: translate(-50%,-50%) ;
        }
        .frame .slider {
            position: absolute ;
            width: 1% ;
            height: 100%;
            left: 100% ;
            background-color: rgb(30,30,30) ;
            cursor: pointer;
        }
 
    <div class="frame">
        <div class="slider"></div>
    </div>

最佳答案

您需要使用 mouseX = e.clientX ; 而不是 mouseX = e.offsetX ; 因为当您的鼠标移动到 slider 上时 offsetX 将重置并且轻弹将在那里再一次希望这会有所帮助:)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        html,body{
            height: 100%;
        }
        body{
            padding: 0 ;
            margin: 0 ;
        }
        .frame{
            width: 75vw ;
            height: 75vh;
            border: 4px solid rgb(220,220,220) ;
            position: relative ;
            top: 50% ;
            left: 50%;
            transform: translate(-50%,-50%) ;
        }
        .frame .slider {
            position: absolute ;
            width: 1% ;
            height: 100%;
            left: 100% ;
            background-color: rgb(30,30,30) ;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div class="frame">
        <div class="slider"></div>
    </div>
    <script>
        let frame = document.querySelector('.frame') ;
        let slider = document.querySelector('.frame .slider') ; 
        let mouseX = undefined ;
        frame.addEventListener('mousemove',function(e){ 
            mouseX = e.clientX ;
            slider.style.left = mouseX - frame.getBoundingClientRect().left + 'px';
            
        }) ;

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

关于javascript - 鼠标移动事件上不需要的轻弹效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53063695/

相关文章:

javascript - appendChild while inside for loop 不能正常工作

javascript - 对 d3.js 版本 3 的选择感到困惑

javascript - 网络音频 : Oscillating AudioBufferSource playbackRate

html - 为什么在 django 中使用 xhtml2pdf 呈现为 pdf 时,html 表中的某些列会崩溃?

java - 使用ajax将参数传递给Controller

html - 带有侧边栏的粘性页脚

javascript - 无法将 request.responseText 打印到页面

javascript - 在html页面中动态添加form元素和table元素

html - 我怎样才能把一个标签放在一个盒子的中间

html - 水平列表中的空 <li> 会破坏垂直间距