【问题标题】:Dragable and Resizable div with angular带角度的可拖动和可调整大小的 div
【发布时间】:2020-01-31 05:43:58
【问题描述】:

我正在尝试创建可调整大小的 div 容器,它们也是可拖动的。

我使用了 Angular 材质拖放和angular resizable element

这是解决方法 https://stackblitz.com/edit/angular-syurbs?embed=1&file=src/polyfills.ts

但是当我同时应用两者时,我可以拖动但我不能调整大小。

https://stackblitz.com/edit/angular-41rqyo?file=src%2Fapp%2Fapp.component.html

我怎样才能同时实现两者?

【问题讨论】:

    标签: angular angular-material resizable


    【解决方案1】:

    在图标或按钮上使用cdkDragHandle 指令 <button cdkDragHandle>Drag Icon</button>

    在这里查看整个 api https://material.angular.io/cdk/drag-drop/api

    示例:https://stackblitz.com/angular/jamgbjgmynoq

    【讨论】:

    • 我在问如何实现“拖放”和“调整大小”
    • 是的,当您使用 Handler 拖动元素时,您将能够调整它的大小。在 Angular Material 中没有其他方法可以做到这一点
    【解决方案2】:

    创建可拖动和调整大小的 Angular 组件的简单方法

    您可以在没有 Angular Material 的情况下自己实现可拖动和调整大小的组件。您需要分三步完成。

    1. 使 div 可调整大小
    2. 将鼠标移动链接到 div 的位置,使其可拖动/可移动
    3. 为鼠标移动添加边界限制

    步骤(1)的核心是通过减去鼠标位置(坐标)和div的位置(left&top position)来计算新的div大小

    第 (2) 步需要计算鼠标的移动,并将相同的移动量添加到 div 的顶部和左侧位置。

    步骤(3)您需要计算外部容器的顶部、右侧、底部和左侧边界的位置。

    要获取 div 元素的位置,需要使用 Web API - Element.getBoundingClientRect()

    要获取鼠标位置,您需要向窗口添加鼠标移动侦听器,并向 div 元素本身添加鼠标按下侦听器。

    我已经写了一篇关于如何实现这三个步骤的帖子,并提供了进一步的解释和图形。如果你还不清楚如何实现,可以看看。

    Create a Resizable and Draggable Angular Component

    【讨论】:

    【解决方案3】:

    你可以在你的可拖动元素中添加一个 hitbox 元素,它应该稍微小一点并且在你的目标元素中完全居中。

    蓝色区域是 hitbox 元素。 现在,分别在 hitbox 元素上应用 mouseentermouseleave 事件,并在鼠标不在 hitbox 元素顶部时禁用拖动。

    【讨论】:

      【解决方案4】:

      如果有人想知道如何在可拖动的同时使用可调整大小的行为,请随意使用(或扩展)我的简单解决方案: https://stackblitz.com/edit/angular-ivy-brtlte?file=src%2Fapp%2Fapp.component.html

      【讨论】:

        猜你喜欢
        • 2016-02-02
        • 2014-01-16
        • 2022-01-24
        • 2017-05-15
        • 1970-01-01
        • 2011-11-22
        • 2011-10-05
        • 1970-01-01
        • 2021-05-22
        相关资源
        最近更新 更多