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

vue-virtual-draglist

v2.9.7

Published

A virtual scrolling list component that can be sorted by dragging

Downloads

4,169

Readme

vue-virtual-draglist

npm npm vue2 Software License

A virtual scrolling list component that can be sorted by dragging

For Vue 3 support, see here

Live demo

Simple usage

npm i vue-virtual-draglist

Root component:

<template>
  <!--
    :handle="'I'" // use tagName 
    :handle="'.handle'" // use class
    :handle="'#handle'" // use id
  -->
  <virtual-list v-model="list" :data-key="'id'" :handle="'.handle'">
    <template slot="item" slot-scope="{ record, index, dataKey }">
      <div>
        <span class="handle">{{ record.id }}</span>
        <p>{{ record.text }}</p>
      </div>
    </template>
    <template slot="header">
      <div class="header">header</div>
    </template>
    <template slot="footer">
      <div class="footer">footer</div>
    </template>
  </virtual-list>
</template>

<script>
import virtualList from 'vue-virtual-draglist';

export default {
  name: 'root',
  components: { virtualList },
  data () {
    return {
      list: [{ id: '1', text: 'a' }, { id: '2', text: 'b' }, ...];
    }
  },
}
</script>

Emits

| Emit | Description | | ------------- | ------------------ | | top | scrolled to top | | bottom | scrolled to bottom | | drag | drag is started | | drop | drag is completed | | rangeChange | range changed |

Props

Required props

| Prop | Type | Description | | ---------- | -------- | --------------------------------------------------------------------- | | data-key | String | The unique identifier of each piece of data, in the form of 'a.b.c' | | v-model | Array | The data that needs to be rendered |

Optional props

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 | Function/String | - | string: 'name' or object: { name: 'group', put: true/false, pull: true/false/'clone', revertDrag: true/false } | | direction | vertical \| horizontal | vertical | Scroll direction | | scroller | Document \| HTMLElement | - | Virtual list scrolling element | | lockAxis | x \| y | - | Axis on which dragging will be locked | | tableMode | Boolean | false | display with table and tbody | | keepOffset | Boolean | false | When scrolling up to load data, keep the same offset as the previous scroll | | debounceTime | Number | 0 | debounce time on scroll | | throttleTime | Number | 0 | throttle time on scroll |

Uncommonly used

| Prop | Type | Default | Description | | ------------------ | --------- | ------------------------ | ------------------------------------------------------------ | | sortable | Boolean | true | Whether the current list can be sorted by dragging | | draggable | String | .virtual-dnd-list-item | Specifies which items inside the element should be draggable | | itemClass | String | virtual-dnd-list-item | Default list item class | | 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 | | scrollSpeed | Object | { x: 10, y: 10 } | Vertical&Horizontal scrolling speed (px) | | 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 | | rootTag | String | div | Label type for root element | | wrapTag | String | div | Label type for list wrap element | | wrapClass | String | '' | List wrapper element class | | wrapStyle | Object | {} | List wrapper element style | | ghostClass | String | '' | The class of the mask element when dragging | | ghostStyle | Object | {} | The style of the mask element when dragging | | chosenClass | String | '' | Class name for the chosen item | | placeholderClass | String | '' | Class name for the drop placeholder |

Methods

Use ref to get the method inside the component

| 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 | | scrollToKey(key) | Scroll to the specified data-key position | | scrollToIndex(index) | Scroll to the specified index position | | scrollToOffset(offset) | Scroll to the specified offset |