Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >拖曳时自动反应

拖曳时自动反应
EN

Stack Overflow用户
提问于 2022-07-25 01:55:57
回答 1查看 200关注 0票数 0

我有一个嵌套的列表项,可以拖放。但是,当我到达页面底部时,我希望它自动向下滚动。例如:

从图片中可以看出,下面有更多的物品,但它只是拒绝向下滚动。

附件是我的密码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, { useState, useEffect, useRef } from "react";
import "../list3.css";

const List5 = () => {
  const [categories, setCategories] = useState([
    {
      value: "62bac6eddfe90a7c09873d92",
      title: "A",
      parent: null,
      level: 1,
      children: [
        {
          value: "62bac35ba30786989841809b",
          title: "B",
          parent: "62bac6eddfe90a7c09873d92",
          level: 2,
          children: [
            {
              value: "62bac5af6b6581786cb192e4",
              title: "C",
              parent: "62bac35ba30786989841809b",
              level: 3,
              children: [
                {
                  value: "62bac5af6b6581786cb1999g",
                  title: "F",
                  parent: "62bac5af6b6581786cb192e4",
                  level: 4,
                  children: [
                    {
                      value: "62bac5af6b6581786cc2000h",
                      title: "G",
                      parent: "62bac5af6b6581786cb1999g",
                      level: 5,
                    },
                    {
                      value: "62bac5af6b6581786cc2777j",
                      title: "I",
                      parent: "62bac5af6b6581786cb1999g",
                      level: 5,
                    },
                  ],
                },
              ],
            },
            {
              value: "62bac6696b6581786cb192e7",
              title: "D",
              parent: "62bac35ba30786989841809b",
              level: 3,
              children: [
                {
                  value: "62bac6696b6581786c2003A",
                  title: "H",
                  parent: "62bac6696b6581786cb192e7",
                  level: 4,
                },
              ],
            },
          ],
        },
        {
          value: "62bac6696b6581786cb1945P",
          title: "E",
          parent: "62bac6eddfe90a7c09873d92",
          level: 2,
        },
      ],
    },
  ]);
  const sortList = useRef(null);
  const currentItem = useRef(null);
  const targetItem = useRef(null);
  const isSwap = useRef(false); //to handle swapping of nodes only if they are siblings


  const handleDragStart = (e) => {
    currentItem.current = e.target;
    currentItem.current.classList.add("current");
    if (sortList.current) {
      const sortListElem = sortList.current;
      let items = sortListElem.getElementsByTagName("li");
      for (const item of items) {
        if (item !== currentItem.current) {
          item.classList.add("hint");
        }
      }
    }
  };

  const handleDragEnter = (e) => {
    targetItem.current = e.target;
    if (targetItem.current.tagName === "LI") {
      targetItem.current.classList.add("targetLi");
    }
    if (targetItem.current.className === "droppable") {
      targetItem.current.classList.add("activeChild");
    }
  };

  const handleDragLeave = (e) => {
    if (e.target !== targetItem.current) {
      e.target.classList.remove("activeChild");
      e.target.classList.remove("targetLi");
    }
  };

  // DRAG END - REMOVE ALL HIGHLIGHTS
  const handleDragEnd = (e) => {
    const sortListElem = sortList.current;
    let items = sortListElem.getElementsByTagName("li");
    for (const it of items) {
      it.classList.remove("hint");
      it.classList.remove("active");
    }
    currentItem.current.classList.remove("current");
    targetItem.current.classList.remove("activeChild");
    targetItem.current.classList.remove("targetLi");
  };

  const handleDragOver = (e) => {
    e.preventDefault();
  };

  const handleDrop = (e) => {
    e.preventDefault();
    if (!targetItem.current.getAttribute("nodeid")) {
      return;
    }

  };

  useEffect(() => {
    document.addEventListener("dragstart", handleDragStart);
    document.addEventListener("dragenter", handleDragEnter);
    document.addEventListener("dragleave", handleDragLeave);
    document.addEventListener("dragend", handleDragEnd);
    document.addEventListener("dragover", handleDragOver);
    document.addEventListener("dragover", handleDragOver);
    document.addEventListener("drop", handleDrop);

    return () => {
      document.removeEventListener("dragstart", handleDragStart);
      document.removeEventListener("dragenter", handleDragEnter);
      document.removeEventListener("dragleave", handleDragLeave);
      document.removeEventListener("dragend", handleDragEnd);
      document.removeEventListener("dragover", handleDragOver);
      document.addEventListener("drop", handleDrop);
    };
  }, []);

  return (
    <div className="container">
      <ul id="sortList" className="slist" ref={sortList}>
        <ListItems categories={categories}></ListItems>
      </ul>
    </div>
  );
};

