update redirect page
This commit is contained in:
@ -1 +1,234 @@
|
||||
<span>Hello Page About Us</span>
|
||||
<section class="con section about-section">
|
||||
<div class="r a-i-center">
|
||||
<div class="c-12 c-l-6">
|
||||
<div class="about-image-box mr-0 mr-x-5">
|
||||
<div class="about-image1 d-n d-x-b">
|
||||
<img class="w-100" src="/images/1000/about-section/cargoload.png" alt="">
|
||||
</div>
|
||||
<img class="w-100" src="/images/1000/about-section/cusser.png" alt="">
|
||||
<div class="experience">
|
||||
<h1 class="mb-3">30+</h1>
|
||||
<p>We have more than years of experience</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="c-12 c-l-6 block-about">
|
||||
|
||||
<span class="sub-title">About Our Company</span>
|
||||
|
||||
<h2 class="title mb-3">Trusted Logistic Service Provider</h2>
|
||||
|
||||
<ul class="order-list mb-4">
|
||||
<li class="d-f a-i-center"><i class="atg atg-radiobutton a-2x"></i> revolutionary catalysts for chang</li>
|
||||
<li class="d-f a-i-center"><i class="atg atg-radiobutton a-2x"></i>catalysts for chang the Seamlessly</li>
|
||||
<li class="d-f a-i-center"><i class="atg atg-radiobutton a-2x"></i>business applications through</li>
|
||||
<li class="d-f a-i-center"><i class="atg atg-radiobutton a-2x"></i>procedures whereas processes</li>
|
||||
</ul>
|
||||
|
||||
<p class="desc mb-4">Distinctively exploit optimal alignments for intuitive business applications through revolutionary catalysts for chang the Seamlessly optimal optimal alignments for intuitive.</p>
|
||||
|
||||
<div class="d-f a-i-center mt-4">
|
||||
|
||||
<button class="btn btn-primary mr-5">Read More</button>
|
||||
|
||||
<div class="signature">
|
||||
<img decoding="async" src="https://shtheme.org/demosd/logistek/wp-content/uploads/2021/04/signature.png" alt="">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<section class="con-parallax con-perf-section">
|
||||
<div class="bg-wrapper parallax" data-dept="0.4">
|
||||
<img src="/images/1000/passenger-planes.jpg" alt="Background" class="bg-img">
|
||||
</div>
|
||||
<div class="con section perf-section section-break" data-content>
|
||||
<div class="r">
|
||||
<div class="r-n-g">
|
||||
<div class="c-6 c-l-3">
|
||||
<div class="d-f f-c a-i-center grid">
|
||||
<div class="icon-wrap d-f j-c-center a-i-center">
|
||||
<i class="atg a-8x atg-air-cargo"></i>
|
||||
</div>
|
||||
<span>Cargo Tonnage</span>
|
||||
<h1 CountNumber prefix="+" num-max="100000" num-min="1">0</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="c-6 c-l-3">
|
||||
<div class="d-f f-c a-i-center grid">
|
||||
<div class="icon-wrap d-f j-c-center a-i-center">
|
||||
<i class="atg a-8x atg-client"></i>
|
||||
</div>
|
||||
<span>
|
||||
Satisfied Clients
|
||||
</span>
|
||||
<h1 CountNumber prefix="+" num-max="1000" num-min="1">+0</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="c-6 c-l-3">
|
||||
<div class="d-f f-c a-i-center grid">
|
||||
<div class="icon-wrap d-f j-c-center a-i-center">
|
||||
<i class="atg a-8x atg-ticket-air-thin"></i>
|
||||
</div>
|
||||
<span>
|
||||
Ticket Sales
|
||||
</span>
|
||||
<h1 CountNumber num-max="20000" num-min="1">0</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="c-6 c-l-3">
|
||||
<div class="d-f f-c a-i-center grid">
|
||||
<div class="icon-wrap d-f j-c-center a-i-center">
|
||||
<i class="atg a-8x atg-revenue"></i>
|
||||
</div>
|
||||
<span>
|
||||
Annual Revenue
|
||||
</span>
|
||||
<h1 CountNumber prefix="$" num-max="10000000" num-min="1">$0</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="con section blog-section">
|
||||
<div class="r j-c-center">
|
||||
<div class="d-f f-c a-i-center">
|
||||
<div class="sub-title">Blog Post</div>
|
||||
<h2 class="title">Our Latest Blog Post</h2>
|
||||
<div class="container">
|
||||
<div class="line"></div>
|
||||
<span class="dot dot1"></span>
|
||||
<span class="dot dot2"></span>
|
||||
<span class="dot dot3"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="r j-c-center">
|
||||
<div class="r-n-g">
|
||||
<div class="c-12">
|
||||
<div class="swiper ourBlogSwiper1">
|
||||
<div class="swiper-wrapper a-i-center">
|
||||
<div class="swiper-slide">
|
||||
<div class="grid">
|
||||
<a class="grid-image">
|
||||
<img loading="lazy" src="/images/1000/blog-section/introduction-to-air-cargo-operation.jpg" class="img-fluid wp-post-image" alt="">
|
||||
</a>
|
||||
<div class="grid-body d-f f-c">
|
||||
<div class="blog-author d-f a-i-center">
|
||||
<div class="blog-author-img mr-10">
|
||||
<img alt="" src="https://secure.gravatar.com/avatar/187861c59f0bf60f2604ab92e2d7f0c53dbb26b9e5ef2bbb31fcc900eba2bbca?s=96&d=mm&r=g">
|
||||
</div>
|
||||
<div class="d-f blog-author-content"><span>By</span> <a class="ml-1" href="">Admin</a></div>
|
||||
</div>
|
||||
<span class="sub-title">Logistics</span>
|
||||
<h3 class="title">
|
||||
<a href="">5 Ways To Get The Most Out Of Your Logistics</a>
|
||||
</h3>
|
||||
<div class="d-f j-c-between a-i-center">
|
||||
<div class="blog-meta d-f a-i-center">
|
||||
<i class="atg atg-calendar-1 a-2x mr-1"></i><span>Oct 13, 2021</span>
|
||||
</div>
|
||||
<div class="blog-meta">
|
||||
<a href="" class="d-f a-i-center"><i class="atg atg-message a-2x mr-1"></i> <span>0</span></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-slide">
|
||||
<div class="grid">
|
||||
<a class="grid-image">
|
||||
<img loading="lazy" src="/images/1000/blog-section/seaport.jpg" class="img-fluid wp-post-image" alt="">
|
||||
</a>
|
||||
<div class="grid-body d-f f-c">
|
||||
<div class="blog-author d-f a-i-center">
|
||||
<div class="blog-author-img mr-10">
|
||||
<img alt="" src="https://secure.gravatar.com/avatar/187861c59f0bf60f2604ab92e2d7f0c53dbb26b9e5ef2bbb31fcc900eba2bbca?s=96&d=mm&r=g">
|
||||
</div>
|
||||
<div class="d-f blog-author-content"><span>By</span> <a class="ml-1" href="">Admin</a></div>
|
||||
</div>
|
||||
<span class="sub-title">Logistics</span>
|
||||
<h3 class="title">
|
||||
<a href="">The Top 5 Changes That Occur With AI in Logistics</a>
|
||||
</h3>
|
||||
<div class="d-f j-c-between a-i-center">
|
||||
<div class="blog-meta d-f a-i-center">
|
||||
<i class="atg atg-calendar-1 a-2x mr-1"></i><span>Oct 13, 2021</span>
|
||||
</div>
|
||||
<div class="blog-meta">
|
||||
<a href="" class="d-f a-i-center"><i class="atg atg-message a-2x mr-1"></i> <span>0</span></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-slide">
|
||||
<div class="grid">
|
||||
<a class="grid-image">
|
||||
<img loading="lazy" src="/images/1000/blog-section/introduction-to-air-cargo-operation.jpg" class="img-fluid wp-post-image" alt="">
|
||||
</a>
|
||||
<div class="grid-body d-f f-c">
|
||||
<div class="blog-author d-f a-i-center">
|
||||
<div class="blog-author-img mr-10">
|
||||
<img alt="" src="https://secure.gravatar.com/avatar/187861c59f0bf60f2604ab92e2d7f0c53dbb26b9e5ef2bbb31fcc900eba2bbca?s=96&d=mm&r=g">
|
||||
</div>
|
||||
<div class="d-f blog-author-content"><span>By</span> <a class="ml-1" href="">Admin</a></div>
|
||||
</div>
|
||||
<span class="sub-title">Logistics</span>
|
||||
<h3 class="title">
|
||||
<a href="">5 Ways To Get The Most Out Of Your Logistics</a>
|
||||
</h3>
|
||||
<div class="d-f j-c-between a-i-center">
|
||||
<div class="blog-meta d-f a-i-center">
|
||||
<i class="atg atg-calendar-1 a-2x mr-1"></i><span>Oct 13, 2021</span>
|
||||
</div>
|
||||
<div class="blog-meta">
|
||||
<a href="" class="d-f a-i-center"><i class="atg atg-message a-2x mr-1"></i> <span>0</span></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-slide">
|
||||
<div class="grid">
|
||||
<a class="grid-image">
|
||||
<img loading="lazy" src="/images/1000/blog-section/obooks-for-logistics.png" class="img-fluid wp-post-image" alt="">
|
||||
</a>
|
||||
<div class="grid-body d-f f-c">
|
||||
<div class="blog-author d-f a-i-center">
|
||||
<div class="blog-author-img mr-10">
|
||||
<img alt="" src="https://secure.gravatar.com/avatar/187861c59f0bf60f2604ab92e2d7f0c53dbb26b9e5ef2bbb31fcc900eba2bbca?s=96&d=mm&r=g">
|
||||
</div>
|
||||
<div class="d-f blog-author-content"><span>By</span> <a class="ml-1" href="">Admin</a></div>
|
||||
</div>
|
||||
<span class="sub-title">Logistics</span>
|
||||
<h3 class="title">
|
||||
<a href="">Supply Chain And Logistics Trends That Could Be Big</a>
|
||||
</h3>
|
||||
<div class="d-f j-c-between a-i-center">
|
||||
<div class="blog-meta d-f a-i-center">
|
||||
<i class="atg atg-calendar-1 a-2x mr-1"></i><span>Oct 13, 2021</span>
|
||||
</div>
|
||||
<div class="blog-meta">
|
||||
<a href="" class="d-f a-i-center"><i class="atg atg-message a-2x mr-1"></i> <span>0</span></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="swiper-button-prev" aria-label="previous"></div>
|
||||
<div class="swiper-button-next" aria-label="next"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@ -1 +1,64 @@
|
||||
<span>Hello Page Our Team</span>
|
||||
<div class="con-masthead">
|
||||
<video class="bg-video" playsinline="playsinline" autoplay="autoplay" muted="muted" loop="loop"><source src="/images/wait-section/bg.mp4" type="video/mp4" /></video>
|
||||
<!-- Masthead-->
|
||||
|
||||
<div class="masthead">
|
||||
<div class="cfull">
|
||||
<div class="r">
|
||||
<div class="c-12">
|
||||
<div class="masthead-content ">
|
||||
<div class="cfull px-4 px-lg-0">
|
||||
<h2 class="fst-italic lh-1 mb-4">We’re creating content for this section</h2>
|
||||
<p class="mb-5">
|
||||
Content for the provincial pages is being prepared and will be updated soon. Please leave your email to receive updates and be notified when it goes live.
|
||||
</p>
|
||||
<!-- * * * * * * * * * * * * * * *-->
|
||||
<!-- * * SB Forms Contact Form * *-->
|
||||
<!-- * * * * * * * * * * * * * * *-->
|
||||
<!-- This form is pre-integrated with SB Forms.-->
|
||||
<!-- To make this form functional, sign up at-->
|
||||
<!-- https://startbootstrap.com/solution/contact-forms-->
|
||||
<!-- to get an API token!-->
|
||||
<form id="contactForm" data-sb-form-api-token="API_TOKEN">
|
||||
<!-- Email address input-->
|
||||
<div class="d-f input-group-newsletter">
|
||||
<div class="c"><input class="form-control h-100" id="email" type="email" placeholder="Enter email address..." aria-label="Enter email address..." data-sb-validations="required,email" /></div>
|
||||
<div class="c-a"><button class="btn btn-primary disabled ml-2 h-100" id="submitButton" type="submit">Notify Me!</button></div>
|
||||
</div>
|
||||
<div class="invalid-feedback mt-2 d-n" data-sb-feedback="email:required">An email is required.</div>
|
||||
<div class="invalid-feedback mt-2 d-n" data-sb-feedback="email:email">Email is not valid.</div>
|
||||
<!-- Submit success message-->
|
||||
<!---->
|
||||
<!-- This is what your users will see when the form-->
|
||||
<!-- has successfully submitted-->
|
||||
<div class="d-n" id="submitSuccessMessage">
|
||||
<div class="text-center mb-3 mt-2">
|
||||
<div class="fw-bolder">Form submission successful!</div>
|
||||
To activate this form, sign up at
|
||||
<br />
|
||||
<a href="https://startbootstrap.com/solution/contact-forms">https://startbootstrap.com/solution/contact-forms</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Submit error message-->
|
||||
<!---->
|
||||
<!-- This is what your users will see when there is-->
|
||||
<!-- an error submitting the form-->
|
||||
<div class="d-n" id="submitErrorMessage"><div class="text-center text-danger mb-3 mt-2">Error sending message!</div></div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- Social Icons-->
|
||||
<!-- For more icon options, visit https://fontawesome.com/icons?d=gallery&p=2&s=brands-->
|
||||
<div class="social-icons">
|
||||
<div class="d-f f-r f-l-c j-c-center a-i-center h-100 mt-3 mt-l-0">
|
||||
<a class="btn btn-primary m-3" href="#!"><i class="atg a-2x atg-facebook"></i></a>
|
||||
<a class="btn btn-primary m-3" href="#!"><i class="atg a-2x atg-circle-yt"></i></a>
|
||||
<a class="btn btn-primary m-3" href="#!"><i class="atg a-2x atg-circle-tiktok"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
64
TWA-App/Data/page/2003.html
Normal file
64
TWA-App/Data/page/2003.html
Normal file
@ -0,0 +1,64 @@
|
||||
<div class="con-masthead">
|
||||
<video class="bg-video" playsinline="playsinline" autoplay="autoplay" muted="muted" loop="loop"><source src="/images/wait-section/bg.mp4" type="video/mp4" /></video>
|
||||
<!-- Masthead-->
|
||||
|
||||
<div class="masthead">
|
||||
<div class="cfull">
|
||||
<div class="r">
|
||||
<div class="c-12">
|
||||
<div class="masthead-content ">
|
||||
<div class="cfull px-4 px-lg-0">
|
||||
<h2 class="fst-italic lh-1 mb-4">We’re creating content for this section</h2>
|
||||
<p class="mb-5">
|
||||
Content for the provincial pages is being prepared and will be updated soon. Please leave your email to receive updates and be notified when it goes live.
|
||||
</p>
|
||||
<!-- * * * * * * * * * * * * * * *-->
|
||||
<!-- * * SB Forms Contact Form * *-->
|
||||
<!-- * * * * * * * * * * * * * * *-->
|
||||
<!-- This form is pre-integrated with SB Forms.-->
|
||||
<!-- To make this form functional, sign up at-->
|
||||
<!-- https://startbootstrap.com/solution/contact-forms-->
|
||||
<!-- to get an API token!-->
|
||||
<form id="contactForm" data-sb-form-api-token="API_TOKEN">
|
||||
<!-- Email address input-->
|
||||
<div class="d-f input-group-newsletter">
|
||||
<div class="c"><input class="form-control h-100" id="email" type="email" placeholder="Enter email address..." aria-label="Enter email address..." data-sb-validations="required,email" /></div>
|
||||
<div class="c-a"><button class="btn btn-primary disabled ml-2 h-100" id="submitButton" type="submit">Notify Me!</button></div>
|
||||
</div>
|
||||
<div class="invalid-feedback mt-2 d-n" data-sb-feedback="email:required">An email is required.</div>
|
||||
<div class="invalid-feedback mt-2 d-n" data-sb-feedback="email:email">Email is not valid.</div>
|
||||
<!-- Submit success message-->
|
||||
<!---->
|
||||
<!-- This is what your users will see when the form-->
|
||||
<!-- has successfully submitted-->
|
||||
<div class="d-n" id="submitSuccessMessage">
|
||||
<div class="text-center mb-3 mt-2">
|
||||
<div class="fw-bolder">Form submission successful!</div>
|
||||
To activate this form, sign up at
|
||||
<br />
|
||||
<a href="https://startbootstrap.com/solution/contact-forms">https://startbootstrap.com/solution/contact-forms</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Submit error message-->
|
||||
<!---->
|
||||
<!-- This is what your users will see when there is-->
|
||||
<!-- an error submitting the form-->
|
||||
<div class="d-n" id="submitErrorMessage"><div class="text-center text-danger mb-3 mt-2">Error sending message!</div></div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- Social Icons-->
|
||||
<!-- For more icon options, visit https://fontawesome.com/icons?d=gallery&p=2&s=brands-->
|
||||
<div class="social-icons">
|
||||
<div class="d-f f-r f-l-c j-c-center a-i-center h-100 mt-3 mt-l-0">
|
||||
<a class="btn btn-primary m-3" href="#!"><i class="atg a-2x atg-facebook"></i></a>
|
||||
<a class="btn btn-primary m-3" href="#!"><i class="atg a-2x atg-circle-yt"></i></a>
|
||||
<a class="btn btn-primary m-3" href="#!"><i class="atg a-2x atg-circle-tiktok"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
64
TWA-App/Data/page/2004.html
Normal file
64
TWA-App/Data/page/2004.html
Normal file
@ -0,0 +1,64 @@
|
||||
<div class="con-masthead">
|
||||
<video class="bg-video" playsinline="playsinline" autoplay="autoplay" muted="muted" loop="loop"><source src="/images/wait-section/bg.mp4" type="video/mp4" /></video>
|
||||
<!-- Masthead-->
|
||||
|
||||
<div class="masthead">
|
||||
<div class="cfull">
|
||||
<div class="r">
|
||||
<div class="c-12">
|
||||
<div class="masthead-content ">
|
||||
<div class="cfull px-4 px-lg-0">
|
||||
<h2 class="fst-italic lh-1 mb-4">We’re creating content for this section</h2>
|
||||
<p class="mb-5">
|
||||
Content for the provincial pages is being prepared and will be updated soon. Please leave your email to receive updates and be notified when it goes live.
|
||||
</p>
|
||||
<!-- * * * * * * * * * * * * * * *-->
|
||||
<!-- * * SB Forms Contact Form * *-->
|
||||
<!-- * * * * * * * * * * * * * * *-->
|
||||
<!-- This form is pre-integrated with SB Forms.-->
|
||||
<!-- To make this form functional, sign up at-->
|
||||
<!-- https://startbootstrap.com/solution/contact-forms-->
|
||||
<!-- to get an API token!-->
|
||||
<form id="contactForm" data-sb-form-api-token="API_TOKEN">
|
||||
<!-- Email address input-->
|
||||
<div class="d-f input-group-newsletter">
|
||||
<div class="c"><input class="form-control h-100" id="email" type="email" placeholder="Enter email address..." aria-label="Enter email address..." data-sb-validations="required,email" /></div>
|
||||
<div class="c-a"><button class="btn btn-primary disabled ml-2 h-100" id="submitButton" type="submit">Notify Me!</button></div>
|
||||
</div>
|
||||
<div class="invalid-feedback mt-2 d-n" data-sb-feedback="email:required">An email is required.</div>
|
||||
<div class="invalid-feedback mt-2 d-n" data-sb-feedback="email:email">Email is not valid.</div>
|
||||
<!-- Submit success message-->
|
||||
<!---->
|
||||
<!-- This is what your users will see when the form-->
|
||||
<!-- has successfully submitted-->
|
||||
<div class="d-n" id="submitSuccessMessage">
|
||||
<div class="text-center mb-3 mt-2">
|
||||
<div class="fw-bolder">Form submission successful!</div>
|
||||
To activate this form, sign up at
|
||||
<br />
|
||||
<a href="https://startbootstrap.com/solution/contact-forms">https://startbootstrap.com/solution/contact-forms</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Submit error message-->
|
||||
<!---->
|
||||
<!-- This is what your users will see when there is-->
|
||||
<!-- an error submitting the form-->
|
||||
<div class="d-n" id="submitErrorMessage"><div class="text-center text-danger mb-3 mt-2">Error sending message!</div></div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- Social Icons-->
|
||||
<!-- For more icon options, visit https://fontawesome.com/icons?d=gallery&p=2&s=brands-->
|
||||
<div class="social-icons">
|
||||
<div class="d-f f-r f-l-c j-c-center a-i-center h-100 mt-3 mt-l-0">
|
||||
<a class="btn btn-primary m-3" href="#!"><i class="atg a-2x atg-facebook"></i></a>
|
||||
<a class="btn btn-primary m-3" href="#!"><i class="atg a-2x atg-circle-yt"></i></a>
|
||||
<a class="btn btn-primary m-3" href="#!"><i class="atg a-2x atg-circle-tiktok"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
64
TWA-App/Data/page/2005.html
Normal file
64
TWA-App/Data/page/2005.html
Normal file
@ -0,0 +1,64 @@
|
||||
<div class="con-masthead">
|
||||
<video class="bg-video" playsinline="playsinline" autoplay="autoplay" muted="muted" loop="loop"><source src="/images/wait-section/bg.mp4" type="video/mp4" /></video>
|
||||
<!-- Masthead-->
|
||||
|
||||
<div class="masthead">
|
||||
<div class="cfull">
|
||||
<div class="r">
|
||||
<div class="c-12">
|
||||
<div class="masthead-content ">
|
||||
<div class="cfull px-4 px-lg-0">
|
||||
<h2 class="fst-italic lh-1 mb-4">We’re creating content for this section</h2>
|
||||
<p class="mb-5">
|
||||
Content for the provincial pages is being prepared and will be updated soon. Please leave your email to receive updates and be notified when it goes live.
|
||||
</p>
|
||||
<!-- * * * * * * * * * * * * * * *-->
|
||||
<!-- * * SB Forms Contact Form * *-->
|
||||
<!-- * * * * * * * * * * * * * * *-->
|
||||
<!-- This form is pre-integrated with SB Forms.-->
|
||||
<!-- To make this form functional, sign up at-->
|
||||
<!-- https://startbootstrap.com/solution/contact-forms-->
|
||||
<!-- to get an API token!-->
|
||||
<form id="contactForm" data-sb-form-api-token="API_TOKEN">
|
||||
<!-- Email address input-->
|
||||
<div class="d-f input-group-newsletter">
|
||||
<div class="c"><input class="form-control h-100" id="email" type="email" placeholder="Enter email address..." aria-label="Enter email address..." data-sb-validations="required,email" /></div>
|
||||
<div class="c-a"><button class="btn btn-primary disabled ml-2 h-100" id="submitButton" type="submit">Notify Me!</button></div>
|
||||
</div>
|
||||
<div class="invalid-feedback mt-2 d-n" data-sb-feedback="email:required">An email is required.</div>
|
||||
<div class="invalid-feedback mt-2 d-n" data-sb-feedback="email:email">Email is not valid.</div>
|
||||
<!-- Submit success message-->
|
||||
<!---->
|
||||
<!-- This is what your users will see when the form-->
|
||||
<!-- has successfully submitted-->
|
||||
<div class="d-n" id="submitSuccessMessage">
|
||||
<div class="text-center mb-3 mt-2">
|
||||
<div class="fw-bolder">Form submission successful!</div>
|
||||
To activate this form, sign up at
|
||||
<br />
|
||||
<a href="https://startbootstrap.com/solution/contact-forms">https://startbootstrap.com/solution/contact-forms</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Submit error message-->
|
||||
<!---->
|
||||
<!-- This is what your users will see when there is-->
|
||||
<!-- an error submitting the form-->
|
||||
<div class="d-n" id="submitErrorMessage"><div class="text-center text-danger mb-3 mt-2">Error sending message!</div></div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- Social Icons-->
|
||||
<!-- For more icon options, visit https://fontawesome.com/icons?d=gallery&p=2&s=brands-->
|
||||
<div class="social-icons">
|
||||
<div class="d-f f-r f-l-c j-c-center a-i-center h-100 mt-3 mt-l-0">
|
||||
<a class="btn btn-primary m-3" href="#!"><i class="atg a-2x atg-facebook"></i></a>
|
||||
<a class="btn btn-primary m-3" href="#!"><i class="atg a-2x atg-circle-yt"></i></a>
|
||||
<a class="btn btn-primary m-3" href="#!"><i class="atg a-2x atg-circle-tiktok"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -23,6 +23,19 @@
|
||||
<None Update="Data\page\2002.html">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Data\page\2003.html">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Data\page\2004.html">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Data\page\2005.html">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="wwwroot\images\wait-section\" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@ -1,5 +1,17 @@
|
||||
@Html.Raw(ViewBag.Content)
|
||||
<section class="con-parallax con-page-section">
|
||||
<div class="bg-wrapper parallax" data-dept="0.1">
|
||||
<img src="https://morz.vamtam.com/wp-content/uploads/2018/01/Shop-2.jpg" alt="Background" class="bg-img">
|
||||
</div>
|
||||
<div class="con section page-section section-break" data-content>
|
||||
<div class="r">
|
||||
<h1 class="title">@ViewData["Title"]</h1>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@Html.Raw(ViewBag.Content)
|
||||
|
||||
@section jsLib {
|
||||
<script src="@Url.AbsoluteContent("~/js/ext_libs/swiper-bundle.min.js")" js-lib></script>
|
||||
<script type="module" src="@Url.AbsoluteContent("~/js/js-page/2000.js")" js-lib></script>
|
||||
<script type="module" src="@Url.AbsoluteContent("~/js/js-page/" + ViewData["PageID"] + ".js")" js-lib></script>
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@ -398,4 +398,8 @@
|
||||
|
||||
.atg-mess-question1:before {
|
||||
content: '\a054'
|
||||
}
|
||||
|
||||
.atg-solid-star:before{
|
||||
content: '\a055'
|
||||
}
|
||||
@ -2652,8 +2652,7 @@ h3 {
|
||||
transition: width .3s ease-in;
|
||||
left: 0;
|
||||
top: 0;
|
||||
height: 2px;
|
||||
background: var(--primary)
|
||||
height: 2px
|
||||
}
|
||||
|
||||
.ico-menu div:first-child {
|
||||
|
||||
@ -56,6 +56,7 @@
|
||||
}
|
||||
|
||||
.f-header {
|
||||
z-index: 10000;
|
||||
top: -65px
|
||||
}
|
||||
|
||||
@ -71,13 +72,10 @@
|
||||
background-color: var(--text-color-dark) !important
|
||||
}
|
||||
|
||||
.f-header.show.ios{
|
||||
position: absolute;
|
||||
.f-header.ios{
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
.rSlider{
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6, h7, p, span, div {
|
||||
user-select: none; /* Ngăn không cho bôi đen copy text */
|
||||
@ -114,8 +112,13 @@ a {
|
||||
position: relative;
|
||||
text-decoration: none;
|
||||
color:inherit;
|
||||
cursor: pointer
|
||||
cursor: pointer !important
|
||||
}
|
||||
|
||||
a * {
|
||||
cursor: pointer !important
|
||||
}
|
||||
|
||||
body {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale; /* For Firefox on macOS */
|
||||
@ -239,7 +242,7 @@ body[page="1000"] .hblock1 {
|
||||
transition: color .3s ease-in-out
|
||||
}
|
||||
|
||||
body[page="1000"] .navmain .nav-item:hover, body[page="1000"] .navmain .nav-item.active, body[page="1000"] .navmain [data-dropdown].active .nav-item, .f-header .navmain .nav-item:hover, .f-header .navmain .nav-item.active, .f-header .navmain [data-dropdown].active .nav-item {
|
||||
body[page="1000"] #header .navmain .nav-item:hover, body[page="1000"] #header .navmain .nav-item.active, body[page="1000"] #header .navmain [data-dropdown].active .nav-item, .f-header .navmain .nav-item:hover, .f-header .navmain .nav-item.active, .f-header .navmain [data-dropdown].active .nav-item {
|
||||
color: var(--text-color-lW1)
|
||||
}
|
||||
|
||||
@ -268,12 +271,6 @@ body[page="1000"] .navmain .nav-item:hover, body[page="1000"] .navmain .nav-item
|
||||
border-bottom: 1px solid var(--border-color-2)
|
||||
}
|
||||
|
||||
.m-header .nav-mainmenu [data-dropdown] .sub-item {
|
||||
position: relative;
|
||||
top: 0 !important;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
font-size: .92rem;
|
||||
font-weight: 400;
|
||||
@ -292,7 +289,7 @@ body[page="1000"] .sub-item .nav-link, .sub-item .nav-link {
|
||||
color: var(--text-color-dark)
|
||||
}
|
||||
|
||||
.nav-link:hover{
|
||||
.nav-link:hover, .nav-link.active{
|
||||
color: var(--color-primary) !important;
|
||||
padding-left: 25px;
|
||||
background: var(--color-1)
|
||||
@ -300,7 +297,7 @@ body[page="1000"] .sub-item .nav-link, .sub-item .nav-link {
|
||||
|
||||
|
||||
|
||||
.navmain [data-dropdown].active .nav-item::after, .navmain .nav-item::after, .navmain [data-dropdown].active .nav-item::before, .navmain .nav-item::before {
|
||||
.navmain .nav-item::before, .navmain .nav-item::after {
|
||||
content: '';
|
||||
display: block;
|
||||
position: absolute;
|
||||
@ -309,33 +306,31 @@ body[page="1000"] .sub-item .nav-link, .sub-item .nav-link {
|
||||
right: 49%;
|
||||
left: 49%;
|
||||
bottom: 0;
|
||||
height: 3px;
|
||||
height: 2px;
|
||||
background: var(--color-primary);
|
||||
transform: scaleX(0);
|
||||
transition: transform .4s ease-in-out
|
||||
}
|
||||
|
||||
.navmain [data-dropdown].active .nav-item::after, .navmain .nav-item::after, .navmain .nav-item.active::after {
|
||||
.navmain .nav-item::after {
|
||||
transform-origin: center right;
|
||||
border-top-left-radius: 3px;
|
||||
border-bottom-left-radius: 3px;
|
||||
left: 5%;
|
||||
}
|
||||
|
||||
.navmain [data-dropdown].active .nav-item::before, .navmain .nav-item::before, .navmain .nav-item.active::before {
|
||||
.navmain .nav-item::before {
|
||||
transform-origin: center left;
|
||||
border-top-right-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
right: 5%;
|
||||
}
|
||||
|
||||
.navmain [data-dropdown].active .nav-item::after, .navmain .nav-item:hover::after, .navmain .nav-item.active::after {
|
||||
|
||||
.navmain [data-dropdown].active .nav-item::after, .navmain .nav-item:hover::after, .navmain .nav-item.active::after, .navmain .activeM .nav-item::after {
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
.navmain [data-dropdown].active .nav-item::before, .navmain .nav-item:hover::before, .navmain .nav-item.active::before {
|
||||
|
||||
.navmain [data-dropdown].active .nav-item::before, .navmain .nav-item:hover::before, .navmain .nav-item.active::before, .navmain .activeM .nav-item::before {
|
||||
transform: scaleX(1);
|
||||
}
|
||||
|
||||
@ -352,7 +347,10 @@ body[page="1000"] .sub-item .nav-link, .sub-item .nav-link {
|
||||
width: var(--mNav-width);
|
||||
box-shadow: 0 2px 3px rgba(96, 96, 96, .4);
|
||||
transition: left .6s ease-out;
|
||||
padding: 35px 30px
|
||||
}
|
||||
|
||||
.m-header .c_logo{
|
||||
margin: 35px 30px 0;
|
||||
}
|
||||
|
||||
.m-header.show {
|
||||
@ -365,19 +363,25 @@ body[page="1000"] .sub-item .nav-link, .sub-item .nav-link {
|
||||
top: 20px;
|
||||
right: 20px;
|
||||
}
|
||||
|
||||
|
||||
.m-header .navmain {
|
||||
margin: 20px 0;
|
||||
.m-header .nav-mainmenu [data-dropdown] .sub-item {
|
||||
position: relative;
|
||||
top: 0 !important;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.m-header .navmain .nav-item.active::after, .m-header .navmain .nav-item:hover::after, .m-header .navmain .nav-i.active .nav-item::after, .m-header .navmain .nav-i.activeM .nav-item::after {
|
||||
.m-header .navmain {
|
||||
height: calc(100% - 120px);
|
||||
padding: 0 35px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.m-header .navmain .nav-item:hover::after, .m-header .navmain .nav-i.active .nav-item::after, .m-header .navmain .activeM .nav-item::after {
|
||||
left: 0;
|
||||
right: 50%;
|
||||
width: 50%
|
||||
}
|
||||
|
||||
.m-header .navmain .nav-item.active::before, .m-header .navmain .nav-item:hover::before, .m-header .navmain .nav-i.active .nav-item::before, .m-header .navmain .nav-i.activeM .nav-item::before {
|
||||
.m-header .navmain .nav-item:hover::before, .m-header .navmain .nav-i.active .nav-item::before, .m-header .navmain .activeM .nav-item::before {
|
||||
left: 50%;
|
||||
right: 0;
|
||||
width: 50%;
|
||||
@ -388,21 +392,53 @@ body[page="1000"] .sub-item .nav-link, .sub-item .nav-link {
|
||||
height: auto !important;
|
||||
}
|
||||
|
||||
.m-header .navmain a.active, .m-header .navmain .nav-item:hover {
|
||||
color: var(--color-second)
|
||||
}
|
||||
|
||||
.m-header .navmain .sub-item .nav-link.active, .m-header .navmain .sub-item .nav-link:hover {
|
||||
padding-left: 15px;
|
||||
color: var(--color-primary);
|
||||
background: none
|
||||
}
|
||||
|
||||
.m-header .navmain .sub-item .nav-link{
|
||||
padding-left: 10px
|
||||
}
|
||||
|
||||
.m-header .navmain a {
|
||||
padding: 10px 0;
|
||||
display: inline-flex;
|
||||
}
|
||||
color:var(--text-color-dark)
|
||||
|
||||
.m-header .navmain .nav-item{
|
||||
color:#000
|
||||
}
|
||||
|
||||
.m-header .navmain [data-dropdown] .sub-item {
|
||||
position: relative;
|
||||
top: 0 !important;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.m-header .sub-nav-full {
|
||||
width: 100% !important;
|
||||
left: 0;
|
||||
transform: none
|
||||
}
|
||||
.m-header .sub-nav-full .cfull{
|
||||
padding: 0;
|
||||
}
|
||||
.m-header .sub-nav-full .r-n-g > div
|
||||
{
|
||||
flex: 0 0 100%;
|
||||
max-width: 100% !important
|
||||
}
|
||||
.m-header .sub-nav-full .nav-col {
|
||||
margin:5px 10px
|
||||
}
|
||||
.m-header .sub-nav-full .title {
|
||||
padding-left: 0;
|
||||
padding-bottom: 10px
|
||||
}
|
||||
|
||||
.rSlider {
|
||||
margin: 0;
|
||||
}
|
||||
@ -641,12 +677,16 @@ div[class*=sec]{
|
||||
}
|
||||
|
||||
.ico-menu span {
|
||||
background-color: var(--text-color-white) !important;
|
||||
background-color: var(--text-color-dark);
|
||||
border-radius: 2px;
|
||||
height: 2px !important;
|
||||
cursor: pointer
|
||||
}
|
||||
|
||||
body[page="1000"] .ico-menu span {
|
||||
background-color: var(--text-color-white)
|
||||
}
|
||||
|
||||
.ico-menu:hover div:first-child span, .ico-menu.active div:first-child span {
|
||||
animation: down-rotate 0.6s ease-in-out forwards;
|
||||
}
|
||||
@ -1116,6 +1156,64 @@ div[class*=sec]{
|
||||
}
|
||||
/***End Section**/
|
||||
|
||||
/**********Customer Section**********/
|
||||
.customer-section{
|
||||
padding: 80px 0 60px
|
||||
}
|
||||
.cust-reviews {
|
||||
padding: 40px 35px
|
||||
}
|
||||
|
||||
.cust-reviews .quote {
|
||||
opacity: .3;
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
right: 20px;
|
||||
z-index: -1;
|
||||
}
|
||||
.cust-body{
|
||||
display: flex;
|
||||
margin-top: 30px;
|
||||
color: white
|
||||
}
|
||||
|
||||
.cust-image {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
border: 2px solid white;
|
||||
-webkit-border-radius: 50%;
|
||||
-moz-border-radius: 50%;
|
||||
border-radius: 50%;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.cust-image img {
|
||||
width: 54px;
|
||||
height: auto
|
||||
}
|
||||
|
||||
.cust-reviews .star {
|
||||
display: flex;
|
||||
margin-bottom: 20px;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.cust-reviews .star li {
|
||||
display: inline;
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
.cust-reviews .star li i {
|
||||
color: var(--color-primary);
|
||||
}
|
||||
.cust-reviews p {
|
||||
color: var(--text-color-white);
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/************End Section***********************/
|
||||
|
||||
/***Our Service Section***/
|
||||
.our-section {
|
||||
padding:0
|
||||
@ -1334,10 +1432,13 @@ div[class*=sec]{
|
||||
}
|
||||
|
||||
|
||||
.blog-section .swiper-slide {
|
||||
padding: 0 20px 20px;
|
||||
}
|
||||
|
||||
.blog-section .grid{
|
||||
margin:0;
|
||||
height: 100%
|
||||
margin: 0;
|
||||
height: 100%
|
||||
}
|
||||
.blog-author {
|
||||
position: absolute;
|
||||
@ -1513,7 +1614,7 @@ div[class*=sec]{
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
background: rgb(86 83 96 / 0.32);
|
||||
width: 100vh;
|
||||
width: 100vw;
|
||||
}
|
||||
|
||||
.c-aoverlay {
|
||||
@ -1724,4 +1825,140 @@ div[class*=sec]{
|
||||
resize: none
|
||||
}
|
||||
|
||||
/*********End************/
|
||||
/*********End************/
|
||||
|
||||
|
||||
|
||||
/*********Page Section***********/
|
||||
.page-section .title{
|
||||
padding: 60px 0;
|
||||
}
|
||||
|
||||
.con-page-section {
|
||||
margin-bottom:40px
|
||||
}
|
||||
|
||||
|
||||
video.bg-video {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
object-fit: cover;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
.con-masthead{
|
||||
overflow:hidden;
|
||||
margin-top: -40px;
|
||||
height: 90vh
|
||||
}
|
||||
|
||||
.masthead {
|
||||
color:white;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
z-index: 2;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.masthead:before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
background-color: rgba(0, 0, 0, 0.85);
|
||||
}
|
||||
|
||||
.masthead .masthead-content {
|
||||
position: relative;
|
||||
max-width: 40rem;
|
||||
padding-top: 5rem;
|
||||
padding-bottom: 5rem;
|
||||
}
|
||||
.masthead-content h2{
|
||||
text-transform: capitalize;
|
||||
font-size: 2.5rem
|
||||
}
|
||||
|
||||
.masthead-content p {
|
||||
font-size: 1rem;
|
||||
line-height: 2
|
||||
}
|
||||
|
||||
|
||||
|
||||
.masthead .masthead-content .input-group-newsletter input {
|
||||
height: auto;
|
||||
width: 100%;
|
||||
font-size: 1rem;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.masthead .masthead-content .input-group-newsletter button {
|
||||
font-size: 0.85rem;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
padding: calc(1rem + 2px);
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.masthead {
|
||||
padding: 60px 0;
|
||||
height: 100%;
|
||||
width: 75vw;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
.masthead:before {
|
||||
transform: skewX(-9deg);
|
||||
transform-origin: top right;
|
||||
}
|
||||
|
||||
.masthead .masthead-content {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 2rem;
|
||||
padding-right: 9rem;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
.masthead {
|
||||
width: 65vw;
|
||||
}
|
||||
}
|
||||
|
||||
.social-icons {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.social-icons .btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0;
|
||||
height: 4rem;
|
||||
width: 4rem;
|
||||
border-radius: 100rem;
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.social-icons {
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
right: 2.5rem;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
TWA-App/wwwroot/images/1000/customer-section/review-cust.jpg
Normal file
BIN
TWA-App/wwwroot/images/1000/customer-section/review-cust.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 186 KiB |
BIN
TWA-App/wwwroot/images/wait-section/bg.mp4
Normal file
BIN
TWA-App/wwwroot/images/wait-section/bg.mp4
Normal file
Binary file not shown.
@ -20,15 +20,21 @@ function updateActiveSlideShow(swiperInstance) {
|
||||
window.L1000 = function () {
|
||||
const swiper = new Swiper('.mainSlider', {
|
||||
loop: true,
|
||||
effect: 'fade',
|
||||
fadeEffect: {
|
||||
crossFade: true, // ảnh cũ mờ dần, ảnh mới xuất hiện
|
||||
effect: 'creative',
|
||||
creativeEffect: {
|
||||
limitProgress: 1,
|
||||
prev: { translate: ['-40%', 0, -1], opacity: 0, shadow: true },
|
||||
next: { translate: ['40%', 0, -1], opacity: 0, shadow: true }
|
||||
},
|
||||
autoplay: {
|
||||
delay: 5000, // 5s
|
||||
disableOnInteraction: false, // không dừng khi hover hay click
|
||||
},
|
||||
loop: true, // bật loop để chạy liên tục
|
||||
allowTouchMove: true,
|
||||
simulateTouch: true,
|
||||
followFinger: true,
|
||||
threshold: 0,
|
||||
speed: 1000,
|
||||
navigation: {
|
||||
nextEl: ".swiper-button-next",
|
||||
@ -61,7 +67,7 @@ window.L1000 = function () {
|
||||
}
|
||||
});
|
||||
var tabs = new ATab(document.querySelector(".tabQuoute .atabs"), document.querySelector(".tabQuoute .tabcontents"));
|
||||
|
||||
|
||||
const parallaxEls = document.querySelectorAll('.parallax');
|
||||
let ticking = false;
|
||||
const swiper1 = new Swiper('.airlineSwiper', {
|
||||
@ -86,12 +92,12 @@ window.L1000 = function () {
|
||||
});
|
||||
parallaxEls.forEach(el => {
|
||||
const parent = el.closest(".con-parallax");
|
||||
if (parent) {
|
||||
if (parent) {
|
||||
parent.style.height = parent.querySelector("[data-content]").offsetHeight + "px";
|
||||
}
|
||||
});
|
||||
window.app.on("App_Scrolling", (t) => {
|
||||
if (!ticking) {
|
||||
if (!ticking) {
|
||||
window.requestAnimationFrame(() => {
|
||||
updateParallax(t, parallaxEls);
|
||||
ticking = false;
|
||||
@ -114,10 +120,10 @@ window.L1000 = function () {
|
||||
});
|
||||
const swiper2 = new Swiper('.ourBlogSwiper', {
|
||||
slidesPerView: 1,
|
||||
spaceBetween: 40,
|
||||
spaceBetween: 0,
|
||||
autoplay: {
|
||||
delay: 2000, // 5s
|
||||
disableOnInteraction: true,
|
||||
disableOnInteraction: true,
|
||||
},
|
||||
loop: true, // bật loop để chạy liên tục
|
||||
speed: 1000,
|
||||
@ -134,7 +140,26 @@ window.L1000 = function () {
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
const swiper3 = new Swiper(".custSwiper", {
|
||||
slidesPerView: 1,
|
||||
spaceBetween: 40,
|
||||
autoplay: {
|
||||
delay: 2000, // 5s
|
||||
disableOnInteraction: true,
|
||||
},
|
||||
loop: true, // bật loop để chạy liên tục
|
||||
speed: 1000,
|
||||
navigation: {
|
||||
nextEl: ".swiper-button-next",
|
||||
prevEl: ".swiper-button-prev",
|
||||
},
|
||||
loopedSlides: 5, // số slide duplicate
|
||||
breakpoints: {
|
||||
992: { slidesPerView: 3 }, // màn hình ≥1200px
|
||||
576: { slidesPerView: 2 }, // ≥768px=
|
||||
0: { slidesPerView: 1 } // <576px
|
||||
},
|
||||
});
|
||||
}
|
||||
function animateCount(el) {
|
||||
const rect = el.getBoundingClientRect();
|
||||
|
||||
@ -1,5 +1,61 @@
|
||||
window.L2000 = function () {
|
||||
|
||||
window.runParalax = function () {
|
||||
|
||||
const parallaxEls = document.querySelectorAll('.con-page-section .parallax');
|
||||
let ticking = false;
|
||||
parallaxEls.forEach(el => {
|
||||
const parent = el.closest(".con-parallax");
|
||||
if (parent) {
|
||||
parent.style.height = parent.querySelector("[data-content]").offsetHeight + "px";
|
||||
}
|
||||
});
|
||||
window.app.on("App_Scrolling", (t) => {
|
||||
if (!ticking) {
|
||||
window.requestAnimationFrame(() => {
|
||||
updateParallax(t, parallaxEls);
|
||||
ticking = false;
|
||||
});
|
||||
ticking = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function updateParallax(t, parallaxEls) {
|
||||
parallaxEls.forEach(el => {
|
||||
const section = el.closest('.con-parallax');
|
||||
if (!section) return;
|
||||
|
||||
const rect = section.getBoundingClientRect();
|
||||
const sectionHeight = section.offsetHeight;
|
||||
|
||||
// Chỉ xử lý khi section trong khung nhìn
|
||||
const inView = rect.bottom > 0 && rect.top < window.innerHeight;
|
||||
if (!inView) return;
|
||||
|
||||
// Set height parent 1 lần
|
||||
const content = section.querySelector('[data-content]');
|
||||
if (content && !section.dataset.heightSet) {
|
||||
section.style.height = content.offsetHeight + 'px';
|
||||
section.dataset.heightSet = 'true'; // đánh dấu đã set height
|
||||
}
|
||||
|
||||
const img = el.querySelector('.bg-img');
|
||||
if (!img) return;
|
||||
|
||||
const imgHeight = img.offsetHeight;
|
||||
const depth = parseFloat(el.dataset.depth ?? 1); // 1 = chạy hết, <1 = chạy ít hơn
|
||||
|
||||
// progress: 0 khi section top chạm viewport top, 1 khi section bottom chạm viewport bottom
|
||||
const progress = (window.innerHeight - rect.top) / (window.innerHeight + sectionHeight);
|
||||
const clamped = Math.min(1, Math.max(0, progress));
|
||||
|
||||
// scrollable = toàn bộ quãng đường ảnh có thể chạy
|
||||
const scrollable = imgHeight - sectionHeight;
|
||||
|
||||
// offset Y
|
||||
const offsetY = -clamped * scrollable * depth;
|
||||
img.style.transform = `translate(-50%, ${offsetY}px)`;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
window.AScript.set("2000", true);
|
||||
133
TWA-App/wwwroot/js/js-page/2001.js
Normal file
133
TWA-App/wwwroot/js/js-page/2001.js
Normal file
@ -0,0 +1,133 @@
|
||||
window.L2001 = function () {
|
||||
if (window["runParalax"] !== undefined) {
|
||||
window["runParalax"]();
|
||||
}
|
||||
const swiper2 = new Swiper('.ourBlogSwiper1', {
|
||||
slidesPerView: 1,
|
||||
spaceBetween: 0,
|
||||
autoplay: {
|
||||
delay: 2000, // 5s
|
||||
disableOnInteraction: true,
|
||||
},
|
||||
loop: true, // bật loop để chạy liên tục
|
||||
speed: 1000,
|
||||
navigation: {
|
||||
nextEl: ".swiper-button-next",
|
||||
prevEl: ".swiper-button-prev",
|
||||
},
|
||||
loopedSlides: 5, // số slide duplicate
|
||||
breakpoints: {
|
||||
1400: { slidesPerView: 4 },
|
||||
992: { slidesPerView: 3 }, // màn hình ≥1200px
|
||||
576: { slidesPerView: 2 }, // ≥768px=
|
||||
0: { slidesPerView: 1 } // <576px
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
const parallaxEls = document.querySelectorAll('.con-perf-section .parallax');
|
||||
let ticking = false;
|
||||
parallaxEls.forEach(el => {
|
||||
const parent = el.closest(".con-parallax");
|
||||
if (parent) {
|
||||
parent.style.height = parent.querySelector("[data-content]").offsetHeight + "px";
|
||||
}
|
||||
});
|
||||
const countNum = document.querySelectorAll('[CountNumber]');
|
||||
let tickingC = false;
|
||||
window.app.on("App_Scrolling", (t) => {
|
||||
if (!ticking) {
|
||||
window.requestAnimationFrame(() => {
|
||||
updateParallax(t, parallaxEls);
|
||||
ticking = false;
|
||||
});
|
||||
ticking = true;
|
||||
}
|
||||
if (!tickingC) {
|
||||
window.requestAnimationFrame(() => {
|
||||
countNum.forEach((el) => {
|
||||
animateCount(el);
|
||||
})
|
||||
tickingC = false;
|
||||
});
|
||||
tickingC = true;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
function animateCount(el) {
|
||||
const rect = el.getBoundingClientRect();
|
||||
const inView = rect.bottom > 0 && rect.top < window.innerHeight;
|
||||
if (el.hasAttribute("render")) {
|
||||
if (!inView) {
|
||||
el.removeAttribute("render");
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (inView) {
|
||||
el.setAttribute("render", "");
|
||||
const min = parseInt(el.getAttribute("num-min") ?? 0);
|
||||
const max = parseInt(el.getAttribute("num-max") ?? 1);
|
||||
const prefix = el.getAttribute("prefix") ?? "";
|
||||
const duration = parseInt(el.getAttribute("duration") ?? 1000); // ms
|
||||
const interval = 10; // ms mỗi tick
|
||||
|
||||
const steps = duration / interval;
|
||||
const stepValue = Math.ceil((max - min) / steps);
|
||||
|
||||
let current = min;
|
||||
let tickCount = 0;
|
||||
|
||||
function tick() {
|
||||
current = Math.min(min + stepValue * tickCount, max);
|
||||
el.textContent = prefix + current.toLocaleString("en-US");
|
||||
tickCount++;
|
||||
|
||||
if (tickCount <= steps) {
|
||||
window.requestTimeout(tick, interval);
|
||||
}
|
||||
}
|
||||
|
||||
tick(); // khởi chạy
|
||||
}
|
||||
}
|
||||
|
||||
function updateParallax(t, parallaxEls) {
|
||||
parallaxEls.forEach(el => {
|
||||
const section = el.closest('.con-parallax');
|
||||
if (!section) return;
|
||||
|
||||
const rect = section.getBoundingClientRect();
|
||||
const sectionHeight = section.offsetHeight;
|
||||
|
||||
// Chỉ xử lý khi section trong khung nhìn
|
||||
const inView = rect.bottom > 0 && rect.top < window.innerHeight;
|
||||
if (!inView) return;
|
||||
|
||||
// Set height parent 1 lần
|
||||
const content = section.querySelector('[data-content]');
|
||||
if (content && !section.dataset.heightSet) {
|
||||
section.style.height = content.offsetHeight + 'px';
|
||||
section.dataset.heightSet = 'true'; // đánh dấu đã set height
|
||||
}
|
||||
|
||||
const img = el.querySelector('.bg-img');
|
||||
if (!img) return;
|
||||
|
||||
const imgHeight = img.offsetHeight;
|
||||
const depth = parseFloat(el.dataset.depth ?? 1); // 1 = chạy hết, <1 = chạy ít hơn
|
||||
|
||||
// progress: 0 khi section top chạm viewport top, 1 khi section bottom chạm viewport bottom
|
||||
const progress = (window.innerHeight - rect.top) / (window.innerHeight + sectionHeight);
|
||||
const clamped = Math.min(1, Math.max(0, progress));
|
||||
|
||||
// scrollable = toàn bộ quãng đường ảnh có thể chạy
|
||||
const scrollable = imgHeight - sectionHeight;
|
||||
|
||||
// offset Y
|
||||
const offsetY = -clamped * scrollable * depth;
|
||||
img.style.transform = `translate(-50%, ${offsetY}px)`;
|
||||
});
|
||||
}
|
||||
|
||||
window.AScript.set("2001", true);
|
||||
7
TWA-App/wwwroot/js/js-page/2002.js
Normal file
7
TWA-App/wwwroot/js/js-page/2002.js
Normal file
@ -0,0 +1,7 @@
|
||||
window.L2002 = function () {
|
||||
if (window["runParalax"] !== undefined) {
|
||||
window["runParalax"]();
|
||||
}
|
||||
}
|
||||
|
||||
window.AScript.set("2002", true);
|
||||
7
TWA-App/wwwroot/js/js-page/2003.js
Normal file
7
TWA-App/wwwroot/js/js-page/2003.js
Normal file
@ -0,0 +1,7 @@
|
||||
window.L2002 = function () {
|
||||
if (window["runParalax"] !== undefined) {
|
||||
window["runParalax"]();
|
||||
}
|
||||
}
|
||||
|
||||
window.AScript.set("2003", true);
|
||||
7
TWA-App/wwwroot/js/js-page/2004.js
Normal file
7
TWA-App/wwwroot/js/js-page/2004.js
Normal file
@ -0,0 +1,7 @@
|
||||
window.L2002 = function () {
|
||||
if (window["runParalax"] !== undefined) {
|
||||
window["runParalax"]();
|
||||
}
|
||||
}
|
||||
|
||||
window.AScript.set("2004", true);
|
||||
7
TWA-App/wwwroot/js/js-page/2005.js
Normal file
7
TWA-App/wwwroot/js/js-page/2005.js
Normal file
@ -0,0 +1,7 @@
|
||||
window.L2002 = function () {
|
||||
if (window["runParalax"] !== undefined) {
|
||||
window["runParalax"]();
|
||||
}
|
||||
}
|
||||
|
||||
window.AScript.set("2005", true);
|
||||
@ -21,7 +21,7 @@ class AsyncLayout extends ALayout {
|
||||
<i class="atg atg-x"></i>
|
||||
</a>
|
||||
</a>
|
||||
<div class="navmain d-f f-c">
|
||||
<div class="navmain d-f f-c scroll-header" data-scrollbar>
|
||||
</div>
|
||||
|
||||
</div>`;
|
||||
@ -102,6 +102,15 @@ class AsyncLayout extends ALayout {
|
||||
this.listAObject.add(a1);
|
||||
var a2 = new AMenu("#fHeader .navmain", null, null);
|
||||
this.listAObject.add(a2);
|
||||
var sOption = {
|
||||
damping: (window.getOS() == "Android") ? .06 : .04,
|
||||
thumbMinSize: 25,
|
||||
renderByPixel: true,
|
||||
alwaysShowTracks: true,
|
||||
continuousScrolling: true
|
||||
};
|
||||
this.scroll = window.Scrollbar.init(document.querySelector('.m-header .scroll-header[data-scrollbar]'), sOption);
|
||||
|
||||
const idE1 = window.app.on("redirect_page", (e) => {
|
||||
a1.changeActive();
|
||||
a2.changeActive();
|
||||
|
||||
@ -9,6 +9,7 @@ export default class Dropdown extends window.AObject {
|
||||
if (window.dropdown == null) {
|
||||
this.initGlobalVar();
|
||||
}
|
||||
this.scrollTrack = false;
|
||||
}
|
||||
initGlobalVar() {
|
||||
var f = function (ev) {
|
||||
@ -42,7 +43,7 @@ export default class Dropdown extends window.AObject {
|
||||
if (window.isValidPointerClick(ev)) return;
|
||||
this.onClick.call(this, ev);
|
||||
}.bind(this);
|
||||
this.addSystemEvent(this.eventName, e, f, p);
|
||||
this.addSystemEvent(this.eventName, e, f, p, true);
|
||||
}
|
||||
document_onClick(e) {
|
||||
this.checkRelease(e);
|
||||
@ -51,8 +52,13 @@ export default class Dropdown extends window.AObject {
|
||||
if (this.isLock) {
|
||||
return;
|
||||
}
|
||||
if (this.scrollTrack) {
|
||||
e.stopImmediatePropagation();
|
||||
e.preventDefault();
|
||||
return;
|
||||
}
|
||||
var t1 = e.currentTarget;
|
||||
var p = t1.closest('[data-dropdown]');
|
||||
var p = t1.closest('[data-dropdown]');
|
||||
var p1 = e.target.closest(".noopen");
|
||||
if (window.dropdown.currentE != null && (e.target.closest(".item") != null || p1 == null)) {
|
||||
var tmp = window.dropdown.currentE.con;
|
||||
|
||||
@ -45,17 +45,17 @@ export default class AMenu extends window.AObject {
|
||||
this.initDropDown();
|
||||
this.initNav(this.navD);
|
||||
if (this.isMDiffD) {
|
||||
this.initNav(this.navM);
|
||||
this.initNav(this.navM, "M");
|
||||
}
|
||||
}
|
||||
|
||||
initNav(ele) {
|
||||
initNav(ele, type = "D") {
|
||||
let arr = ele.querySelectorAll(".nav-i.has-sub .nav-link, .nav-mainmenu > .nav-i:not(.has-sub) a");
|
||||
Array.from(arr).forEach(el => {
|
||||
var f = function (evt) {
|
||||
if (window.isValidPointerClick(evt)) return;
|
||||
|
||||
this.addEventClick.call(this, evt);
|
||||
this.addEventClick.call(this, evt, type);
|
||||
}.bind(this);
|
||||
el.addEventListener(this.eventName, f);
|
||||
var f1 = function (evt) {
|
||||
@ -124,8 +124,14 @@ export default class AMenu extends window.AObject {
|
||||
}
|
||||
}
|
||||
|
||||
addEventClick(e) {
|
||||
addEventClick(e, t) {
|
||||
window.app.initNavApp(e.currentTarget.getAttribute("href"), e.currentTarget.hasAttribute("isflexpage"));
|
||||
if (t == "M") {
|
||||
this.overlay.removeOverlay();
|
||||
this.listIco.forEach(el => {
|
||||
el.classList.remove("active");
|
||||
})
|
||||
}
|
||||
}
|
||||
closeExpandMenu() {
|
||||
Array.from(this.navM.querySelectorAll(".nav-i.has-sub")).forEach(el => {
|
||||
|
||||
@ -415,13 +415,13 @@ window.AObject = class {
|
||||
}
|
||||
|
||||
}
|
||||
addSystemEvent(eventName, element, callback, parent = null) {
|
||||
addSystemEvent(eventName, element, callback, parent = null, capture = false) {
|
||||
if (!this.systemEvents.has(element)) {
|
||||
this.systemEvents.set(element, new Map());
|
||||
}
|
||||
const eventMap = this.systemEvents.get(element);
|
||||
eventMap.set(eventName, { callback, parent });
|
||||
element.addEventListener(eventName, callback, false);
|
||||
element.addEventListener(eventName, callback, capture);
|
||||
if (parent) {
|
||||
if (!this.parentEventMap.has(parent)) {
|
||||
this.parentEventMap.set(parent, new Set());
|
||||
@ -622,7 +622,7 @@ class AApp extends window.AObject {
|
||||
} else {
|
||||
|
||||
var sOption = {
|
||||
damping: (window.getOS() == "Android") ? .1 : .04,
|
||||
damping: (window.getOS() == "Android") ? .08 : .04,
|
||||
thumbMinSize: 25,
|
||||
renderByPixel: true,
|
||||
alwaysShowTracks: true,
|
||||
@ -1007,36 +1007,43 @@ class CacheStorage {
|
||||
}
|
||||
|
||||
_initDB() {
|
||||
const req = indexedDB.open(`${this.prefix}_db`, 1);
|
||||
req.onupgradeneeded = (e) => {
|
||||
let store;
|
||||
if (!e.target.result.objectStoreNames.contains("cache")) {
|
||||
store = e.target.result.createObjectStore("cache", { keyPath: "key" });
|
||||
}
|
||||
if (!e.target.result.objectStoreNames.contains("fpCache")) {
|
||||
e.target.result.createObjectStore("fpCache", { keyPath: "key" });
|
||||
}
|
||||
try {
|
||||
store.add({ id: 1, value: "test data" });
|
||||
store.delete("1");
|
||||
} catch (e) {
|
||||
|
||||
const openDB = () => {
|
||||
console.log("Renew Database");
|
||||
const req = indexedDB.open(`${this.prefix}_db`, 1);
|
||||
req.onupgradeneeded = (e) => {
|
||||
const db = e.target.result;
|
||||
if (!db.objectStoreNames.contains("cache")) {
|
||||
db.createObjectStore("cache", { keyPath: "key" });
|
||||
}
|
||||
if (!db.objectStoreNames.contains("fpCache")) {
|
||||
db.createObjectStore("fpCache", { keyPath: "key" });
|
||||
}
|
||||
};
|
||||
req.onsuccess = () => {
|
||||
this.db = req.result;
|
||||
this.ready = true;
|
||||
this._flushQueue();
|
||||
};
|
||||
req.onerror = () => {
|
||||
console.warn("IndexedDB open failed, fallback to localStorage");
|
||||
this.db = null;
|
||||
this.useIndexedDB = false;
|
||||
}
|
||||
|
||||
this.ready = true;
|
||||
this._flushQueue();
|
||||
};
|
||||
};
|
||||
req.onsuccess = (event) => {
|
||||
this.db = req.result;
|
||||
this.ready = true;
|
||||
this._flushQueue();
|
||||
|
||||
|
||||
const del = indexedDB.deleteDatabase(`${this.prefix}_db`);
|
||||
del.onsuccess = () => openDB();
|
||||
del.onerror = () => {
|
||||
console.warn("deleteDatabase failed, continue opening fresh");
|
||||
openDB();
|
||||
};
|
||||
req.onerror = () => {
|
||||
console.warn("IndexedDB failed, fallback to localStorage");
|
||||
this.ready = true;
|
||||
this.db = null;
|
||||
this._flushQueue();
|
||||
del.onblocked = () => {
|
||||
console.warn("deleteDatabase blocked (tab khác đang giữ kết nối)");
|
||||
};
|
||||
|
||||
}
|
||||
_flushQueue() {
|
||||
while (this.queue.length) {
|
||||
|
||||
@ -1,4 +0,0 @@
|
||||
// Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification
|
||||
// for details on configuring this project to bundle and minify static web assets.
|
||||
|
||||
// Write your JavaScript code.
|
||||
Reference in New Issue
Block a user