首页 > 编程语言 >原生javascript实现拖拽

原生javascript实现拖拽

时间:2023-09-05 14:44:51浏览次数:43  
标签:原生 const color javascript list id container div 拖拽

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

<head>
  <meta charset="UTF-8">
  <meta
    http-equiv="X-UA-Compatible"
    content="IE=edge"
  >
  <meta
    name="viewport"
    content="width=device-width, initial-scale=1.0"
  >
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    .container {
      width: 100%;
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      gap: 10px;
    }

    .container .item {
      height: 100px;
    }
  </style>
</head>

<body>
  <div class="container">
  </div>

  <script>
    // 生成随机颜色    
    const color = () => {
      const rd = () => parseInt(Math.random() * 256)
      return `rgb(${rd()},${rd()},${rd()})`
    }

    // 获取对象
    // 互换对象
    let fromId = ''
    let toId = ''

    const list = Array.from({ length: 7 }, (_, i) => {
      return {
        id: i + 1,
        content: `${i}${i}${i}${i}`,
        color: color()
      }
    })

    const container = document.querySelector('.container')
    function render() {
      container.innerHTML = ''
      list.map(i => {
        const div = document.createElement('div')
        div.setAttribute('draggable', true)
        div.setAttribute('data-id', i.id)
        div.setAttribute('class', 'item')
        div.setAttribute('style', `background-color: ${i.color}`)
        div.innerText = i.content
        container.appendChild(div)
      })
      bindEvent()
    }
    render()




    function bindEvent() {
      const items = document.querySelectorAll('.item')
      items.forEach(i => {

        i.addEventListener('dragenter', (ev) => {
          toId = ev.target.getAttribute('data-id') / 1
        })



        i.addEventListener('dragend', (ev) => {
          fromId = ev.target.getAttribute('data-id') / 1

          const fromIndex = list.findIndex(i => i.id === fromId)
          const fromObj = { ...list[fromIndex] }

          const toIndex = list.findIndex(i => i.id === toId)
          const toObj = { ...list[toIndex] }

          list[fromIndex] = { ...toObj }
          list[toIndex] = { ...fromObj }
          render()
        })

      })
    }
  </script>
</body>

</html>

拖动一次可以让两个元素互换位置

比如拖动让 4444 和 6666 换了个位置

 

标签:原生,const,color,javascript,list,id,container,div,拖拽
From: https://www.cnblogs.com/fmg0224/p/17679483.html

相关文章

  • 无涯教程-JavaScript - DATE函数
    描述DATE函数返回特定日期的序列号。语法DATE(year,month,day)争论Argument描述Required/Optionalyearyear参数的值可以包含1-4位数字。Excel会根据计算机使用的日期系统解释年份参数。默认情况下,MicrosoftExcelforWindows使用1900日期系统。请参阅下面的......
  • 直播平台制作,WebDriver API 拖拽页面元素
    直播平台制作,WebDriverAPI拖拽页面元素 importorg.testng.annotations.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.int......
  • js 原生方法请求接口
    XNLHttpRequest(xhr)介绍:XMLHttpRequest(简称xhr)是浏览器提供的JavaScript对象,通过它,可以请求服务器上的数据资源。在jQuery中封装的AJAX函数,就是基于xhr,然后封装出jq中的ajax,然后就可以调用出get、post、ajax()三个方法在原生中实际上真正用到的,是XMLHttpRequest这个对象//g......
  • 无涯教程-JavaScript - DVARP函数
    描述DVARP函数通过使用列表或数据库中符合您指定条件的记录的字段(列)中的数字,基于整个总体计算总体的方差。语法DVARP(database,field,criteria)争论Argument描述Required/Optionaldatabase组成列表或数据库的单元格范围。数据库是相关数据的列表,其中相关信息......
  • 无涯教程-JavaScript - DVAR函数
    描述DVAR函数使用与指定条件相匹配的列表或数据库的列中的数字,根据样本估算总体的方差。语法DVAR(database,field,criteria)争论Argument描述Required/Optionaldatabase组成列表或数据库的单元格范围。数据库是相关数据的列表,其中相关信息的行是记录,数据的列......
  • 软件测试|快速、可靠的JavaScript依赖管理工具——yarn
    简介Yarn是一个由Facebook于2016年推出的JavaScript软件包管理器。它的目标是解决npm(Node.js的默认软件包管理器)在性能和可靠性方面的一些问题。Yarn旨在提供更快、更安全、更稳定的依赖项安装过程,使JavaScript开发人员能够更轻松地管理和构建项目。本文将详细介绍Yarn的特点、优势......
  • JavaScript-属性描述对象
    概述JavaScript提供了一个内部数据结构,用来描述对象的属性,控制它的行为,比如该属性是否可写、可遍历等等。这个内部数据结构称为“属性描述对象”(attributesobject)。每个属性都有自己对应的属性描述对象,保存该属性的一些元信息。下面是属性描述对象的一个例子。{value:123,......
  • javascript中的iframe
    上级向iframe传值1.用postMessage在上级用:iframeElement.contentWindow.postMessage("发送的消息内容","*");在iframe内接收消息:window.addEventListener("message",function(ev){let收到的消息=ev.data;.....}); ......
  • 无涯教程-JavaScript - DMAX函数
    描述DMAX函数返回列表或数据库中符合您指定条件的列中的最大数字。语法DMAX(database,field,criteria)争论Argument描述Required/Optionaldatabase组成列表或数据库的单元格范围。数据库是相关数据的列表,其中相关信息的行是记录,数据的列是字段。列表的第一行包......
  • 无涯教程-JavaScript - DCOUNTA函数
    描述DCOUNTA函数返回列表或数据库中符合您指定条件的列中非空白单元格的计数。此函数与DCOUNT函数相似,不同之处在于DCOUNTA函数对所有非空白单元进行计数。DCOUNT函数仅计算包含数值的单元格。语法DCOUNTA(database,field,criteria)争论Argument描述Required/Opti......