igniteui-angular-sovn
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
83 lines (62 loc) • 5.87 kB
Markdown
# Position strategies
Position strategies determine where to display the component in the provided IgxOverlayService. There are three position strategies:
1) **Global** - Positions the element based on the directions passed in trough PositionSettings. These are Top/Middle/Bottom for verticalDirection and Left/Center/Right for horizontalDirection. Defaults to:
| horizontalDirection | verticalDirection |
|:---------------------------|:-------------------------|
| HorizontalAlignment.Center | VerticalAlignment.Middle |
2) **Container** - Positions the element inside the containing outlet based on the directions passed in trough PositionSettings. These are Top/Middle/Bottom for verticalDirection and Left/Center/Right for horizontalDirection. Defaults to:
| horizontalDirection | verticalDirection |
|:---------------------------|:-------------------------|
| HorizontalAlignment.Center | VerticalAlignment.Middle |
3) **Connected** - Positions the element based on the directions and start point passed in trough PositionSettings. It is possible to either pass a start point or an HTMLElement as a positioning base. Defaults to:
| target | horizontalDirection | verticalDirection | horizontalStartPoint | verticalStartPoint |
|:----------------|:--------------------------|:-------------------------|:-------------------------|:-------------------------|
| new Point(0, 0) | HorizontalAlignment.Right | VerticalAlignment.Bottom | HorizontalAlignment.Left | VerticalAlignment.Bottom |
4) **Auto** - Positions the element as in **Connected** positioning strategy and re-positions the element in the view port (calculating a different start point) in case the element is partially getting out of view. Defaults to:
| target | horizontalDirection | verticalDirection | horizontalStartPoint | verticalStartPoint |
|:----------------|:--------------------------|:-------------------------|:-------------------------|:-------------------------|
| new Point(0, 0) | HorizontalAlignment.Right | VerticalAlignment.Bottom | HorizontalAlignment.Left | VerticalAlignment.Bottom |
5) **Elastic** - Positions the element as in **Connected** positioning strategy and resize the element to fit in the view port in case the element is partially getting out of view. Defaults to:
| target | horizontalDirection | verticalDirection | horizontalStartPoint | verticalStartPoint | minSize |
|:----------------|:--------------------------|:-------------------------|:-------------------------|:-------------------------|-------------------------|
| new Point(0, 0) | HorizontalAlignment.Right | VerticalAlignment.Bottom | HorizontalAlignment.Left | VerticalAlignment.Bottom | { width: 0, height: 0 } |
## Usage
Position an element based on an existing button as a target, so it's start point is the button's Bottom/Left corner.
```typescript
const positionSettings: PositionSettings = {
target: buttonElement.nativeElement,
horizontalDirection: HorizontalAlignment.Right,
verticalDirection: VerticalAlignment.Bottom,
horizontalStartPoint: HorizontalAlignment.Left,
verticalStartPoint: VerticalAlignment.Bottom,
minSize: { width: 100, height: 300 }
};
const strategy = new ConnectedPositioningStrategy(positionSettings);
strategy.position(contentWrapper, size);
```
## Getting Started
### Dependencies
Import the desired position strategy if needed like:
```typescript
import {AutoPositionStrategy, GlobalPositionStrategy, ConnectedPositioningStrategy } from './position/global-position-strategy';
```
## API
##### Methods
| Position Strategy | Name | Description |
|:------------------|:-------------------------------------------------------|:----------------------------------------------------------------------------------|
| Global | `position(contentElement)` | Positions the element, based on the horizontal and vertical directions. |
| Container | `position(contentElement)` | Positions the element inside the containing outlet based on the directions passed in trough PositionSettings. |
| Connected | `position(contentElement, size{})` | Positions the element, based on the position strategy used and the size passed in.|
| Auto | `position(contentElement, size{}, document?)` | Positions the element, based on the position strategy used and the size passed in.|
| Elastic | `position(contentElement, size{}, document?, minSize?)`| Positions the element, based on the position strategy used and the size passed in.|
###### PositionSettings
| Name | Type | Description |
| :----------------- | :-------------------------- | :---------- |
|target | Point | HTMLElement | Attaching target for the component to show |
|horizontalDirection | HorizontalAlignment | Direction in which the component should show |
|verticalDirection | VerticalAlignment | Direction in which the component should show |
|horizontalStartPoint| HorizontalAlignment | Target's starting point |
|verticalStartPoint | VerticalAlignment | Target's starting point |
|openAnimation | AnimationReferenceMetadata | Animation applied while overlay opens |
|closeAnimation | AnimationReferenceMetadata | Animation applied while overlay closes |
|minSize | Size | The size up to which element could be reduced |