1.0.0 • Published 9 years ago
vue-comps-scrollspy v1.0.0
vue-comps-scrollspy
Tracks, which element is currently in the viewport
Demo
On scrolling down, the target with the most area filling the space in the range 0.3-0.4 * viewportHeight is set active.
On scrolling up, the range 0.6-0.7 * viewportHeight is taken.
Install
npm install --save-dev vue-comps-scrollspyor include build/bundle.js.
Usage
# in your component
components:
"scrollspy": require("vue-comps-scrollspy")
"scrollspy-item": require("vue-comps-scrollspy/scrollspy-item")
# or, when using bundle.js
components:
"scrollspy": window.vueComps.scrollspy
"scrollspy-item": window.vueComps.scrollspyItem<scrollspy>
<scrollspy-item target="someID">someDescription</scrollspy-item>
</scrollspy>For examples see dev/.
Props
Scrollspy
| Name | type | default | description |
|---|---|---|---|
| transition | Function | see transtion | function which gets used for scrolling item into view |
| activeClass | String | active | class will be applied to active item |
| activeStyle | String / Object | "" | style will be applied to active item |
Scrollspy-item
| Name | type | default | description |
|---|---|---|---|
| target | String or Element | - | string will be converted by document.getElementById |
Transition
This is the default transition:
function (scrollBy, done) {
window.scrollBy(0,scrollBy)
}Always make sure you apply a little timeout before calling done
Example of vue-materialize for a transition with velocity:
Velocity = require("velocity-animate")
function (scrollBy, done) {
var body = document.body
var docEl = document.documentElement
var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop
scrollTop += scrollBy
var duration = Math.abs(scrollBy)/3
if (duration < 100) {
duration = 100
} else if (duration > 500) {
duration = 500
}
Velocity(docEl, "scroll", {
duration: duration,
offset: scrollTop,
complete: function() {setTimeout(done, 66)}
})
}Changelog
- 1.0.0
some cleaning
added unit tests
addedtransition,activeClass,activeStyleprops
added ability to directly give a element as target
Development
Clone repository.
npm install
npm run devBrowse to http://localhost:8080/.
License
Copyright (c) 2016 Paul Pflugradt Licensed under the MIT license.