Paano Bumuo ng Full-Screen Responsive Carousel Slider Sa Pamamagitan ng Owl.js
() translation by (you can also view the original English article)
Sa nakaraan na paskil na aking ipinakita sa iyo kung paano bumuo ng pasdayang galerya ng imahe na may slick.js. Ngayon ay aking tatalakayin ang proseso ng paglikha ng animated, responsive, full-screen carousel slider owl.js (o “Owl Carousel”).
Gaya ng dati, upang makakuha ng paunang ideya kung ano ang ating bubuuin, tignan ang may kaugnayan CodePen demo (tignan ang mas malaking bersyon para sa mas mahusay na karanasan):
Ano ang Owl Carousel?
Ang Owl.js ay isang tanyag na jQuery plugin na nilikha ni David Deutch na hinahayaan kang bumuo ng kahali-halina, tumutugong carousels. Para mas mabuting maintindihan kung ano ang iniaalok ng plugin na ito, suriin ang mga demo.
Sapat na ang saya, ito ay mayroon kahanga-hangang browser support, nasubok na sa mga sumusunod na aparato:
- Chrome
- Firefox
- Opera
- IE7/8/10/11
- iPad Safari
- iPod4 Safari
- Nexus 7 Chrome
- Galaxy S4
- Nokia 8s Windows8
Para sa mas marami pang detalye tignan ang mga dokumentasyon.
Paghahanda sa Pagsimula Ng Owl.js
Upang makapagsimula sa owl, simulan sa pamamagitan ng pag-download at pag-install ng mga sumusunod na files sa iyong proyekto:
- jQuery
-
owl.carousel.css
o ang pinaliit na bersyon
-
owl.carousel.js
o ang pinaliit na bersyon
May opsyon, kung gusto mo maari din na i-import ang owl.theme.default.css
file.
Maari kang kumuha ng kopya ng kaayon na owl files sa pagbisita
sa Github repo, sa paggamit ng package manager (e.g. npm), o sa pag-load ng
kinakailangan assets sa pamamagitan ng CDN (e.g. cdnjs). Para sa pagtuturong ito, Pinili
ko ang huling opsyon.
Para sa pakay ng pagtuturong ito, sa kabila ng owl files, Akin rin isinama ang Babel at Bootstrap 4.
Iyon ay ang nasa isipan, kung titingin ka sa ilalim ng Settings tab ng ating demo pen, makikita mo na aking isinama ang tatlong panlabas na CSS files at dalawang panlabas na JavaScript files.






