js实现可调节左右栏

js实现可调节左右栏

我们通常看到的左右栏调节是怎么实现的呢?

js实现可调节左右栏_第1张图片

先来一张简单的最终效果图~

大体思路:通过mousedown事件触发mousemove事件并计算左边宽度,当mouseup事件触发时移除掉对mousedown与mousemove事件的监听。

来实时操作一下~

构建页面

首先将页面画出来

html部分


<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js调节宽度title>
    <link rel="stylesheet" href="style.css">
head>
<body>
    <div class="container">
        <div class="left">div>
        <div class="line">
            <i>i>
            <i>i>
        div>
        <div class="right">div>
    div>
    <script src="a.js">script>
body>
html>

css部分

body{
    margin: 0;
    padding: 0;
    user-select: none;
    -webkit-user-select: none;
}
.container{
    display: flex;
    height: 100vh;    

}

.left{
    height: 100%;
    width: 400px;
    background-color: aqua;
}
.line{
    height: 100%;
    width: 20px;
    background: #eaeaea;
    box-shadow:  10px 10px 5px black;
    display: flex;
    justify-content: space-around;
    align-items: center;
    cursor: col-resize;
}
i{
    display: block;
    height: 20px;
    background: rgb(182, 181, 181);
    width: 1px;
}
.right{
    height: 100%;
    width: 300px;
    display: flex;
    flex: 1;
    background-color: blueviolet;
}

js实现

mousedown事件监听

通过对中间可调节部分实现mousedown监听。大概的框框是这样的

var startX,leftWidth;
document.querySelector('.line').addEventListener('mousedown',(e) => {
   document.documentElement.addEventListener('mousemove',onDrag);
   document.documentElement.addEventListener('mouseup',stopDrag);
});
function onDrag(e) {

}
function stopDrag(e) {

}

我们先将基本确定的填入~

var startX,leftWidth;
document.querySelector('.line').addEventListener('mousedown',(e) => {
   startX = e.clientX; // 记录开始时x坐标
   // 获取左半部分的宽度,使用getComputedStyle返回的是带有px的字符串,我们将其转为整数用于下面计算
   leftWidth = parseInt(window.getComputedStyle(document.querySelector('.left')).width,10);
   document.documentElement.addEventListener('mousemove',onDrag);
   document.documentElement.addEventListener('mouseup',stopDrag);
})
function onDrag(e) {
  // 实时计算左边宽度 = 刚开始左边的宽度 + 移动的X坐标(e.clientX - startX) 
  let newWidth = leftWidth + e.clientX - startX;
  document.querySelector('.left').style.width = newWidth + 'px';
}
function stopDrag(e) {
   document.documentElement.removeEventListener('mousemove',onDrag);
   document.documentElement.removeEventListener('mouseup',stopDrag);
}

看一下效果喽~

实现了左右拖拽的效果啦~

你可能感兴趣的:(js,js,javascript)