日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

利用JavaScript純?cè)a實(shí)現(xiàn)DIV等各類控件的拖拽效果

admin
2025年1月2日 9:22 本文熱度 2287

效果演示


 

實(shí)現(xiàn)以上效果需要先了解JavaScript的關(guān)于拖拽的api。

HTML5 提供了原生的拖放功能,允許用戶在網(wǎng)頁上通過鼠標(biāo)或其他指針設(shè)備拖動(dòng)和放置元素。這組 API 可以應(yīng)用于各種 HTML 元素。

dragstart事件:

當(dāng)用戶開始拖動(dòng)一個(gè)元素時(shí)觸發(fā)。這個(gè)事件通常用于設(shè)置被拖動(dòng)元素的數(shù)據(jù)。

<div id="dragElement" draggable="true">這是一個(gè)可拖動(dòng)的元素</div>
<script>
  const dragElement = document.getElementById('dragElement');
  dragElement.addEventListener('dragstart', (e) => {
    e.dataTransfer.setData('text/plain''這是被拖動(dòng)元素?cái)y帶的數(shù)據(jù)');
  });
</script>

drag事件:在元素被拖動(dòng)的過程中持續(xù)觸發(fā)。可以用于實(shí)時(shí)更新一些視覺效果等,不過在實(shí)際應(yīng)用中使用相對(duì)較少。

dragend:當(dāng)拖動(dòng)操作結(jié)束時(shí)觸發(fā),不管是成功放置還是中途取消。例如,可以在這個(gè)事件中清理一些在拖動(dòng)過程中設(shè)置的臨時(shí)狀態(tài)。

dragenter:當(dāng)被拖動(dòng)的元素進(jìn)入一個(gè)有效的放置目標(biāo)時(shí)觸發(fā)。

dragover:當(dāng)被拖動(dòng)的元素在放置目標(biāo)元素上方移動(dòng)時(shí)觸發(fā)。和dragenter一樣,通常需要調(diào)用e.preventDefault()來允許放置操作。 

drop:當(dāng)被拖動(dòng)的元素被放置到目標(biāo)元素上時(shí)觸發(fā)。這個(gè)事件用于處理放置后的邏輯,例如獲取被拖動(dòng)元素?cái)y帶的數(shù)據(jù)并進(jìn)行相應(yīng)的操作。

dragleave:當(dāng)被拖動(dòng)的元素離開一個(gè)放置目標(biāo)時(shí)觸發(fā)。例如,可以在這個(gè)事件中恢復(fù)放置目標(biāo)元素在被拖動(dòng)元素進(jìn)入之前的視覺狀態(tài)。

DataTransfer對(duì)象 

setData(format, data):用于設(shè)置被拖動(dòng)元素?cái)y帶的數(shù)據(jù)。format是數(shù)據(jù)的類型,如text/plain、text/html等,data是具體的數(shù)據(jù)內(nèi)容。

getData(format):用于獲取被拖動(dòng)元素?cái)y帶的數(shù)據(jù)。format是在setData中設(shè)置的數(shù)據(jù)類型,通過這個(gè)方法可以根據(jù)類型獲取相應(yīng)的數(shù)據(jù)。

clearData([format]):可以清除存儲(chǔ)的數(shù)據(jù)。如果不傳入format參數(shù),則清除所有存儲(chǔ)的數(shù)據(jù);如果傳入特定的數(shù)據(jù)類型參數(shù),則只清除該類型的數(shù)據(jù)。

關(guān)于JavaScript拖拽api介紹:
https://www.runoob.com/jsref/event-ondragstart.html

ok,了解以上內(nèi)容之后,那么就可以寫出演示效果,下面是全部的源碼:


拖拽源碼


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js拖拽</title>
    <style>
        .content {
            display: flex;
            width50%;
            margin50px auto;
        }

        .box1 {
            box-sizing: border-box;
        }

        .item {
            width150px;
            height40px;
            color#fff;
            background-colorrgb(63, 127, 255);
            margin0 0 10px 0;
            text-align: center;
            line-height40px;
            cursor: pointer;
        }

        .box2 {
            margin-left30px;
        }

        tr {
            width100%;
        }

        td {
            width150px;
            height40px;
        }
    </style>
</head>

<body>
    <div class="content">
        <div class="box1">
            <div draggable="true" class="item">數(shù)據(jù)一</div>
            <div draggable="true" class="item">數(shù)據(jù)二</div>
            <div draggable="true" class="item">數(shù)據(jù)三</div>
            <div draggable="true" class="item">數(shù)據(jù)四</div>
            <div draggable="true" class="item">數(shù)據(jù)5</div>
        </div>

        <div class="box2">
            <table border="1">
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
            </table>
        </div>
    </div>