1. Ang HTML
Para simulan ating turingan ang carousel na may tatlong mga slide. Bawat isa sa mga slides at may nilalaman na pamagat, pangalawang pamagat, at isang call-to-action button.
Narito ang kailangan kaayusan para sa ating demo page:
1 |
<div class="owl-carousel owl-theme"> |
2 |
<div class="owl-slide d-flex align-items-center cover" style="background-image: url(IMG_SRC);"> |
3 |
<div class="container"> |
4 |
<div class="row justify-content-center justify-content-md-start"> |
5 |
<div class="col-10 col-md-6 static"> |
6 |
<div class="owl-slide-text"> |
7 |
<h2 class="owl-slide-animated owl-slide-title"> |
8 |
<!-- content here -->
|
9 |
</h2>
|
10 |
<div class="owl-slide-animated owl-slide-subtitle mb-3"> |
11 |
<!-- content here -->
|
12 |
</div>
|
13 |
<a class="btn btn-primary owl-slide-animated owl-slide-cta" href="" role="button"> |
14 |
<!-- content here -->
|
15 |
</a>
|
16 |
</div><!-- /owl-slide-text --> |
17 |
</div>
|
18 |
</div>
|
19 |
</div>
|
20 |
</div><!-- /slide1 --> |
21 |
|
22 |
<!-- two more slides here -->
|
23 |
</div>
|
24 |
<!-- other sections here -->
|
Napakahalagang banggitin ang dalawang bagay sa puntong ito:
- Ang code na nasa itaas ay gumagamit ng Bootstrap 4 classes. Ang Bootstrap framework ay hindi mahalaga; Isinama ko lamang ito dahil gusto kong mapabilis ang CSS development.
- Idinagdag ko ang background image para sa bawat slide sa pamamagitan ng inline styles. Kadalasan, kapag ikaw ay nakikitungo sa mayroon dynamic content, madalas ito ang karaniwan CSS method para sa pagdagdag ng background images.
2. Ang CSS
Nasa wastong kinalalagyan na ang HTML, atin naman tignan ang CSS styles na ilalagay sa ating pahina. Para sa kasimplihan, Tatalakayin lamang natin ang bahagi ng styles na mayroon.
Una, ating tutukuyin ang dalawang custom properties at dalawang helper classes:
1 |
:root { |
2 |
--main-white-color: white; |
3 |
--main-black-color: black; |
4 |
}
|
5 |
|
6 |
.static { |
7 |
position: static; |
8 |
}
|
9 |
|
10 |
.cover { |
11 |
background-size: cover; |
12 |
background-position: center; |
13 |
background-repeat: no-repeat; |
14 |
}
|
Sunod, ating tinukoy ang styles para sa carousel slides, kabilang ang transisyon:
1 |
.owl-carousel .owl-slide { |
2 |
position: relative; |
3 |
height: 100vh; |
4 |
background-color: lightgray; |
5 |
}
|
6 |
|
7 |
.owl-carousel .owl-slide-animated { |
8 |
transform: translateX(20px); |
9 |
opacity: 0; |
10 |
visibility: hidden; |
11 |
transition: all 0.05s; |
12 |
}
|
13 |
|
14 |
.owl-carousel .owl-slide-animated.is-transitioned { |
15 |
transform: none; |
16 |
opacity: 1; |
17 |
visibility: visible; |
18 |
transition: all 0.5s; |
19 |
}
|
20 |
|
21 |
.owl-carousel .owl-slide-title.is-transitioned { |
22 |
transition-delay: 0.2s; |
23 |
}
|
24 |
|
25 |
.owl-carousel .owl-slide-subtitle.is-transitioned { |
26 |
transition-delay: 0.35s; |
27 |
}
|
28 |
|
29 |
.owl-carousel .owl-slide-cta.is-transitioned { |
30 |
transition-delay: 0.5s; |
31 |
}
|
Sa wakas, tayo ay nagtakda ng ilang mga panuntunan para sa pamamaraan ng nabigasyon:
1 |
.owl-carousel .owl-dots, |
2 |
.owl-carousel .owl-nav { |
3 |
position: absolute; |
4 |
}
|
5 |
|
6 |
.owl-carousel .owl-dots .owl-dot span { |
7 |
background: transparent; |
8 |
border: 1px solid var(--main-black-color); |
9 |
transition: all 0.2s ease; |
10 |
}
|
11 |
|
12 |
.owl-carousel .owl-dots .owl-dot:hover span, |
13 |
.owl-carousel .owl-dots .owl-dot.active span { |
14 |
background: var(--main-black-color); |
15 |
}
|
16 |
|
17 |
.owl-carousel .owl-nav { |
18 |
left: 50%; |
19 |
top: 10%; |
20 |
transform: translateX(-50%); |
21 |
margin: 0; |
22 |
}
|
Tandaan: Ang mga slide ay sakop dapat ang full window
height at atin silang binigyan ng height:100vh
. Gayunpaman, wari ang yunit na
ito ay salungat sa ilang mga aparato (hal. mga iOS na aparato), iba pang opsyon
ay ang iayos ang slides’ height sa pamamagitan ng JavaScript (tignan ang
JavaScript panel ng demo para sa iba pang impormasyon).
3. Ang JavaScript
Sa puntong ito tayo’y handa na para ituon ang ating pansin sa JavaScript.
Pagsisimula ng Carousel
Bilang unang hakbang, ating sisimulan ang carousel. Bilang naka-default na plugin ay nagbibigay ng “dots navigation”, ngunit ang ating carousel ay isasama din ang navigation arrows.



