可拖动和可调整大小 div 和 angular
Dragable and Resizable div with angular
我正在尝试创建可调整大小的 div 容器,而且它们是可拖动的。
我使用了 Angular material 拖放和 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
我怎样才能做到两者合一?
在图标或按钮上使用 cdkDragHandle
指令
<button cdkDragHandle>Drag Icon</button>
在此处查看全部 api https://material.angular.io/cdk/drag-drop/api
创建可拖动和可调整大小的 Angular 组件的简单方法
无需Angular Material,您也可以自己实现可拖动和可调整大小的组件。您需要分三步完成。
- 使 div 可调整大小
- Link鼠标移动到div的位置使其成为draggable/movable
- 为您的鼠标移动添加边界限制
步骤(1)的核心是通过减去鼠标位置(坐标)和div的位置(左&上位置)来计算新的div大小
步骤 (2) 需要计算鼠标的移动,并将相同的移动量添加到 div 的顶部和左侧位置。
第(3)步需要计算外容器的上、右、下、左边界位置。
要获取div元素的位置,需要使用Web API - Element.getBoundingClientRect()
要获取鼠标位置,您需要向 window 添加鼠标移动侦听器,向 div 元素本身添加鼠标按下侦听器。
我已经写了一篇 post 关于如何通过进一步的解释和图形实现这三个步骤。如果你还不清楚如何实现,可以看看
您可以在可拖动对象中添加一个碰撞框元素,它应该稍微小一些,并且在目标元素中完全居中。
蓝色区域是碰撞框元素。
现在,分别在 hitbox 元素上应用 mouseenter
和 mouseleave
事件,并在鼠标不在 hitbox 元素顶部时禁用拖动。
对于任何想知道如何将可调整大小的行为与可拖动一起使用的人,请随意使用(或扩展)我的简单解决方案:
https://stackblitz.com/edit/angular-ivy-brtlte?file=src%2Fapp%2Fapp.component.html
我正在尝试创建可调整大小的 div 容器,而且它们是可拖动的。
我使用了 Angular material 拖放和 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
我怎样才能做到两者合一?
在图标或按钮上使用 cdkDragHandle
指令
<button cdkDragHandle>Drag Icon</button>
在此处查看全部 api https://material.angular.io/cdk/drag-drop/api
创建可拖动和可调整大小的 Angular 组件的简单方法
无需Angular Material,您也可以自己实现可拖动和可调整大小的组件。您需要分三步完成。
- 使 div 可调整大小
- Link鼠标移动到div的位置使其成为draggable/movable
- 为您的鼠标移动添加边界限制
步骤(1)的核心是通过减去鼠标位置(坐标)和div的位置(左&上位置)来计算新的div大小
步骤 (2) 需要计算鼠标的移动,并将相同的移动量添加到 div 的顶部和左侧位置。
第(3)步需要计算外容器的上、右、下、左边界位置。
要获取div元素的位置,需要使用Web API - Element.getBoundingClientRect()
要获取鼠标位置,您需要向 window 添加鼠标移动侦听器,向 div 元素本身添加鼠标按下侦听器。
我已经写了一篇 post 关于如何通过进一步的解释和图形实现这三个步骤。如果你还不清楚如何实现,可以看看
您可以在可拖动对象中添加一个碰撞框元素,它应该稍微小一些,并且在目标元素中完全居中。
蓝色区域是碰撞框元素。
现在,分别在 hitbox 元素上应用 mouseenter
和 mouseleave
事件,并在鼠标不在 hitbox 元素顶部时禁用拖动。
对于任何想知道如何将可调整大小的行为与可拖动一起使用的人,请随意使用(或扩展)我的简单解决方案: https://stackblitz.com/edit/angular-ivy-brtlte?file=src%2Fapp%2Fapp.component.html