css 实现移动多输入框

要使用 CSS 实现可移动的多个输入框,你可以结合 HTML、CSS 和 JavaScript 实现一个简单的拖拽功能。以下是一个示例,展示了如何使用这些技术实现这一功能:

HTML

首先,创建多个输入框,并包裹在一个容器内:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Draggable Inputs</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="container">
        <div class="draggable" draggable="true"><input type="text" value="Input 1"></div>
        <div class="draggable" draggable="true"><input type="text" value="Input 2"></div>
        <div class="draggable" draggable="true"><input type="text" value="Input 3"></div>
    </div>
    <script src="script.js"></script>
</body>
</html>

CSS

接下来,定义输入框的样式和布局:

body {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    margin: 0;
    background-color: #f0f0f0;
}

.container {
    display: flex;
    gap: 10px;
}

.draggable {
    padding: 10px;
    background-color: #fff;
    border: 1px solid #ccc;
    box-shadow: 0 2px 5px rgba(0,0,0,0.1);
    cursor: move;
}

input {
    border: none;
    outline: none;
    font-size: 16px;
}

JavaScript

最后,添加 JavaScript 实现拖拽功能:

const draggables = document.querySelectorAll('.draggable');
const container = document.querySelector('.container');

draggables.forEach(draggable => {
    draggable.addEventListener('dragstart', () => {
        draggable.classList.add('dragging');
    });

    draggable.addEventListener('dragend', () => {
        draggable.classList.remove('dragging');
    });
});

container.addEventListener('dragover', e => {
    e.preventDefault();
    const afterElement = getDragAfterElement(container, e.clientX);
    const draggable = document.querySelector('.dragging');
    if (afterElement == null) {
        container.appendChild(draggable);
    } else {
        container.insertBefore(draggable, afterElement);
    }
});

function getDragAfterElement(container, x) {
    const draggableElements = [...container.querySelectorAll('.draggable:not(.dragging)')];

    return draggableElements.reduce((closest, child) => {
        const box = child.getBoundingClientRect();
        const offset = x - box.left - box.width / 2;
        if (offset < 0 && offset > closest.offset) {
            return { offset: offset, element: child };
        } else {
            return closest;
        }
    }, { offset: Number.NEGATIVE_INFINITY }).element;
}

解释

  1. HTML: 包含了三个可拖动的输入框,每个输入框都包裹在一个 div 元素内,并具有 draggable 属性。

  2. CSS: 定义了基本样式,包括容器布局、输入框样式以及拖动时的样式。

  3. JavaScript:

    • dragstartdragend 事件用于添加和移除 dragging 类。
    • dragover 事件用于在拖动过程中动态调整输入框的位置。
    • getDragAfterElement 函数根据鼠标位置计算拖动过程中输入框应该插入的位置。

通过这种方式,你可以实现多个输入框的拖动和重新排列功能。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值