|
11 | 11 |
|
12 | 12 | let obj = {}, |
13 | 13 | pluginActive = false, |
14 | | - $w = $(window), |
| 14 | + hasJquery = typeof jQuery !== 'undefined', |
| 15 | + $w = hasJquery ? $(window) : '', |
15 | 16 | settings = { |
16 | 17 | topOffset: () => 0, |
17 | 18 | bottomOffset: () => 0, |
|
54 | 55 | obj.isScrollAtBottom = false; |
55 | 56 |
|
56 | 57 | // Events |
57 | | - let scrollDirection = $.Event("scrollDirection"), |
58 | | - scrollDown = $.Event("scrollDown"), |
59 | | - scrollUp = $.Event("scrollUp"), |
60 | | - scrollAtTop = $.Event("scrollAtTop"), |
61 | | - scrollAtMiddle = $.Event("scrollAtMiddle"), |
62 | | - scrollAtBottom = $.Event("scrollAtBottom"); |
| 58 | + const scrollDirection = new Event("scrollDirection"), |
| 59 | + scrollDown = new Event("scrollDown"), |
| 60 | + scrollUp = new Event("scrollUp"), |
| 61 | + scrollAtTop = new Event("scrollAtTop"), |
| 62 | + scrollAtMiddle = new Event("scrollAtMiddle"), |
| 63 | + scrollAtBottom = new Event("scrollAtBottom"); |
| 64 | + |
| 65 | + // jQuery support |
| 66 | + let scrollDirectionJquery, scrollDownJquery, scrollUpJquery, scrollAtTopJquery, scrollAtMiddleJquery, |
| 67 | + scrollAtBottomJquery; |
| 68 | + if(hasJquery){ |
| 69 | + scrollDirectionJquery = $.Event("scrollDirection"); |
| 70 | + scrollDownJquery = $.Event("scrollDown"); |
| 71 | + scrollUpJquery = $.Event("scrollUp"); |
| 72 | + scrollAtTopJquery = $.Event("scrollAtTop"); |
| 73 | + scrollAtMiddleJquery = $.Event("scrollAtMiddle"); |
| 74 | + scrollAtBottomJquery = $.Event("scrollAtBottom"); |
| 75 | + } |
63 | 76 |
|
64 | 77 | // Indicator: add class to indicate the scrolling status |
65 | 78 | function indicator(options){ |
|
104 | 117 | obj.isScrollUp = false; |
105 | 118 | obj.isScrollDown = true; |
106 | 119 |
|
107 | | - $w.trigger(scrollDown); |
| 120 | + if(hasJquery) $w.trigger(scrollDownJquery); |
| 121 | + document.dispatchEvent(scrollDown); |
108 | 122 | }else if(settings.scrollAmount() < lastScrollAmount && lastScrollAmount >= 0){ |
109 | 123 | // scroll up |
110 | 124 | obj.isScrollUp = true; |
111 | 125 | obj.isScrollDown = false; |
112 | 126 |
|
113 | | - $w.trigger(scrollUp); |
| 127 | + if(hasJquery) $w.trigger(scrollUpJquery); |
| 128 | + document.dispatchEvent(scrollUp); |
114 | 129 | }else if(settings.scrollAmount() < 0){ |
115 | 130 | // scroll up (elastic scroll with negative value) |
116 | 131 | obj.isScrollUp = true; |
117 | 132 | obj.isScrollDown = false; |
118 | 133 |
|
119 | | - $w.trigger(scrollUp); |
| 134 | + if(hasJquery) $w.trigger(scrollUpJquery); |
| 135 | + document.dispatchEvent(scrollUp); |
120 | 136 | }else if(settings.scrollAmount() > settings.maxScrollAmount()){ |
121 | 137 | // scroll down (elastic scroll with positive value) |
122 | 138 | obj.isScrollUp = false; |
123 | 139 | obj.isScrollDown = true; |
124 | 140 |
|
125 | | - $w.trigger(scrollDown); |
| 141 | + if(hasJquery) $w.trigger(scrollDownJquery); |
| 142 | + document.dispatchEvent(scrollDown); |
126 | 143 | } |
127 | 144 |
|
128 | 145 | // update the last position |
|
135 | 152 | obj.isScrollAtMiddle = false; |
136 | 153 | obj.isScrollAtBottom = false; |
137 | 154 |
|
138 | | - $w.trigger(scrollAtTop); |
| 155 | + if(hasJquery) $w.trigger(scrollAtTopJquery); |
| 156 | + document.dispatchEvent(scrollAtTop); |
139 | 157 | }else if( |
140 | 158 | settings.scrollAmount() >= settings.maxScrollAmount() - settings.bottomOffset() && |
141 | 159 | settings.scrollAmount() <= settings.maxScrollAmount() |
|
145 | 163 | obj.isScrollAtMiddle = false; |
146 | 164 | obj.isScrollAtBottom = true; |
147 | 165 |
|
148 | | - $w.trigger(scrollAtBottom); |
| 166 | + if(hasJquery) $w.trigger(scrollAtBottomJquery); |
| 167 | + document.dispatchEvent(scrollAtBottom); |
149 | 168 |
|
150 | 169 | if(settings.atBottomIsAtMiddle){ |
151 | 170 | obj.isScrollAtMiddle = true; |
152 | | - $w.trigger(scrollAtMiddle); |
| 171 | + |
| 172 | + if(hasJquery) $w.trigger(scrollAtMiddleJquery); |
| 173 | + document.dispatchEvent(scrollAtMiddle); |
153 | 174 | } |
154 | 175 | }else{ |
155 | 176 | // at middle |
156 | 177 | obj.isScrollAtTop = false; |
157 | 178 | obj.isScrollAtMiddle = true; |
158 | 179 | obj.isScrollAtBottom = false; |
159 | 180 |
|
160 | | - $w.trigger(scrollAtMiddle); |
| 181 | + if(hasJquery) $w.trigger(scrollAtMiddleJquery); |
| 182 | + document.dispatchEvent(scrollAtMiddle); |
161 | 183 | } |
162 | 184 |
|
163 | 185 | // Indicator |
|
173 | 195 | }); |
174 | 196 | } |
175 | 197 |
|
176 | | - $w.trigger(scrollDirection); |
| 198 | + if(hasJquery) $w.trigger(scrollDirectionJquery); |
| 199 | + document.dispatchEvent(scrollDirection); |
177 | 200 | } |
178 | 201 | } |
179 | 202 |
|
|
188 | 211 | window.scrollDirection = obj; |
189 | 212 |
|
190 | 213 | // Only assign to jQuery.scrollDirection if jQuery is loaded |
191 | | - if(jQuery){ |
| 214 | + if(hasJquery){ |
192 | 215 | jQuery.scrollDirection = window.scrollDirection; |
193 | 216 | } |
194 | 217 |
|
|
0 commit comments