Ating pinagana ang opsyon ng navigation sa pamamagitan ng
nav
configuration property. At saka, ating tinuringan ang ilang custom SVGs
bilang arrows salamat sa navText
configuration property.
Ang code na nagpasimula sa carousel ay ipinapakita sa ibaba:
1 |
const $owlCarousel = $(".owl-carousel").owlCarousel({ |
2 |
items: 1, |
3 |
loop: true, |
4 |
nav: true, |
5 |
navText: [ |
6 |
'<svg width="50" height="50" viewBox="0 0 24 24"><path d="M16.67 0l2.83 2.829-9.339 9.175 9.339 9.167-2.83 2.829-12.17-11.996z"/></svg>', |
7 |
'<svg width="50" height="50" viewBox="0 0 24 24"><path d="M5 3l3.057-3 11.943 12-11.943 12-3.057-3 9-9z"/></svg>' |
8 |
]
|
9 |
});
|
Pagdagdag ng Animations sa Slide Elements
Bilang susunod na hakbang ating ini-animate ang nilalaman
ng bawat slide. Ang gawain na ito ay pinangangasiwaan sa pamamagitan ng
pagbabago
ng kaganapan na itinatakda ng owl.
Narito ang nauugnay na code:
1 |
$($owlCarousel).on("changed.owl.carousel", e => { |
2 |
$(".owl-slide-animated").removeClass("is-transitioned"); |
3 |
const $currentOwlItem = $(".owl-item").eq(e.item.index); |
4 |
$currentOwlItem.find(".owl-slide-animated").addClass("is-transitioned"); |
5 |
});
|
Kung kaya’t sa bawat pagbisita natin sa bagong slide, Una ang nilalaman ng lahat ng slides ay naglalaho. Pagkatapos, ang nilalaman ng kasalukuyang slide ay lumilitaw na may magandang slide-in animation.
Tandaan: sa halip na changed
event maari naman na pantay
nating ginamit ang translated
event.
Sa ngayon, nakita natin kung paano ang mga animations ay
napasimula habang ating iniikot ang mga slide. Ngunit gusto rin natin ng ganun
klase ng animation kapag ang carousel ay simula pa lan ikinakarga. Para
ipatupad ang pag-andar, gagamitin natin ang initialized
event.
Narito ang code na konektado sa kaganapan na ito:
1 |
/*you have to bind initialized event before owl's initialization (see demo) */
|
2 |
$(".owl-carousel").on("initialized.owl.carousel", () => { |
3 |
setTimeout(() => { |
4 |
$(".owl-item.active .owl-slide-animated").addClass("is-transitioned"); |
5 |
}, 200); |
6 |
});
|
Sa loob ng kaganapan ating idinagdag ang is-transitioned
class sa mga element ng unang slide.
Mahalaga na tandaan na ang kaganapan na ito ay kinakailangan ikabit sa pagsisimula ng carousel.
Paghadlang sa Paglukso ng Pahina sa Pagkarga
Bago magpatuloy, ating talakayin ang isang nakakalitong
bagay. Kung titignan mo ang pahina ng demo, makikita mo na mayroon isang section
ng elemento na tinukoy sa ibaba ng carousel. Bilang naka-default, hanggang sa magkarga ang carousel,
ang bahagi ng nilalaman ay lumalabas at isang munting paglukso ang naganap sa
ating pahina.
Mayroon dalawang paraan upang ayusin ang hindi kanais-nais
na gawain. Una, maari tayong magdagdag ng preloader (ginawa na natin ito sa
slick-related tutorial). Pangalawang opinyon na ating ipatutupad dito ay ang
itago ang section
at ipakita ito sa sandaling ang carousel ay nasimulan.
Sa mga tuntunin ng code, ang CSS rule ay kailangan ang isang ito:
1 |
section { |
2 |
display: none; |
3 |
}
|
At ang JavaScript code:
1 |
$(".owl-carousel").on("initialized.owl.carousel", () => { |
2 |
setTimeout(() => { |
3 |
// other code here
|
4 |
|
5 |
$("section").show(); |
6 |
}, 200); |
7 |
});
|
Pagtatakda ng Dots Position
Ang huling bagay na atin dapat gawin ay ang ipwesto ang dots navigation. Bilang naka-default, ito ay lubos nang naka-pwesto. Ang mga sumusunod na bagay ay dapat mangyari:
- Ito ay dapat nakahilera ng pahalang sa .
owl-slide-text
element sa target slide. - Ito ay dapat naka-pwesto sa ilalim nung elemento na may 20px top gap.
Ang function na nagpapaandar at nagtatakda ng ninanais na
pwesto para sa ating dots ay ang setOwlDotsPosition
.
Narito ang function:
1 |
function setOwlDotsPosition() { |
2 |
const $target = $(".owl-item.active .owl-slide-text"); |
3 |
doDotsCalculations($target); |
4 |
}
|
Inihihiwalay nito ang .owl-slide-text
element ng aktibong
slide at ipinapasa ito bilang isang argumento sa doDotsCalculations
sub-function.
Narito ang sub-function:
1 |
function doDotsCalculations(el) { |
2 |
const height = el.height(); |
3 |
const {top, left} = el.position(); |
4 |
const res = height + top + 20; |
5 |
|
6 |
$(".owl-carousel .owl-dots").css({ |
7 |
top: `${res}px`, |
8 |
left: `${left}px` |
9 |
});
|
10 |
}
|
Sa loob ng function na ito ay itinakda natin ang
nararapat na top
at left
values ng .owl-dots
element base sa taas at posisyon ng
target element.
Pag-cater para sa Browser Resize
Sa higit pang pagpapatuloy, ang posisyon ng dots’ ay
dapat na updated habang binabago natin ang sukat ng browser window. Para
makamit ito, sinamantala natin ang resize
owl event.
Narito ang kinakailangan na code:
1 |
$($owlCarousel).on("resize.owl.carousel", () => { |
2 |
setTimeout(() => { |
3 |
setOwlDotsPosition(); |
4 |
}, 50); |
5 |
});
|
Pag-posisyon Batay sa mga Nilalaman
Ang huli ngunit hindi ang pinaka-mababa, habang tayo ay
nag-nanavigate sa mga slides ang mga dots ay dapat na muling isaayos depende sa
taas at posisyon ng mga nilalaman ng aktibong slide. Salamat muli sa changed
event, nagawa nating lutasin ang bagong kinakailangan.
Narito ang nauugnay na code:
1 |
$($owlCarousel).on("changed.owl.carousel", e => { |
2 |
// other code here
|
3 |
|
4 |
const $currentOwlItem = $(".owl-item").eq(e.item.index); |
5 |
const $target = $currentOwlItem.find(".owl-slide-text"); |
6 |
doDotsCalculations($target); |
7 |
});
|
Pro Tip
Bago magtapos, ating talakayin ang isang karaniwan owl bug. Kung ating tatanggalin ang parte kung saan ay nakaluklok sa ilalim ng carousel, ang bertikal na scrollbar ay nawawala at ang bahagi ng karatig na slide ay nakikita.



Para ayusin ito, ating kinalabit ang refresh
event
pagkatapos ng pagsisimula ng carousel, gaya nito: $($owlCarousel).trigger("refresh.owl.carousel");
4. Ang Browser Support
Dapat na gumana ng maayos ang demo sa lahat ng kamakailan lamang na browsers at ligtas itong magagamit sa iyong mga proyekto. Narito ang paalala ng kung ano ang ating nagawa:
Konklusyon
Sa masinsinang pagtuturo na ito, napamahalaan natin na bumuo ng isang animated full-screen carousel na may owl.js. Sana ay may natamo kang bagong kakayahan na maari mong magawa at ipatupad sa iyong mga paparating na proyekto. Gaya parati, kung mayroon kang kahit anong katanungan, ipaalam sa akin sa mga komento sa ilalim.