forked from quasarframework/quasar
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQIntersection.js
More file actions
99 lines (81 loc) · 2.01 KB
/
QIntersection.js
File metadata and controls
99 lines (81 loc) · 2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import Vue from 'vue'
import { onSSR } from '../../plugins/Platform.js'
import Intersection from '../../directives/Intersection.js'
import TagMixin from '../../mixins/tag.js'
import ListenersMixin from '../../mixins/listeners.js'
import { slot } from '../../utils/slot.js'
export default Vue.extend({
name: 'QIntersection',
mixins: [ TagMixin, ListenersMixin ],
directives: {
Intersection
},
props: {
once: Boolean,
transition: String,
ssrPrerender: Boolean,
margin: String,
threshold: [ Number, Array ],
root: {
default: null
},
disable: Boolean
},
data () {
return {
showing: onSSR === true ? this.ssrPrerender : false
}
},
computed: {
value () {
return this.root !== void 0 || this.margin !== void 0 || this.threshold !== void 0
? {
handler: this.__trigger,
cfg: {
root: this.root,
rootMargin: this.margin,
threshold: this.threshold
}
}
: this.__trigger
},
directives () {
if (this.disable !== true && (onSSR !== true || this.once !== true || this.ssrPrerender !== true)) {
return [{
name: 'intersection',
value: this.value,
modifiers: {
once: this.once
}
}]
}
}
},
methods: {
__trigger (entry) {
if (this.showing !== entry.isIntersecting) {
this.showing = entry.isIntersecting
if (this.qListeners.visibility !== void 0) {
this.$emit('visibility', this.showing)
}
}
}
},
render (h) {
const content = this.showing === true
? [ h('div', { key: 'content' }, slot(this, 'default')) ]
: void 0
return h(this.tag, {
staticClass: 'q-intersection',
on: { ...this.qListeners },
directives: this.directives
}, this.transition
? [
h('transition', {
props: { name: 'q-transition--' + this.transition }
}, content)
]
: content
)
}
})