npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ngx-virtual-dnd-list

v13.0.4

Published

A virtual scrolling list component that can be sorted by dragging

Downloads

16

Readme

ngx-virtual-dnd-list

npm npm Software License

A virtual scrolling list component that can be sorted by dragging

Live demo

Simple usage

npm i ngx-virtual-dnd-list

virutal-list.module.ts

...
import { VirtualDndListModule } from 'ngx-virtual-dnd-list';

@NgModule({
  declarations: [
    ...
  ],
  imports: [
    ...
    VirtualDndListModule
  ],
  providers: []
})
export class VirtualListModule { }

virutal-list.component.ts

import { Component } from '@angular/core';

@Component({
  selector: 'virutal-list',
  template: `
    <div #scroller>
      <div virtual-dnd-list
        [scroller]="scroller"
        [dataKey]="'id'"
        [keeps]="30"
        [(ngModel)]="list"
        (ngModelChange)="onChange($event)"
      >
        <ng-template let-data let-index="index">
          <span>{{ index }}</span>
          <p>{{ data.text }}</p>
        </ng-template>
      </virtual-dnd-list>
    </div>
  `,
  styles: [],
})
export class AppComponent {
  public list = [
    { id: 'a', text: 'aaa' },
    { id: 'b', text: 'bbb' },
    { id: 'c', text: 'ccc' },
    ...
  ];

  onChange(data) {
    // the data changes after the dragging ends
  }
}

EventEmitters

| Event | Description | | ------------- | -------------------------------- | | onTop | scrolled to top | | onBottom | scrolled to bottom | | onDrag | the drag is started | | onDrop | the drag is completed | | rangeChange | triggered when the range changes |

Attributes

Required Attributes

| Prop | Type | Description | | ---------- | ------------------------- | --------------------------------------------------------------------- | | data-key | String | The unique identifier of each piece of data, in the form of 'a.b.c' | | scroller | HTMLElement \| Document | Virtual list scrolling element |

Optional Attributes

Commonly used

| Prop | Type | Default | Description | | -------------- | ------------------------ | ----------- | ----------------------------------------------------------------------------------------------------------------- | | keeps | Number | 30 | The number of lines rendered by the virtual scroll | | size | Number | - | The estimated height of each piece of data, you can choose to pass it or not, it will be automatically calculated | | handle | Function/String | - | Drag handle selector within list items | | group | Object/String | - | string: 'name' or object: { name: 'group', put: true/false, pull: true/false/'clone', revertDrag: true/false } | | keepOffset | Boolean | false | When scrolling up to load data, keep the same offset as the previous scroll | | direction | vertical \| horizontal | | scroll direction | | lockAxis | x \| y | - | Axis on which dragging will be locked | | debounceTime | Number | 0 | debounce time on scroll | | throttleTime | Number | 0 | throttle time on scroll |

Uncommonly used

| Prop | Type | Default | Description | | ------------------ | --------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------ | | draggable | String | .virtual-dnd-list-item | Specifies which items inside the element should be draggable. If does not set a value, the default list element can be dragged | | itemClass | String | virtual-dnd-list-item | default list item class | | sortable | Boolean | true | Allow Sorting by Dragging | | disabled | Boolean | false | Disables the sortable if set to true | | animation | Number | 150 | Animation speed moving items when sorting | | autoScroll | Boolean | true | Automatic scrolling when moving to the edge of the container | | scrollThreshold | Number | 55 | Threshold to trigger autoscroll | | delay | Number | 0 | Time in milliseconds to define when the sorting should start | | delayOnTouchOnly | Boolean | false | Only delay on press if user is using touch | | fallbackOnBody | Boolean | false | Appends the ghost element into the document's body | | ghostClass | String | '' | The class of the mask element when dragging | | ghostStyle | Object | {} | The style of the mask element when dragging | | chosenClass | String | '' | The class of the selected element when dragging |

Public Methods

| Method | Description | | ------------------------ | ---------------------------------------------------------- | | getSize(key) | Get the size of the current item by unique key value | | getOffset() | Get the current scroll height | | getClientSize() | Get wrapper element client viewport size (width or height) | | getScrollSize() | Get all scroll size (scrollHeight or scrollWidth) | | scrollToTop() | Scroll to top of list | | scrollToBottom() | Scroll to bottom of list | | scrollToIndex(index) | Scroll to the specified index position | | scrollToOffset(offset) | Scroll to the specified offset |

Usage

import { Component, ViewChild } from '@angular/core';
import { VirtualDndListComponent } from 'ngx-virtual-dnd-list';

@Component({
  selector: 'virutal-list',
  template: `
    <div #scroller>
      <div virtual-dnd-list
        #virtualList
        ...
      >
        ...
      </div>

      <button (click)="scrollToBottom()">scroll to bottom</button>
    </div>
  `,
  styles: [],
})
export class VirtualListComponent {
  @ViewChild('virtualList') virtualList: VirtualDndListComponent;

  scrollToBottom() {
    this.virtualList.scrollToBottom();
  }
}