@@ -102,53 +102,55 @@ const style = itemsPerSlide > 1
102
102
import { debounce } from '../../utils/debounce'
103
103
import { listen } from '../../utils/event'
104
104
105
- const carousels = Array.from(document.querySelectorAll('[data-id="w-carousel"]'))
106
-
107
- const scroll = (event: Event) => {
108
- const target = event.target as HTMLDivElement
109
-
110
- if (!target.dataset.paginated) {
111
- const scrollLeft = target.scrollLeft
112
- const itemWidth = target.children[0].clientWidth
113
- const page = Math.round(scrollLeft / itemWidth) + 1
114
- const carouselElement = target.children[0]
115
- const paginationElement = target.parentElement
116
- ?.querySelector('[data-id="w-pagination"]') as HTMLUListElement
117
- const currentPage = Number(paginationElement.dataset.currentPage)
118
- const diff = Math.abs(currentPage - page)
119
-
120
- let triggerButton = currentPage > page
121
- ? paginationElement.querySelector('[data-page="prev"]') as HTMLButtonElement
122
- : paginationElement.querySelector('[data-page="next"]') as HTMLButtonElement
123
-
124
- if (!triggerButton) {
125
- triggerButton = paginationElement.querySelector(`[data-page="${page}"]`) as HTMLButtonElement
126
- }
105
+ const addEventListeners = () => {
106
+ const carousels = Array.from(document.querySelectorAll('[data-id="w-carousel"]'))
107
+
108
+ const scroll = (event: Event) => {
109
+ const target = event.target as HTMLDivElement
110
+
111
+ if (!target.dataset.paginated) {
112
+ const scrollLeft = target.scrollLeft
113
+ const itemWidth = target.children[0].clientWidth
114
+ const page = Math.round(scrollLeft / itemWidth) + 1
115
+ const carouselElement = target.children[0]
116
+ const paginationElement = target.parentElement
117
+ ?.querySelector('[data-id="w-pagination"]') as HTMLUListElement
118
+ const currentPage = Number(paginationElement.dataset.currentPage)
119
+ const diff = Math.abs(currentPage - page)
120
+
121
+ let triggerButton = currentPage > page
122
+ ? paginationElement.querySelector('[data-page="prev"]') as HTMLButtonElement
123
+ : paginationElement.querySelector('[data-page="next"]') as HTMLButtonElement
124
+
125
+ if (!triggerButton) {
126
+ triggerButton = paginationElement.querySelector(`[data-page="${page}"]`) as HTMLButtonElement
127
+ }
127
128
128
- for (let i = 0; i < diff; i++) {
129
- triggerButton.click()
130
- }
129
+ for (let i = 0; i < diff; i++) {
130
+ triggerButton.click()
131
+ }
131
132
132
- Array.from(carouselElement.children).forEach(li => {
133
- (li as HTMLLIElement).removeAttribute('data-active')
134
- })
133
+ Array.from(carouselElement.children).forEach(li => {
134
+ (li as HTMLLIElement).removeAttribute('data-active')
135
+ })
135
136
136
- const activeElement = carouselElement.children[page - 1] as HTMLLIElement
137
+ const activeElement = carouselElement.children[page - 1] as HTMLLIElement
137
138
138
- activeElement.dataset.active = 'true'
139
+ activeElement.dataset.active = 'true'
140
+ }
139
141
}
140
- }
141
142
142
- carousels.forEach(carousel => {
143
- const carouselElement = carousel as HTMLDivElement
144
- const debounceAmount = carouselElement.dataset.debounce
145
- ? Number(carouselElement.dataset.debounce)
146
- : 20
143
+ carousels.forEach(carousel => {
144
+ const carouselElement = carousel as HTMLDivElement
145
+ const debounceAmount = carouselElement.dataset.debounce
146
+ ? Number(carouselElement.dataset.debounce)
147
+ : 20
147
148
148
- carousel.addEventListener('scroll', debounce((event: Event) => {
149
- scroll(event)
150
- }, debounceAmount))
151
- })
149
+ carousel.addEventListener('scroll', debounce((event: Event) => {
150
+ scroll(event)
151
+ }, debounceAmount))
152
+ })
153
+ }
152
154
153
155
listen('paginate', event => {
154
156
const target = event.target
@@ -172,7 +174,7 @@ const style = itemsPerSlide > 1
172
174
: indexes[event.page - 1][indexes[event.page - 1].length - 1]
173
175
174
176
const liElement = carousel.children[pageIndex]
175
- const subText = event.target.nextElementSibling
177
+ const subText = event.target.parentElement.querySelector('span')
176
178
177
179
Array.from(carousel.children).forEach(li => {
178
180
(li as HTMLLIElement).removeAttribute('data-active')
@@ -204,4 +206,7 @@ const style = itemsPerSlide > 1
204
206
}, 300)
205
207
}
206
208
})
209
+
210
+ document.addEventListener('astro:after-swap', addEventListeners)
211
+ addEventListeners()
207
212
</script >
0 commit comments