PageSourceSearch

https://www.globalvillage.ae/themes/custom/global_village/js/animation.js?v=1.x

js globalvillage.ae collected 2026-10-02 03:09:01 UTC 24,826 bytes, 1,010 lines download raw bytes

1(function ($, Drupal, drupalSettings) {
2  /**** GASAP ANIMATIONS ****/
3  // Homepage banner animation function
4  function runMainBannerAnimation() {
5    let th0 = gsap.timeline();
6    th0.fromTo(
7      ".main-banner .main-banner-top",
8      { y: 10, opacity: 0, visibility: "hidden" },
9      {
10        y: 0,
11        duration: 0.5,
12        opacity: 1,
13        visibility: "visible",
14        ease: "easeInOut",
15        clearProps: "all",
16      },
17      0.5
18    );
19    gsap.utils
20      .toArray(".main-banner .content .details > *")
21      .forEach(function (child, i) {
22        th0.fromTo(
23          child,
24          { y: 0, opacity: 0, visibility: "hidden" },
25          {
26            y: 0,
27            opacity: 1,
28            visibility: "visible",
29            duration: 0.3,
30            ease: "easeInOut",
31          },
32          0.8 + i * 0.25 // after h3 (0.8s) + p (0.5s) + stagger
33        );
34      });
35  }
36
37  // Run main banner animation after carousel loads
38  $("#carouselExampleIndicators").on("slid.bs.carousel", function () {
39    //runMainBannerAnimation();
40  });
41
42  // If carousel is already loaded (e.g. only one slide), run animation immediately
43  if ($("#carouselExampleIndicators .carousel-item.active").length) {
44    runMainBannerAnimation();
45  }
46
47  gsap.registerPlugin(ScrollTrigger);
48
49  // GSAP Animations for homepage sections
50  // Interactive Map Home Spacing
51  gsap
52    .timeline({
53      scrollTrigger: {
54        trigger: ".interactive-map.home-spacing",
55        start: "top 99.99%",
56      },
57    })
58    .from(".interactive-map.home-spacing h3", {
59      y: 40,
60      opacity: 0,
61      duration: 0.6,
62    })
63    .from(
64      ".interactive-map.home-spacing h5",
65      { y: 20, opacity: 0, duration: 0.6 },
66      "-=0.3"
67    );
68
69  // Popup animation for all icons under #icons in the interactive map
70  gsap
71    .timeline({
72      scrollTrigger: {
73        trigger: ".interactive-map.home-spacing",
74        start: "top 99.99%",
75      },
76    })
77    .fromTo(
78      ".interactive-map-content svg #icons > *",
79      { scale: 0.2, opacity: 0, transformOrigin: "50% 50%" },
80      {
81        scale: 1,
82        opacity: 1,
83        duration: 0.5,
84        stagger: 0.12,
85        ease: "back.out(2)",
86      },
87      1
88    );
89
90  function animateChildrenOnLoad(selector, options = {}) {
91    const {
92      y = 0,
93      scaleFrom = 1,
94      scaleTo = 1,
95      opacity = 1,
96      duration = 0.3,
97      stagger = 0.15,
98      ease = "easeInOut",
99    } = options;
100    
101    if ($(selector).length) {
102      gsap.fromTo(
103        selector,
104        { opacity: 0, scale: scaleFrom, y: y },
105        {
106          opacity: opacity,
107          scale: scaleTo,
108          y: 0,
109          duration: duration,
110          stagger: stagger,
111          ease: ease,
112        },
113        options.delay || 0
114      );
115    }
116  }
117
118  function animateStaggeredChildrenOnScroll(
119    parentSelector,
120    childSelector,
121    options = {}
122  ) {
123    const {
124      y = 0,
125      scaleFrom = 1,
126      scaleTo = 1,
127      opacity = 1,
128      duration = 0.3,
129      stagger = 0.15,
130      ease = "easeInOut",
131      start = "top 80%",
132      delay = 0,
133    } = options;
134    let tl = gsap.timeline({
135      scrollTrigger: {
136        trigger: parentSelector,
137        start: start,
138      },
139    });
140    gsap.utils.toArray(childSelector).forEach(function (child, i) {
141      tl.fromTo(
142        child,
143        {
144          opacity: 0,
145          scale: scaleFrom,
146          y: y,
147        },
148        {
149          opacity: opacity,
150          scale: scaleTo,
151          y: 0,
152          duration: duration,
153          ease: ease,
154        },
155        delay + i * stagger
156      );
157    });
158  }
159
160  function animateHomepageSections() {
161    // Interactive Map Home Spacing
162    gsap
163      .timeline({
164        scrollTrigger: {
165          trigger: ".interactive-map.home-spacing",
166          start: "top 99.99%",
167        },
168      })
169      .from(".interactive-map.home-spacing h3", {
170        y: 40,
171        opacity: 0,
172        duration: 0.6,
173      })
174      .from(
175        ".interactive-map.home-spacing h5",
176        { y: 20, opacity: 0, duration: 0.6 },
177        "-=0.3"
178      );
179    // Main Banner
180
181    // Welcome Section
182    gsap
183      .timeline({
184        scrollTrigger: {
185          trigger: ".welcome-sec",
186          start: "top 99.99%",
187        },
188      })
189      .from(".welcome-sec .title h3", { y: 40, opacity: 0, duration: 0.6 })
190      .from(
191        ".welcome-sec .title p",
192        { y: 20, opacity: 0, duration: 0.6 },
193        "-=0.3"
194      );
195
196    // Bundle Offers
197    gsap
198      .timeline({
199        scrollTrigger: {
200          trigger: ".bundle-offers",
201          start: "top 99.99%",
202        },
203      })
204      .from(".bundle-header h2", { y: 40, opacity: 0, duration: 0.6 })
205      .from(".bundle-header p", { y: 20, opacity: 0, duration: 0.6 }, "-=0.3");
206
207    // Animate each bundle-offers card in the slick slider after Slick is initialized
208    var $bundleSlider = $('.bundle-offers');
209    function animateBundleOffersCards(firstLoad) {
210      let items = gsap.utils.toArray(".bundle-offers .slick-track > *");
211      if (firstLoad) {
212        let bundleOffersTl = gsap.timeline({
213          scrollTrigger: {
214            trigger: ".bundle-offers .slick-track",
215            start: "top 99.99%",
216          },
217        });
218        items.forEach(function (child, i) {
219          bundleOffersTl.fromTo(
220            child,
221            {
222              opacity: 0,
223            },
224            {
225              opacity: 1,
226              duration: 1,
227              ease: "easeInOut",
228            },
229            i * 0.15
230          );
231        });
232      }
233    }
234    if ($bundleSlider.length && typeof $bundleSlider.slick === 'function') {
235      $bundleSlider.on('init', function(event, slick) {
236        animateBundleOffersCards(true);
237      });
238      
239      if ($bundleSlider.hasClass('slick-initialized')) {
240        animateBundleOffersCards(true);
241      }
242    }
243
244    // Today's Shows
245    gsap
246      .timeline({
247        scrollTrigger: {
248          trigger: ".todays-shows",
249          start: "top 99.99%",
250        },
251      })
252      .from(".todays-shows .title h3", { y: 40, opacity: 0, duration: 0.6 })
253      .from(
254        ".todays-shows .title h5",
255        { y: 20, opacity: 0, duration: 0.6 },
256        "-=0.3"
257      );
258
259    // Animate each todays-shows card in the slick slider
260    let todaysShowsTl = gsap.timeline({
261      scrollTrigger: {
262        trigger: ".todays-shows .slick-track",
263        start: "top 99.99%",
264      },
265    });
266    gsap.utils
267      .toArray(".todays-shows .slick-track > *")
268      .forEach(function (child, i) {
269        todaysShowsTl.fromTo(
270          child,
271          {
272            opacity: 0,
273            scale: 0.5,
274          },
275          {
276            opacity: 1,
277            scale: 1,
278            duration: 0.3,
279            ease: "easeInOut",
280          },
281          i * 0.15
282        );
283      });
284
285    // Features
286    gsap
287      .timeline({
288        scrollTrigger: {
289          trigger: ".features",
290          start: "top 99.99%",
291        },
292      })
293      .from(".features .title h3", { y: 40, opacity: 0, duration: 0.6 })
294      .from(
295        ".features .title h5",
296        { y: 20, opacity: 0, duration: 0.6 },
297        "-=0.3"
298      );
299
300    // Animate each feature card in the slick slider
301    let featuresTl = gsap.timeline({
302      scrollTrigger: {
303        trigger: ".features .slick-track",
304        start: "top 99.99%",
305      },
306    });
307    gsap.utils
308      .toArray(".features .slick-track > *")
309      .forEach(function (child, i) {
310        featuresTl.fromTo(
311          child,
312          {
313            opacity: 0,
314            scale: 0.5,
315          },
316          {
317            opacity: 1,
318            scale: 1,
319            duration: 0.3,
320            ease: "easeInOut",
321          },
322          i * 0.15
323        );
324      });
325
326    // Top Features
327    gsap
328      .timeline({
329        scrollTrigger: {
330          trigger: ".top-features",
331          start: "top 99.99%",
332        },
333      })
334      .from(".top-features .title h3", { y: 40, opacity: 0, duration: 0.6 })
335      .from(
336        ".top-features .title h5",
337        { y: 20, opacity: 0, duration: 0.6 },
338        "-=0.3"
339      );
340
341    // Animate each top-feature card in the slick slider
342    let topFeaturesTl = gsap.timeline({
343      scrollTrigger: {
344        trigger: ".top-features .slick-track",
345        start: "top 99.99%",
346      },
347    });
348    gsap.utils
349      .toArray(".top-features .slick-track > *")
350      .forEach(function (child, i) {
351        topFeaturesTl.fromTo(
352          child,
353          {
354            opacity: 0,
355            scale: 0.5,
356          },
357          {
358            opacity: 1,
359            scale: 1,
360            duration: 0.3,
361            ease: "easeInOut",
362          },
363          i * 0.15
364        );
365      });
366    // Region Wonders Block
367    gsap
368      .timeline({
369        scrollTrigger: {
370          trigger: ".region-wonders-block",
371          start: "top 99.99%",
372        },
373      })
374      .fromTo(
375        ".region-wonders-block .image-content",
376        { y: -220, opacity: 0 },
377        { y: 0, opacity: 1, scale: 1, duration: 0.5, ease: "bounce" },
378        0.5
379      )
380      .fromTo(
381        ".region-wonders-block h4",
382        { y: 40, opacity: 0 },
383        { y: 0, opacity: 1, duration: 0.3 },
384        1
385      )
386      .fromTo(
387        ".region-wonders-block .wondered-link",
388        { y: 30, opacity: 0 },
389        { y: 0, opacity: 1, duration: 0.3, ease: "easeInOut" },
390        1.3
391      );
392
393    // Interactive Map Home Spacing
394    gsap
395      .timeline({
396        scrollTrigger: {
397          trigger: ".interactive-map.home-spacing",
398          start: "top 99.99%",
399        },
400      })
401      .fromTo(
402        ".interactive-map.home-spacing h3",
403        { y: 40, opacity: 0 },
404        { y: 0, opacity: 1, duration: 0.6 }
405      )
406      .fromTo(
407        ".interactive-map.home-spacing h5",
408        { y: 20, opacity: 0 },
409        { y: 0, opacity: 1, duration: 0.6 },
410        "-=0.3"
411      );
412
413    // Plan Your Visit
414    gsap.timeline({
415      scrollTrigger: {
416        trigger: ".plan-your-visit",
417        start: "top 99.99%",
418      },
419    });
420
421    // Animate each plan-your-visit card in the slick slider
422    let planVisitTl = gsap.timeline({
423      scrollTrigger: {
424        trigger: ".plan-your-visit .slider",
425        start: "top 99.99%",
426      },
427    });
428    gsap.utils
429      .toArray(".plan-your-visit .slider > *")
430      .forEach(function (child, i) {
431        planVisitTl.fromTo(
432          child,
433          {
434            opacity: 0,
435            scale: 0.5,
436          },
437          {
438            opacity: 1,
439            scale: 1,
440            duration: 0.3,
441            ease: "easeInOut",
442          },
443          i * 0.15
444        );
445      });
446
447    // VIP Exclusive
448    gsap.timeline({
449      scrollTrigger: {
450        trigger: ".vip-exclusive",
451        start: "top 99.99%",
452      },
453    });
454
455    // Animate each vip-exclusive card in the slick slider
456    let vipExclusiveTl = gsap.timeline({
457      scrollTrigger: {
458        trigger: ".vip-exclusive .slider",
459        start: "top 99.99%",
460      },
461    });
462    gsap.utils
463      .toArray(".vip-exclusive .slider > *")
464      .forEach(function (child, i) {
465        vipExclusiveTl.fromTo(
466          child,
467          {
468            opacity: 0,
469            scale: 0.5,
470          },
471          {
472            opacity: 1,
473            scale: 1,
474            duration: 0.3,
475            ease: "easeInOut",
476          },
477          i * 0.15
478        );
479      });
480
481    // Tripadvisor
482    gsap
483      .timeline({
484        scrollTrigger: {
485          trigger: ".tripadvisor",
486          start: "top 99.99%",
487        },
488      })
489      .from(".tripadvisor .content .left", {
490        x: -40,
491        opacity: 0,
492        duration: 0.7,
493      })
494      .from(
495        ".tripadvisor .content .right",
496        { x: 40, opacity: 0, duration: 0.7 },
497        "-=0.5"
498      );
499
500    // Client Testimonial
501    gsap
502      .timeline({
503        scrollTrigger: {
504          trigger: ".client-testimonial",
505          start: "top 99.99%",
506        },
507      })
508      .from(".client-testimonial .title h3", {
509        y: 40,
510        opacity: 0,
511        duration: 0.6,
512      })
513      .from(
514        ".client-testimonial .slider .list",
515        { y: 30, opacity: 0, duration: 0.5, stagger: 0.15 },
516        "-=0.3"
517      );
518
519    // Sponsors
520    gsap.timeline({
521      scrollTrigger: {
522        trigger: ".sponsors",
523        start: "top 99.99%",
524      },
525    });
526
527    // Animate each sponsors card in the slick slider
528    let sponsorsTl = gsap.timeline({
529      scrollTrigger: {
530        trigger: ".sponsors .slick-track",
531        start: "top 99.99%",
532      },
533    });
534    gsap.utils
535      .toArray(".sponsors .slick-track > *")
536      .forEach(function (child, i) {
537        sponsorsTl.fromTo(
538          child,
539          {
540            opacity: 0,
541            scale: 0.5,
542          },
543          {
544            opacity: 1,
545            scale: 1,
546            duration: 0.3,
547            ease: "easeInOut",
548          },
549          i * 0.15
550        );
551      });
552  }
553
554  document.addEventListener("DOMContentLoaded", function () {
555    animateHomepageSections();
556    // Animate buy-section nav-tabs
557    if ($(".buy-section .nav-tabs.buy-tabs").length) {
558      gsap.fromTo(
559        ".buy-section .nav-tabs.buy-tabs > *",
560        { opacity: 0, scale: 0.7 },
561        {
562          opacity: 1,
563          scale: 1,
564          duration: 0.5,
565          stagger: 0.15,
566          ease: "power2.out",
567        }
568      );
569    }
570
571    // Animate entry-ticket-gallery children in buy-section
572    animateChildrenOnLoad(
573      ".buy-section .tab-content .entry-ticket-content .buy-section-banner > *",
574      {
575        y: 0,
576        scaleFrom: 1,
577        opacity: 1,
578        duration: 0.3,
579        stagger: 0.15,
580        ease: "easeInOut",
581        delay: 0.5,
582      }
583    );
584    animateChildrenOnLoad(".checkout .checkout-content #progressbar > *", {
585      y: 0,
586      scaleFrom: 1,
587      opacity: 1,
588      duration: 0.3,
589      stagger: 0.15,
590      ease: "easeInOut",
591      delay: 0.2,
592    });
593    animateChildrenOnLoad(".inner-banner", {
594      y: 0,
595      scaleFrom: 1,
596      opacity: 1,
597      duration: 1,
598      stagger: 0.15,
599      ease: "easeInOut",
600      delay: 1,
601    });
602    animateChildrenOnLoad(".breadcrumb-section .container > * ", {
603      y: 0,
604      scaleFrom: 1,
605      opacity: 1,
606      duration: 0.5,
607      stagger: 0.15,
608      ease: "easeInOut",
609      delay: 1.8,
610    });
611    animateChildrenOnLoad(".about-content .container > * ", {
612      y: 0,
613      scaleFrom: 1,
614      opacity: 1,
615      duration: 1,
616      stagger: 0.15,
617      ease: "easeInOut",
618      delay: 2,
619    });
620    animateChildrenOnLoad(".starting-text p", {
621      y: 0,
622      scaleFrom: 1,
623      opacity: 1,
624      duration: 1,
625      stagger: 0.15,
626      ease: "easeInOut",
627      delay: 2,
628    });
629
630    animateStaggeredChildrenOnScroll(
631      ".buy-section .tab-content .entry-ticket-content .entry-ticket-gallery",
632      ".buy-section .tab-content .entry-ticket-content .entry-ticket-gallery > *",
633      {
634        y: 0,
635        scaleFrom: 1,
636        opacity: 1,
637        duration: 0.3,
638        stagger: 0.15,
639        ease: "easeInOut",
640        start: "top 99.99%",
641      }
642    );
643
644    // Animate dining-features three-thumbnails children
645    animateStaggeredChildrenOnScroll(
646      ".dining-features .three-thumbnails",
647      ".dining-features .three-thumbnails > *",
648      {
649        y: 0,
650        scaleFrom: 0.7,
651        opacity: 1,
652        duration: 0.3,
653        stagger: 0.15,
654        ease: "easeInOut",
655        start: "top 99.0%",
656        delay: 0.5,
657      }
658    );
659    animateStaggeredChildrenOnScroll(
660      ".our-highlights .four-thumbnails",
661      ".our-highlights .four-thumbnails > *",
662      {
663        y: 0,
664        scaleFrom: 0.7,
665        opacity: 1,
666        duration: 0.3,
667        stagger: 0.15,
668        ease: "easeInOut",
669        start: "top 99.0%",
670      }
671    );
672    animateStaggeredChildrenOnScroll(
673      ".all-outlets .views-infinite-scroll-content-wrapper",
674      ".all-outlets .views-infinite-scroll-content-wrapper > *",
675      {
676        y: 0,
677        scaleFrom: 0.7,
678        opacity: 1,
679        duration: 0.3,
680        stagger: 0.15,
681        ease: "easeInOut",
682        start: "top 99.0%",
683      }
684    );
685    animateStaggeredChildrenOnScroll(
686      ".our-highlights .view-content",
687      ".our-highlights .view-content > *",
688      {
689        y: 0,
690        scaleFrom: 0.7,
691        opacity: 1,
692        duration: 0.3,
693        stagger: 0.15,
694        ease: "easeInOut",
695        start: "top 99.0%",
696      }
697    );
698    animateStaggeredChildrenOnScroll(
699      ".our-outlets .pavilion-product-list",
700      ".our-outlets .pavilion-product-list > *",
701      {
702        y: 0,
703        scaleFrom: 0.7,
704        opacity: 1,
705        duration: 0.3,
706        stagger: 0.15,
707        ease: "easeInOut",
708        start: "top 99.99%",
709      }
710    );
711    animateStaggeredChildrenOnScroll(".contactus", ".contactus > *", {
712      y: 0,
713      scaleFrom: 1,
714      opacity: 1,
715      duration: 0.3,
716      stagger: 0.15,
717      ease: "easeInOut",
718      start: "top 99.99%",
719      delay: 2,
720    });
721
722    // Animate plan-your-visit
723    animateStaggeredChildrenOnScroll(
724      ".park-timing",
725      ".park-timing .container > *",
726      {
727        y: 0,
728        scaleFrom: 1,
729        opacity: 1,
730        duration: 0.3,
731        stagger: 0.15,
732        ease: "easeInOut",
733        start: "top 99.99%",
734      }
735    );
736    animateStaggeredChildrenOnScroll(
737      ".health-safety",
738      ".health-safety .container .row > *",
739      {
740        y: 0,
741        scaleFrom: 1,
742        opacity: 1,
743        duration: 0.3,
744        stagger: 0.15,
745        ease: "easeInOut",
746        start: "top 99.99%",
747      }
748    );
749    animateStaggeredChildrenOnScroll(
750      ".guest-service-section",
751      ".guest-service-section .container .guest-service-content > *",
752      {
753        y: 0,
754        scaleFrom: 1,
755        opacity: 1,
756        duration: 0.3,
757        stagger: 0.15,
758        ease: "easeInOut",
759        start: "top 99.99%",
760      }
761    );
762    animateStaggeredChildrenOnScroll(
763      ".special-offers",
764      ".special-offers .container > *",
765      {
766        y: 0,
767        scaleFrom: 1,
768        opacity: 1,
769        duration: 0.3,
770        stagger: 0.15,
771        ease: "easeInOut",
772        start: "top 99.99%",
773      }
774    );
775    animateStaggeredChildrenOnScroll(
776      ".howto-reach",
777      ".howto-reach .container > *",
778      {
779        y: 0,
780        scaleFrom: 1,
781        opacity: 1,
782        duration: 0.3,
783        stagger: 0.15,
784        ease: "easeInOut",
785        start: "top 99.99%",
786      }
787    );
788    animateStaggeredChildrenOnScroll(
789      ".fellow-guest",
790      ".fellow-guest .container .slick-track > *",
791      {
792        y: 0,
793        scaleFrom: 0.7,
794        opacity: 1,
795        duration: 0.3,
796        stagger: 0.15,
797        ease: "easeInOut",
798        start: "top 99.99%",
799      }
800    );
801
802    //animate show-and-events
803    animateStaggeredChildrenOnScroll(
804      ".gallery",
805      ".gallery .product-gallery > *",
806      {
807        y: 0,
808        scaleFrom: 0.7,
809        opacity: 1,
810        duration: 0.3,
811        stagger: 0.15,
812        ease: "easeInOut",
813        start: "top 99.99%",
814      }
815    );
816
817    // Animate leftside/rightside slide-in for each list
818    gsap.utils.toArray(".imageoverly-content .list").forEach(function (listEl) {
819      var left = listEl.querySelector(".leftside");
820      var right = listEl.querySelector(".rightside");
821      if (left) {
822        gsap.from(left, {
823          x: -100,
824          opacity: 0,
825          duration: 0.7,
826          ease: "power3.out",
827          clearProps: "all",
828          scrollTrigger: {
829            trigger: listEl,
830            start: "top 99.99%",
831            toggleActions: "play none none none",
832          },
833        });
834      }
835      if (right) {
836        gsap.from(right, {
837          x: 100,
838          duration: 0.7,
839          opacity: 0,
840          ease: "power3.out",
841          clearProps: "all",
842          scrollTrigger: {
843            trigger: listEl,
844            start: "top 99.99%",
845            toggleActions: "play none none none",
846          },
847        });
848      }
849    });
850
851    // Animate carnaval-feature children
852   animateChildrenOnLoad(".carnaval-logo",
853      {
854        y: -600, 
855        scaleFrom: 3,
856        opacity: 1,
857        duration: 0.8,
858        stagger: 0.15,
859        ease: "bounce",
860        delay: 0.5,
861      }
862    );
863    animateStaggeredChildrenOnScroll(
864      ".carnaval-feature .view-content",
865      ".carnaval-feature .view-content > *",
866      {
867        y: 0,
868        scaleFrom: 0.7,
869        opacity: 1,
870        duration: 0.3,
871        stagger: 0.15,
872        ease: "easeInOut",
873        start: "top 99.99%",
874      }
875    );
876  });
877
878  // Returns the jQuery object for the active tab pane in .buy-section
879  function getActiveTabPane() {
880    return $(".buy-section .tab-pane.active");
881  }
882
883  // Get active tab pane after tab is shown
884  $('.buy-section .nav-tabs.buy-tabs [data-toggle="tab"]').on(
885    "shown.bs.tab",
886    function () {
887      var $activePane = getActiveTabPane();
888
889      // Animate entry-ticket-gallery children in entry_ticket tab
890
891      animateStaggeredChildrenOnScroll(
892        ".buy-section .tab-content .tab-pane#park-entry.active .entry-ticket-gallery",
893        ".buy-section .tab-content .tab-pane#park-entry.active .entry-ticket-gallery > *",
894        {
895          y: 0,
896          scaleFrom: 1,
897          opacity: 1,
898          duration: 0.3,
899          stagger: 0.15,
900          ease: "easeInOut",
901          start: "top 99.99%",
902        }
903      );
904
905      // Animate new-attraction-tab listing children in buy-section (fixed selector)
906      animateStaggeredChildrenOnScroll(
907        ".buy-section .tab-content .tab-pane.new-attraction-tab.active .attraction-content .buy-section-banner",
908        ".buy-section .tab-content .tab-pane.new-attraction-tab.active .attraction-content .buy-section-banner > *",
909        {
910          y: 0,
911          scaleFrom: 1,
912          opacity: 1,
913          duration: 0.3,
914          stagger: 0.15,
915          ease: "easeInOut",
916          start: "top 99.99%",
917        }
918      );
919
920      animateStaggeredChildrenOnScroll(
921        ".buy-section .tab-content .tab-pane.new-attraction-tab.active .attraction-content .listing",
922        ".buy-section .tab-content .tab-pane.new-attraction-tab.active .attraction-content .listing > *",
923        {
924          y: 0,
925          scaleFrom: 1,
926          opacity: 1,
927          duration: 0.3,
928          stagger: 0.15,
929          ease: "easeInOut",
930          start: "top 99.99%",
931        }
932      );
933
934      // Animate wonderpass tab listing children
935      animateStaggeredChildrenOnScroll(
936        ".buy-section .tab-content .tab-pane#wonderpass.active .attraction-content .listing",
937        ".buy-section .tab-content .tab-pane#wonderpass.active .attraction-content .listing > *",
938        {
939          y: 0,
940          scaleFrom: 1,
941          opacity: 1,
942          duration: 0.3,
943          stagger: 0.15,
944          ease: "easeInOut",
945          start: "top 99.99%",
946        }
947      );
948
949      // Animate special-offers tab
950      animateStaggeredChildrenOnScroll(
951        ".buy-section .tab-content .tab-pane#special-offers.active .special_offer-list",
952        ".buy-section .tab-content .tab-pane#special-offers.active .special_offer-list .views-element-container .view-exclusive-offers .view-content > *",
953        {
954          y: 0,
955          scaleFrom: 1,
956          opacity: 1,
957          duration: 0.3,
958          stagger: 0.15,
959          ease: "easeInOut",
960          start: "top 99.99%",
961        }
962      );
963
964      // Animate exclusive-packs tab
965      animateStaggeredChildrenOnScroll(
966        ".buy-section .tab-content .tab-pane#exclusive-packs.active .exclusive-packs",
967        ".buy-section .tab-content .tab-pane#exclusive-packs.active .exclusive-packs > *",
968        {
969          y: 0,
970          scaleFrom: 1,
971          opacity: 1,
972          duration: 0.3,
973          stagger: 0.15,
974          ease: "easeInOut",
975          start: "top 99.99%",
976        }
977      );
978
979      // Animate guest-services tab
980      animateStaggeredChildrenOnScroll(
981        ".buy-section .tab-content .tab-pane#guest-services.active .guest-service-content",
982        ".buy-section .tab-content .tab-pane#guest-services.active .guest-service-content > *",
983        {
984          y: 0,
985          scaleFrom: 1,
986          opacity: 1,
987          duration: 0.3,
988          stagger: 0.15,
989          ease: "easeInOut",
990          start: "top 99.99%",
991        }
992      );
993
994      // Animate parking tab
995      animateStaggeredChildrenOnScroll(
996        ".buy-section .tab-content .tab-pane#parking.active .parking-content",
997        ".buy-section .tab-content .tab-pane#parking.active .parking-content > *",
998        {
999          y: 0,
1000          scaleFrom: 1,
1001          opacity: 1,
1002          duration: 0.3,
1003          stagger: 0.15,
1004          ease: "easeInOut",
1005          start: "top 99.99%",
1006        }
1007      );
1008    }
1009  );
1010})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.