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-lock-axis-fork

v2.8.0

Published

A virtual scrolling list component that can be sorted by dragging

Downloads

4

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>
  <div>
    <!--
      :handle="'I'" // use tagName 
      :handle="'.handle'" // use class
      :handle="'#handle'" // use id
      :data-source="list" // or replace with `v-model`
    -->
    <virtual-drag-list
      v-model="list"
      :data-key="'id'"
      :handle="'.handle'"
      style="height: 500px"
      @top="handleToTop"
      @bottom="handleToBottom"
      @drag="onDrag"
      @drop="onDrop"
      @add="onAdd"
      @remove="onRemove"
    >
      <template slot="item" slot-scope="{ record, index, dataKey }">
        <i class="handle">{{ record.id }}</span>
        {{ record.text }}
      </template>
      <template slot="header">
        <div class="loading">top loading...</div>
      </template>
      <template slot="footer">
        <div class="loading">bottom loading...</div>
      </template>
    </virtual-drag-list>
  </div>
</template>

<script>
  import virtualDragList from 'vue-virtual-draglist'

  export default {
    name: 'root',
    components: { virtualDragList },
    data () {
      return {
        list: [{id: '1', text: 'asd'}, {id: '2', text: 'fgh'}, ...]
      }
    },
    methods: {
      handleToTop() {
        // code here
      },
      handleToBottom() {
        // code here
      },
      onDrag({ list, from }) {
        // code here
      },
      onDrop({ list, from, to, changed }) {
        // code here
      },
      onAdd({ item, key, index }) {
        // code here
      },
      onRemove({ item, key, index }) {
        // code here
      }
    }
  }
</script>

Emits

| Emit | Description | |--------------|-----------------| | top | Event fired when scroll to top | | bottom | Event fired when scroll to bottom | | drag | Event fired when the drag is started | | drop | Event fired when the drag is completed | | add | Event fired when element is dropped into the list from another | | remove | Event fired when element is removed from the list into another |

Props

Required props

| Prop | Type | Description | |------------------|-------------|------------------| | data-key | String | The unique identifier of each piece of data, in the form of 'a.b.c' | | data-source | 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 } | | keepOffset | Boolean | false | When scrolling up to load data, keep the same offset as the previous scroll | | direction | String | vertical | vertical/horizontal, scroll direction | | pageMode | Boolean | false | Let virtual list using global document to scroll through the list |

Uncommonly used

| Prop | Type | Default | Description | | -------- | -------- | ----------- | --------------- | | draggable | Function/String | - | Specifies which items inside the element should be draggable. If does not set a value, the default list element can be dragged | | disabled | Boolean | false | Disables the sortable if set to true | | delay | Number | 0 | Delay time of debounce function | | 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 | | pressDelay | Number | 0 | Time in milliseconds to define when the sorting should start | | pressDelayOnTouchOnly | 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 | | itemTag | String | div | Label type for list item element | | headerTag | String | div | Label type for header slot element | | headerStyle| Object | {} | Header slot element style | | footerTag | String | div | Label type for footer slot element | | footerStyle| Object | {} | Footer slot element style | | wrapClass | String | '' | List wrapper element class | | wrapStyle | Object | {} | List wrapper element style | | itemClass | String | '' | List item element class | | itemStyle | Object | {} | List item element style | | 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 |

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