function ListItems({ categories }) {
  if (!categories) {
    return <h2>Loading...</h2>;
  }
  return (
    <div className="nested-div">
      {categories &&
        categories.map((category, index) => {
          return (
            <div key={index} className="nested-item">
              <li
                nodeid={category.value}
                draggable={category.parent ? true : false}
              >
                {" "}
                {category.title}
              </li>
              <div className="droppable" nodeid={category.value}></div>
              {category.children && (
                <ListItems categories={category.children} />
              )}
            </div>
          );
        })}
    </div>
  );
}

export default List5;

我尝试的是将溢出css属性的css属性添加到主div中。吸引我的css

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* (A) LIST STYLES */
.slist {
  list-style: none;
  padding: 0;
  margin: 0;
}
.slist li {
  margin: 10px;
  padding: 15px;
  border: 1px solid #dfdfdf;
  background: #f5f5f5;
}

/* (B) DRAG-AND-DROP HINT */
.slist li.hint {
  border: 1px solid #ffc49a;
  background: #feffb4;
}
.slist li.active {
  border: 1px solid #ffa5a5;
  background: #ffe7e7;
}
.slist li.targetLi {
  background-color: red;
}
.nested-div {
  margin-top: 1em;
}

.nested-item {
  margin-left: 2em;
}

.slist li.current {
  border: 5px solid aqua;
}

.droppable {
  padding: 5px;
}

.droppable.activeChild {
  border-bottom: 1px solid red;
}

.container {
  overflow: scroll;
}

#sortList {
  overflow: visible;
}

真的很感激你所给予的帮助。

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2022-07-29 09:22:46

当对象被拖动时,尝试下面的滚动:

  • 查找正在拖动的对象的y轴值,从窗口的底部y轴获取窗口底部的y轴(您可能需要通过获取窗口的topY +窗口的高度来计算)
  • 检查该对象的y轴是否相差200 (可以更改为希望滚动开始时)从窗口的底部Y轴滚动窗口/父元素,并按选择的像素数滚动窗口/父元素。(这可能在拖动元素的useEffect中,当它的拖放元素到达设置的底部点时,如果是的话,滚动)

这是只对底部滚动,这可能是更难的部分。你必须做一些类似的事情来滚动它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73107295

复制
相关文章
.htaccess的重写规则
.htaccess是Apache服务器的一个非常强大的分布式配置文件。 正确的理解和使用.htaccess文件,可以帮助我们优化自己的服务器或者虚拟主机。
Java架构师必看
2021/03/22
1.9K0
.htaccess伪静态规则
Apache的 mod_rewrite是比较强大的,在进行网站建设时,可以通过这个模块来实现伪静态。
阿珏
2018/08/02
5.4K0
typecho伪静态.htaccess规则
如题,typecho伪静态.htaccess规则,备用。 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php/$1 [L] </IfModule> http跳转https的.htaccess规则 <IfModule mod_rewrite.c>
李维亮
2021/07/09
2.3K0
将tensor转换为图像_tensor转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
11.5K0
Apache URL重写规则
  Apached的重写功能,即是mod_rewrite模块功能,它是apache的一个模块。它的功能非常强大,可以操作URL中的所有部分。
