js实现拖动盒子查看内容 内容拖动

 

一.分析实现过程

1.鼠标拖动的操作是,按下鼠标不松,拖动鼠标,就需要监听鼠标点击事件(onmousedown),鼠标拖动事件(onmousemove)

2.鼠标拖动事件的监听时机,是在按下鼠标之后监听的,所以鼠标拖动事件需要放在鼠标按下事件(onmousedown)中

3.获取鼠标点击的位置A在外层盒子中可视区域x轴位置(clientX)及x轴滚动条位置B(scrollLeft)

4.在外层盒子中鼠标点击盒子的位置拖动的时候获取可视区域x轴位置C减去一开始点击的位置A,之后用位置B减去,C减A的值,这就是最终盒子需要跟随鼠标所拖动的位置

5.鼠标抬起释放事件

 

二.实现代码        

 <style>
    .outBox{
        width:300px;
        height:200px;
        background: blanchedalmond; 
        overflow: hidden;
        margin:20px auto;
    }
    .innerBox{
        width: 600px;
        height: 200px;
        cursor: grab;
    }
</style>
<body>
    <div class="outBox">
        <div class="innerBox">
            <span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis nam id neque cupiditate a, nihil corporis aut officiis nesciunt, incidunt consequuntur acc
                usamus, iusto architecto nemo? Aspernatur omnis soluta molestiae excepturi!</span>
            <span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis nam id neque cupiditate a, nihil corporis aut officiis nesciunt, incidunt consequuntur acc
                usamus, iusto architecto nemo? Aspernatur omnis soluta molestiae excepturi!</span>
            <span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis nam id neque cupiditate a, nihil corporis aut officiis nesciunt, incidunt consequuntur acc
                usamus, iusto architecto nemo? Aspernatur omnis soluta molestiae excepturi!</span>
            <span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis nam id neque cupiditate a, nihil corporis aut officiis nesciunt, incidunt consequuntur acc
                usamus, iusto architecto nemo? Aspernatur omnis soluta molestiae excepturi!</span>
            <span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis nam id neque cupiditate a, nihil corporis aut officiis nesciunt, incidunt consequuntur acc
                usamus, iusto architecto nemo? Aspernatur omnis soluta molestiae excepturi!</span>
        </div>
    </div>
    <script>
       let wrapperBox= document.querySelector('.outBox')
       let innerBox=document.querySelector('.innerBox')
        wrapperBox.onmousedown=function(e){
            let startX=e.clientX;
            let originalScrollX=wrapperBox.scrollLeft;
            document.onmousemove=function(e){
                let subs=e.clientX-startX; 
                
                wrapperBox.scrollLeft= originalScrollX-subs;
            }
            //鼠标抬起释放事件
            document.onmouseup=function(){
                document.onmousemove=document.onmouseup=null; 
            }
        }
    </script>
</body>

相关推荐

  1. 实现el-dialog可拖动

    2024-01-08 16:38:01       53 阅读
  2. RecycleView结合ItemTouchHelper实现拖动排序

    2024-01-08 16:38:01       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-08 16:38:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-08 16:38:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-08 16:38:01       87 阅读
  4. Python语言-面向对象

    2024-01-08 16:38:01       96 阅读

热门阅读

  1. 【FFMPEG应用篇】基于FFmpeg的转码应用(FLV MP4)

    2024-01-08 16:38:01       53 阅读
  2. K8s 中Pod无法启动5个常见问题总结

    2024-01-08 16:38:01       53 阅读
  3. 机器学习 -- k近邻算法

    2024-01-08 16:38:01       50 阅读
  4. 【多模态】ALBEF

    2024-01-08 16:38:01       67 阅读
  5. 讲解机器学习中的 K-均值聚类算法及其优缺点。

    2024-01-08 16:38:01       52 阅读
  6. MySQL 8.0中新增的功能(五)

    2024-01-08 16:38:01       55 阅读