vue-grid-layout移动卡片到页面底部时页面滚动条跟随滚动

news2024/11/25 1:08:11

问题描述:默认情况下 vue-grid-layout 移动卡片到页面底部时页面滚动条并不会跟随卡片滚动。

在这里插入图片描述

问题解决:

grid-item中的move事件中,获取到当前移动的元素,并使用scrollIntoView方法来实现滚动条跟随。
代码如下:

const moveEvent = (i: any) => {
  let cIdx = layout.value.findIndex(item => item.i === i)
  let el = gridItemRefs.value[cIdx].$el
  setTimeout(() => {
      el?.scrollIntoView({ behavior: "smooth", block: "end" })
  }, 300)
}

此时优化效果如下:
在这里插入图片描述

  • 但是上面优化还有一个小问题,将卡片右移可以无效无限右移。
    所以根据元素的lastX来控制一下:
const moveEvent = (i: any) => {
  let cIdx = layout.value.findIndex(item => item.i === i)
  let el = gridItemRefs.value[cIdx].$el
  setTimeout(() => {
    console.log(gridItemRefs.value[cIdx].lastX, '===gridItemRefs.value[cIdx]');
    if (gridItemRefs.value[cIdx].lastX < 900) {
      el?.scrollIntoView({ behavior: "smooth", block: "end" })
    }
  }, 300)
}

同理,如果是从外层拖到元素进来,也可以使用 scrollIntoView来设置滚动条跟随。
代码如下:
在这里插入图片描述