那一叶随风
2018/08/22
3K0
Apache URL重写规则
nginx禁止用户访问.htaccess
.htaccess文件(或者”分布式配置文件”)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。
php007
2019/08/05
3.9K0
nginx禁止用户访问.htaccess
Nginx url 重写
和apache等web服务软件一样,rewrite的主要功能是实现URL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持。
星哥玩云
2022/09/15
2.6K0
Nginx url 重写
Nginx URL重写
rewite 规则作用 Rewrite规则可以实现对url的重写,以及重定向 --作用场景 URL访问跳转,支持开发设计,如页面跳转,兼容性支持,展示效果等 SEO优化 维护:后台维护、流量转发等 安全 rewrite 语法 rewrite <regex> <replacement> [flag]; 关键字 正则 替代内容 flag标记 --解释 关键字 其中关键字error_log不能改变 正则 perl兼容正
剧终
2020/12/31
1.1K0
java map 转string_java-将Map <String,Object>转换为Map <String,String>
Map map = new HashMap(); //Object is containing String
全栈程序员站长
2022/08/25
12.3K0
nginx配置url重写
url重写是指通过配置conf文件,以让网站的url中达到某种状态时则定向/跳转到某个规则,比如常见的伪静态、301重定向、浏览器定向等
landv
2020/03/03
2.5K0
nginx配置url重写
url重写是指通过配置conf文件,以让网站的url中达到某种状态时则定向/跳转到某个规则,比如常见的伪静态、301重定向、浏览器定向等
PM吃瓜
2019/08/13
1.8K0
Nginx Rewrite 重写URI
不知不觉 nginx主题的文章写了60+篇,有最早的也有最近的,有些是记录安装配置,有些是记录问题解决方法,内容质量有深也有浅参差不齐,随着技术迭代有些文章已经过时了(例如Docker时代)不再符合当前的技术需求,而有些文章虽然久远但是仍有有意义(例如Nginx HA),所以有了梳理这些文章的想法,目标有两个吧,一是回顾下过去的文章巩固下知识点,二是去其糟粕留下精华将有价值的文章搬迁(搬砖)的微信公众号。
用户1560186
2019/11/19
2.9K0
Nginx 重写 Query 参数
由于旧版项目, 依旧使用php-fpm模式提供api服务, 采用 类似 /api.php?m=account&act=login类似这种方式进行控制器分类. 目前的话 打算更换为其他框架, 使用路由来
xcsoft
2022/05/27
1.5K0
Nginx安全规则
网站配置文件添加即可 #禁止下载以 XXX 后缀的文件 location ~ \.(zip|rar|sql|bak|gz|7z)$ { return 444; } #访问链接里含有 test 直接跳转到公安网 if ($request_uri ~* test=) { return 301 https://www.mps.gov.cn; } #防止SB爬虫 if ($http_user_agent ~* (SemrushBot|python|MJ12bot|AhrefsBot|Ahrefs
残浔
2023/05/11
5390
04 . Nginx的Rewrite重写
Nginx Rewrite相关指令有重定向rewrite,if 语句,条件判断,全局变量,set,return
iginkgo18
2020/09/27
2.9K0
访问Apache服务器自动跳转到https协议
版权声明:转载注明出处 https://blog.csdn.net/weixin_42514606/article/details/89367932
叉叉敌
2019/05/05
7020
nginx负载均衡(5种方式)、rewrite重写规则及多server反代配置梳理
Nginx除了可以用作web服务器外,他还可以用来做高性能的反向代理服务器,它能提供稳定高效的负载均衡解决方案。nginx可以用轮询、IP哈希、URL哈希等方式调度后端服务器,同时也能提供健康检查功能。目前有众多公司均已经部署使用nginx实现基于七层的负载均衡功能。 1)Nginx负载均衡 为了实现Nginx的反向代理以及负载均衡功能,应用中需要用到两个模块,HttpProxyModule和HttpUpstreamModule模块;其中HttpProxyModule模块的作用是将用户的数据请求转发到其他服
洗尽了浮华
2018/01/23
7.9K0
nginx负载均衡(5种方式)、rewrite重写规则及多server反代配置梳理
伪静态规则写法RewriteRule-htaccess详细语法使用
伪静态实际上是利用PHP把当前地址解析成另一种方法来访问网站,要学伪静态规则的写法,要懂一点正则
全栈程序员站长
2022/09/07
6170
Nginx rewrite正则匹配重写
Nginx的rewrite功能支持正则匹配重写,即将URL地址临时或永久重新指向某个新的位置,类似于重定向。这个特性有利用当网站结构做出重大调整,如之前的网站mp3资源使用URL为www.site1.org/mp3进行访问,而现在服务器上mp3目录已经被使用music目录替换,那rewrite这个功能则能够轻松实现。其次如可以将site1.org强制调整到www.site1.org,反之亦可。这个指令位于ngx_http_rewrite_module模块。本文主要描述这个指令的用法并给出演示。
Leshami
2018/08/06
2.3K0
nginx location匹配规则
~      #波浪线表示执行一个正则匹配,区分大小写 ~*    #表示执行一个正则匹配,不区分大小写 ^~    #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录 =      #进行普通字符精确匹配 @     #”@” 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
zhangdd
2018/08/01
6820

相似问题

无法在Win10 -ImportError上安装tensorflow : DLL加载失败

11

无法在win10上导入tensorflow

123

无法在Win10上运行tensorflow

117

构建在TypeScript上失败

15

win10中的tensorflow安装失败,setup.py错误代码1

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文