Skip to content

Commit b2cf036

Browse files
author
Duncan Hsieh
committed
new event: left, progress
1 parent fd23c78 commit b2cf036

File tree

4 files changed

+26
-9
lines changed

4 files changed

+26
-9
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ For examples see [`dev/`](dev/).
3838
| Name | description |
3939
| ---:| --- |
4040
| entered | will be fired on entering of viewport |
41+
| progress | will be fired on scrolling of viewport |
42+
| left | will be fired on leaving of viewport |
4143

4244
# Development
4345
Clone repository.

dev/basic.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
a(href="https://github.com/vue-comps/vue-comps-scrollspy/blob/master/dev/basic.vue") source
44
p open console and scroll down
55
div(style="margin-top:800px;width:200px;height:200px;background-color:blue") div
6-
scrollfire(@entered="entered")
6+
scrollfire(@entered="entered", @left="left", @progress="progress", multiple=true)
77
scrollfire(@entered="enteredOffset",:offset=200)
88
scrollfire(@entered="enteredNegativOffset",:offset=-200)
99
scrollfire(@entered="enteredAfter",:after=5000)
@@ -15,6 +15,8 @@ module.exports =
1515
"scrollfire": require "../src/scrollfire.vue"
1616
methods:
1717
entered: -> console.log "div entered view"
18+
left: -> console.log "div left view"
19+
progress: (pos) -> console.log("div on viewport, top:" + pos.top + " bottom:" + pos.bottom)
1820
enteredOffset: -> console.log "div entered view 200px before"
1921
enteredNegativOffset: -> console.log "div will enter view in 200px"
2022
enteredAfter: -> console.log "div entered view 5sec before"

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "vue-scrollfire",
33
"description": "fires an event on a specific scroll position",
4-
"version": "0.1.0",
4+
"version": "0.2.0",
55
"homepage": "https://github.com/vue-comps",
66
"author": {
77
"name": "Paul Pflugradt",

src/scrollfire.vue

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// out: ..
22
<template lang="jade">
33
span
4+
slot
45
</template>
56

67
<script lang="coffee">
@@ -22,22 +23,34 @@ module.exports =
2223
require("vue-mixins/getViewportSize")
2324
require("vue-mixins/onWindowResize")
2425
]
26+
2527
methods:
2628
processScroll: ->
27-
pos = @$el.getBoundingClientRect().top+@offset-@height
28-
if @lastPos > 0 and pos <= 0
29+
top = @$el.getBoundingClientRect().top+@offset-@height
30+
bottom = @$el.getBoundingClientRect().bottom+@offset
31+
if (@lastPos.top > 0 and top <= 0) || (@lastPos.bottom < 0 and bottom >= 0)
2932
if @after > 0
30-
setTimeout (=>@$emit("entered")),@after
33+
setTimeout (=>@$emit("left")),@after
3134
else
3235
@$emit("entered")
33-
setTimeout(@disposeListener,1) unless @multiple
34-
@lastPos = pos
36+
37+
if (@lastPos.bottom > 0 and bottom <= 0) || (@lastPos.top < 0 and top >= 0)
38+
if @after > 0
39+
setTimeout (=>@$emit("left")),@after
40+
else
41+
@$emit("left")
42+
setTimeout(@distopeListener,1) unless @multiple
43+
44+
if (top < 0 and bottom > 0)
45+
@$emit("progress", {top: -top, bottom: bottom})
46+
47+
@lastPos = {top: top, bottom: bottom}
3548
getHeight: ->
3649
@height = @getViewportSize().height
3750
compiled: ->
38-
@lastPos = Number.MAX_VALUE
51+
@lastPos = {top: Number.MAX_VALUE, bottom: Number.MAX_VALUE}
3952
@getHeight()
4053
@onWindowResize @getHeight
41-
@disposeListener = @onWindowScroll @processScroll
54+
@distopeListener = @onWindowScroll @processScroll
4255
4356
</script>

0 commit comments

Comments
 (0)