const colNum = 12
const drag = (item: any) => {
  let parentRect = document.getElementById('content')?.getBoundingClientRect()!;
  let mouseInGrid = false;
  if (((mouseXY.x > parentRect.left) && (mouseXY.x < parentRect.right)) && ((mouseXY.y > parentRect.top) && (mouseXY.y < parentRect.bottom))) {
    mouseInGrid = true;
  }
  if (mouseInGrid === true && (layout.value.findIndex(item => item.i === 'drop')) === -1) {
    layout.value.push({
      x: (layout.value.length * 2) % (colNum || 12),
      y: layout.value.length + (colNum || 12), // puts it at the bottom
      w: item.w,
      h: item.h,
      i: 'drop',
    });
  }
  let index = layout.value.findIndex(item => item.i === 'drop');
  if (index !== -1) {
    try {
      gridItemRefs.value[layout.value.length - 1].$refs.item.style.display = "none";
    } catch {
    }
    let el = gridItemRefs.value[index];
    if (el) {
      setTimeout(() => {
        el.$el?.scrollIntoView({ behavior: "smooth", block: "nearest" })
      }, 300)
      el.dragging = { "top": mouseXY.y - parentRect.top, "left": mouseXY.x - parentRect.left };
      let new_pos = el.calcXY(mouseXY.y - parentRect.top, mouseXY.x - parentRect.left);

      if (mouseInGrid === true) {

        gridlayout.value.dragEvent('dragstart', 'drop', new_pos.x || 0, new_pos.y || 0, item.h, item.w);
        // dragEvent('dragstart', 'drop', new_pos.x || 0, new_pos.y || 0, defaultH, defaultW);
        DragPos.i = String(new Date().getTime());
        DragPos.x = layout.value[index].x;
        DragPos.y = layout.value[index].y;
        DragPos.w = layout.value[index].w;
        DragPos.h = layout.value[index].h;
      }
      if (mouseInGrid === false) {
        gridlayout.value.dragEvent('dragend', 'drop', new_pos.x || 0, new_pos.y || 0, item.h, item.w);
        // dragEvent('dragend', 'drop', new_pos.x || 0, new_pos.y || 0, defaultH, defaultW);
        layout.value = layout.value.filter(obj => obj.i !== 'drop');
      }
    }
  }
}
const dragend = () => {
  let parentRect = document.getElementById('content')?.getBoundingClientRect()!;
  let mouseInGrid = false;
  if (((mouseXY.x > parentRect.left) && (mouseXY.x < parentRect.right)) && ((mouseXY.y > parentRect.top) && (mouseXY.y < parentRect.bottom))) {
    mouseInGrid = true;
  }
  if (mouseInGrid === true) {
    gridlayout.value.dragEvent('dragend', 'drop', DragPos.x, DragPos.y, DragPos.h, DragPos.w);
    let delIndex = layout.value.findIndex(item => item.i === 'drop')
    layout.value.splice(delIndex, 1)
    // UNCOMMENT below if you want to add a grid-item
    layout.value.push({
      x: DragPos.x,
      y: DragPos.y,
      w: DragPos.w,
      h: DragPos.h,
      i: DragPos.i,
    });
    gridlayout.value.dragEvent('dragend', DragPos.i, DragPos.x, DragPos.y, DragPos.h, DragPos.w);
    try {
      gridItemRefs.value[layout.value.length - 1].$refs.item.style.display = "block";
    } catch {
    }
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1021638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache 原生 Hadoop 运维命令

Hadoop 1、检查原生hadoop和压缩库是否可用 hadoop checknative2、打印hadoop环境的配置路径 hadoop classpathHDFS 1、查看hdfs文件系统的状态 hdfs dfsadmin -report2、获取安全模式的状态 hdfs dfsadmin -safemode get安全模式下只可进行读操作 3、文件系统健康检查 …

Windows 10 + Jenkins 2.4 安装插件时https 的证书问题及解决

本篇面临与解决的问题 本篇是在 Windows 10中安装Jenkins 2.414.1 &#xff0c; 在安装完成之后安装一些需要的插件&#xff0c; 可以在浏览器端安装插件的时候&#xff0c; 总是不成功&#xff0c; 控制台报以下错误&#xff1a; SEVERE h.model.UpdateCenter$DownloadJob#r…

工作中怎么去进行测试用例的编写

作为一个测试人员&#xff0c;无论是测试资深大佬还是刚入门的测试小白应该都知道&#xff0c;编写测试用例是我们测试的核心工作之一&#xff0c;往往测试用例写的标准与否&#xff0c;最能体现我们测试人员的差距&#xff0c;那么如何编写一篇优秀高质量的测试用例呢&#xf…

Postman应用——测试脚本Test Script

文章目录 Test Script脚本CollectionFolderRequest 解析响应体断言测试 测试脚本可以在Collection、Folder和Request的Pre-request script 和 Test script中编写&#xff0c;测试脚本可以检测请求响应的各个方面&#xff0c;包括正文、状态代码、头、cookie、响应时间等&#x…

Doris 2.0.1 Dockerfile制作

镜像编译 准备工作 1、创建目录 └── docker-build // 构建根目录 └── fe // FE 构建目录 ├── dockerfile …

JVM的内存分配及垃圾回收

内存分配 在了解Java的内存管理前&#xff0c;需要知道JVM中的内存分配。 栈 存储局部变量。在方法的定义中或在方法中声明的变量为局部变量&#xff1b;栈内存中的数据在该方法结束&#xff08;返回或抛出异常或方法体运行到最后&#xff09;时自动释放栈中存放的数据结构为…

Linux:haproxy部署--搭建nginx集群

Haproxy介绍 Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一&#xff0c;它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能。 其配置简单&#xff0c;而且拥有很好的对服务器节点的健康检查功能&#xff08;相当于keepalived健康检查&#xff09;&am…

区块链安全,哈希函数暴露的攻击向量与对策

区块链安全&#xff0c;哈希函数暴露的攻击向量与对策 简介 Length Extension Attack 是一种与某些特定类型的哈希函数&#xff08;如 MD5&#xff0c;SHA-1 和 SHA-2&#xff09;的特性有关的攻击。简单来说&#xff0c;这种攻击利用了一个事实&#xff0c;即知道 H(message)…

Spring Boot 各版本的支持时间

1. Spring Boot 各版本的支持时间 Spring Boot 2.7 的版本&#xff0c;支持到2023-11-18&#xff0c;之后就要停止支持了。 按照官网的数据&#xff0c;3.0 的版本也是到2023年11月就停止支持了。如果要转到SpringBoot3&#xff0c;直接从3.1开始吧。到写这篇文章时&#xff…

如何在电脑和手机之间无线传输大文件?不限文件格式、不压缩画质

AirDroid个人版支持在 Windows、Mac、Linux、安卓、iOS 之间跨平台互传文件&#xff0c;无需数据线&#xff0c;没有文件类型的限制&#xff0c;更不用担心图片或视频的画质被压缩——无损传输&#xff0c;轻松高效。 如果设备连接的是同一网络&#xff08;局域网内&#xff09…

【最优化】—— 最优化简介(一)

文章目录 前言最优化问题概括最优化问题的一般形式最优化问题的类型例子&#xff1a;稀疏优化 最优化的基本概念全局和局部最优解优化算法收敛性算法的渐进收敛速度算法的复杂度 前言 本系列文章作为最优化学习的相关笔记。参考书目&#xff1a;文再文老师的《最优化&#xff…

stm32f103步进电机S曲线加减速计算

S曲线主要实现低速扭力大&#xff0c;更快更稳 https://zhuanlan.zhihu.com/p/396648926?utm_campaign&utm_mediumsocial&utm_oi1361101006265331712&utm_psn1686906450235133952&utm_sourcezhihu 可点击上面链接查看啤酒杯的运动动画 摘自一段知乎上一段关于…

C#,数值计算——Logisticdev的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Structure for logistic deviates. /// </summary> public class Logisticdev : Ran { private double mu { get; set; } private double sig {…

PaddlePaddle Hackathon 飞桨黑客马拉松热身赛上线!

挑战自我 拓展技能 激发创新 挑战极限 再次相遇黑客松 我们期待你的加入&#xff01; 第五期 PaddlePaddle Hackathon 飞桨黑客马拉松热身赛上线&#xff0c;本次活动是面向全球开发者的深度学习领域编程活动&#xff0c;鼓励开发者了解和参与飞桨深度学习开源项目与文心大…

基于海康Ehome/ISUP接入到LiveNVR实现海康摄像头、录像机视频统一汇聚,做到物联网无插件直播回放和控制

LiveNVR支持海康NVR摄像头通EHOME接入ISUP接入LiveNVR分发视频流或是转GB28181 1、海康 ISUP 接入配置2、海康设备接入2.1、海康EHOME接入配置示例2.2、海康ISUP接入配置示例 3、通道配置3.1、直播流接入类型 海康ISUP3.2、海康 ISUP 设备ID3.3、启用保存3.4、接入成功 4、相关…

TC397 IfxAsclin串口收发分析

TC397 IfxAsclin串口收发分析 硬件FIFO 16 bytes TxFIFO 16 bytes RxFIFO 软件操作: 通过以上函数调用分析,可知: 1:初始化串口时,指定的FIFO为S/W 缓冲FIFO 2:ILLD提供的ISR操作函数: IfxAsclin_Asc_isrTransmit(&gstAsc2); IfxAsclin_Asc_isrReceive(&gs…

VMware虚拟机如何设置网络

一直没弄明白怎么能让虚拟机正常上网和访问&#xff0c;最近总结一个小经验 要在宿主机访问虚拟机电脑服务器&#xff0c;要设置成nat格式&#xff0c;虚拟机可以上网&#xff0c;宿主机访问虚拟机上的ip即可访问虚拟机里的服务器&#xff0c;也就是这样设置就行。 这时候ip不…

计算机网络层(2)

1.动态路由协议&#xff1a; 内部网关协议&#xff1a;用于一个自治系统的内部 外部网关协议&#xff1a;用于不同自治系统 RIP协议&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;&#xff1a;路由信息协议是一种内部网关协议&#xff0c;是一…

【洛谷算法题】P5706-再分肥宅水【入门1顺序结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5706-再分肥宅水【入门1顺序结构】&#x1f30f;题目描述&#x1f30f;输入格式…

Python爬虫基础(五):使用scrapy框架

文章目录 系列文章索引一、scrapy简介1、什么是scrapy2、scrapy安装3、scrapy架构组成4、scrapy工作原理 二、scrapy基本使用1、创建项目2、创建爬虫文件3、&#xff08;附&#xff09;项目组成4、运行爬虫代码&#xff08;1&#xff09;修改baidu.py&#xff08;2&#xff09;…