</body>


<script>
    // 實(shí)現(xiàn)拖拽左側(cè)的div到右側(cè)的表格中
    var items = document.querySelectorAll('.item');
    var tds = document.querySelectorAll('td');
    var index = 0// 記錄當(dāng)前拖拽的元素

    // 給左側(cè)的div添加拖拽事件
    for (var i = 0; i < items.length; i++) {
        // 給每個(gè)元素添加索引
        items[i].ondragstart = function (e{
            e.dataTransfer.setData('text/plain', e.target.innerHTML);
            e.dataTransfer.setData('text/plain', e.target.innerHTML);
        }
        // 記錄當(dāng)前拖拽的元素
        items[i].ondragend = function (e{
            e.dataTransfer.setData('text/plain', e.target.innerHTML);
            e.dataTransfer.setData('text/plain', e.target.innerHTML);
        }
    }

    // 給右側(cè)的td添加拖拽事件
    for (var i = 0; i < tds.length; i++) {

        // 這一步是必須的,阻止默認(rèn)行為 否則ondrop事件不會(huì)觸發(fā)
        tds[i].ondragover = function (e{
            e.preventDefault();
            // 已經(jīng)有一個(gè)元素放置到td上了,則不執(zhí)行
            if (e.target.innerHTML) {
                return;
            }
            // 給當(dāng)前td添加一個(gè)背景色 移動(dòng)到td上時(shí)顯示
            e.target.style.backgroundColor = 'blue';
        }

        // 當(dāng)鼠標(biāo)離開td時(shí),清除背景色
        tds[i].ondragleave = function (e{
            // 已經(jīng)有一個(gè)元素放置到td上了,則不執(zhí)行
            if (e.target.innerHTML) {
                return;
            }
            e.target.style.backgroundColor = '';
        }

        // ondrop事件可以獲取到最終放置的元素
        tds[i].ondrop = function (e{
            e.preventDefault();

            // 已經(jīng)有一個(gè)元素放置到td上了,則不執(zhí)行
            if (e.target.innerHTML) {
                return;
            }

            // 獲取當(dāng)前拖拽元素的值
            var data = e.dataTransfer.getData('text/plain');
            // 設(shè)置給當(dāng)前td的值
            e.target.innerHTML = data;
            console.log(e.target.innerHTML);

            // 獲取當(dāng)前被拖拽的元素的樣式,然后添加給右側(cè)的td
            var style = window.getComputedStyle(items[index]);
            e.target.style.backgroundColor = style.backgroundColor;
            e.target.style.color = style.color;
            e.target.style.border = style.border;
            e.target.style.width = style.width;
            e.target.style.height = style.height;
            e.target.style.textAlign = style.textAlign;
        }
    }
</script>

</html>


該文章在 2025/1/2 9:22:19 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 在线观看一级亚洲欧美观看 | 亚洲国产一区在线观看视频 | 欧美日韩免费精品一区二区在线 | 日本日本乱码伦视频在线 | 国产欧美视频一区二区三区 | 亚洲欧美日韩国产色另类 | 国产高清一区二区在线免费观看 | 国产精品自产拍在线观看网站 | 国产一级做a爱免费 | 白白发布精品视频在线观看 | 国产传媒片免费观看 | 国产日韩 | 亚洲日韩欧美一区二区三区在线 | www国产精品一区二区三区 | 日韩欧美三级理论在线观看 | 拍国内精品老妇 | 性激片在线播放欧美 | 国产精品人成在线播放 | 精品黑人| 国产视频在线免费观看 | 免费国产乱理伦片在线观看 | 视频在线一区二区三区 | 海角国精产品一区一区三区糖心 | 女人18毛 | 岛国成人免费大片在 | 亚洲欧美综合区自拍另类 | 欧美大片一 | 亚洲精品自拍视频在线免费 | 国产美女视频国产视视频 | 国产宅男宅女在线观看 | 亚洲色精品一区二区三区 | 亚州一级在线播放 | 视频在线观看不卡免费 | 影音先锋亚洲综合小说在线 | 天堂资源中文在线 | 九九热在| 成人精品一区二区三区电影黑人 | 亚洲欧美日韩中文高清一 | 一级毛卡| 国产午夜福利在线播放 | 精品国产aⅴ一区二区三区四川人 |