首页 > 其他分享 >拖曳排序

拖曳排序

时间:2024-01-13 12:01:05浏览次数:22  
标签:const sourceNode list 拖曳 moving 排序 children target

<!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>
        .list-item {
            display: flex;
            align-items: center;
            justify-content: center;
            background: #f50;
            height: 30px;
            width: 300px;
            color: #fff;
            cursor: move;
            user-select: none;
            border-radius: 5px;
            margin-bottom: 10px;
        }

        .list-item.moving {
            background: transparent;
            color: transparent;
            border: 1px dashed #ccc;
        }
    </style>
</head>
<!-- 使用filp 动画 -->
<body>
    <div class="list">
        <div class="list-item" draggable="true">1</div>
        <div class="list-item" draggable="true">2</div>
        <div class="list-item" draggable="true">3</div>
        <div class="list-item" draggable="true">4</div>
        <div class="list-item" draggable="true">5</div>
    </div>
    <script>
        const list = document.querySelector('.list')
        let sourceNode //当前正在拖动的是哪个元素
        // let filp;
        list.ondragstart = (e) => {
            setTimeout(() => {
                //延迟添加样式
                e.target.classList.add('moving')
            }, 0)

            sourceNode = e.target
            e.dataTransfer.effectAllowed='move'//修改鼠标
            console.log( e.dataTransfer.effectAllover);
            // file=new Filp(list.children,0.3)
        }
        list.ondragover = (e) => {
            e.preventDefault();
        }
        //使用父做事件代理
        list.ondragenter = (e) => {
            e.preventDefault();
            if (e.target === list || e.target === sourceNode) {
                return
            }
            const children = Array.from(list.children);
            const sourceIndex = children.indexOf(sourceNode);
            const targetIndex = children.indexOf(e.target);
            //往上拖
            if (sourceIndex < targetIndex) {
                //往下拖
                list.insertBefore(sourceNode, e.target.nextElementSibling);
            } else {
                //往上拖
                list.insertBefore(sourceNode, e.target);
            }
            // filp.play()
        }
        //移除moving
        list.ondragend=(e)=>{
            e.target.classList.remove('moving');
        }
        //默认情况下 元素不允许别的元素拖到自身之上的 拖动行为会取消
    </script>
</body>

</html>

标签:const,sourceNode,list,拖曳,moving,排序,children,target
From: https://www.cnblogs.com/7c89/p/17962199

相关文章

  • python 2数组同时排序
    Python2数组同时排序在Python中,排序是一种常见的操作。当我们想要对多个数组进行排序时,可以使用zip()函数和sorted()函数来实现。本文将详细介绍如何使用这两个函数对数组进行排序,并提供相应的代码示例。首先,我们需要了解zip()函数的作用。zip()函数可以将多个数组中的元素一一......
  • 【GUI软件】抖音搜索结果批量采集,支持多个关键词、排序方式、发布时间筛选等!
    目录一、背景介绍1.1爬取目标1.2演示视频1.3软件说明二、代码讲解2.1爬虫采集模块2.2软件界面模块2.3日志模块三、获取源码及软件一、背景介绍1.1爬取目标您好!我是@马哥python说,一名10年程序猿。我用python开发了一个爬虫采集软件,可自动按关键词抓取抖音视频数据。为......
  • 排序算法,冒泡,选择,插入
    比较慢:冒泡排序:列表每两个相邻的数,如果前⾯⽐后⾯⼤,则交换这两个数。⼀趟排序完成后,则⽆序区减少⼀个数,有序区增加⼀个数。代码关键点:趟、⽆序区范围#include"stdio.h"intmain(){intarr[]={8,32,22,73,95,13,9,82,23,46,71,52,90,53,77,75,65,64,......
  • 冒泡排序初探
        冒泡排序是一种基于比较和交换操作的排序算法。每轮冒泡的过程都是从第一个元素开始,将该元素和相邻下一个元素进行比较和交换,使得较大的元素向右移动(如果该元素大于下一个元素,则两个元素交换;如果该元素小于等于下一个元素,则保持不变)。这样一来,每轮冒泡的过程都可以确定......
  • 时间复杂度(常数循环、strchr、冒泡排序、二分查找)
    1.1常数循环//计算复杂度voidFunc4(intk){intcount=0;for(intk=0;k<100;++k){++count;}printf("%d\n",count);}时间复杂度为:O(1)  注:O(1)不是代表算法只能运行一次,是常数次1.2strchr的时间复杂度//计算strchar的时间复杂度constchar*strchr(constc......
  • 排序算法之线性时间的排序和计数排序初识
    一:概述前面已经介绍了快速排序和堆排序。它们的时间复杂度都是O(nlogn)。在这篇博文中,要说明的是计数排序的初识和线性时间排序的介绍。二:具体说明<1>线性时间排序例如冒泡排序。如下图所示,因为8>3,所以8和3位置互换。例如堆排序。如下图所示,因为10>7,所以10和7位置交换。注意:有些特......
  • 经典算法题之排序C
    写个快排就完事了。实在不行,写个选择排序也很简单。#include<stdio.h>intdevide(intA[],inthead,inttail){if(head==tail)returnhead;intt=A[head];while(head<tail){while(tail>head&&A[tail]>t)tail--;if(head!=ta......
  • 排序算法之堆排序
    一:概述堆排序是在二叉堆的基础上实现的,如果想要学习堆排序,就得掌握二叉堆。二叉堆的特性是:最大堆的堆顶是整个堆中最大的元素。最小堆的堆顶是整个堆中最小的元素。二:具体说明<1>以最大堆为例讲述如果要删除一个最大堆的堆顶(并不是完全删除,而是跟末尾的节点交换位置),经过自我......
  • 快速排序
    快速排序双指针分治voidquick_sort(intq[],intl,intr){//递归的终止情况if(l>=r)return;//第一步:分成子问题inti=l-1,j=r+1,x=q[l+r>>1];while(i<j){doi++;while(q[i]<x);doj--;while(q[......
  • 排序算法
    冒泡排序思想:1、一个无序的数组,n个元素,一共需要排序n-1轮2、在每一轮中,从数组第0位开始,比较相邻两个元素,如果与需求逆序,就交换这两个元素,在每一轮中,可以将当前最大(最小)的元素交换到最后,3、直到执行完n-1轮,没有需要比较的元素为止。代码实现:publicstaticvoidbubSort(in......