예전에 연습용으로 만든 아이디어스 홈페이지에 자바스크립트 기능 추가하기: 실시간 검색어, 움직이는 배너, 하트 토글버튼 만들기
github소스코드
예전에 혼자 연습하기 위해 아이디어스 메인 페이지 일부를 카피캣 해놓은게 있었다. 일부 html 및 css 코드를 먼저 효율적으로 수정한 후 자바스크립트 기능을 추가하기로 했다.
jQuery
, owl2
등position: absolute
로 제작flex-wrap
을 사용해 자연스럽게 2개씩 정렬되도록 하였다.#header .middle .popular-component .popular-body ul {
display: flex;
flex-wrap: wrap;
align-items: center;
}
#header .middle .popular-component .popular-body ul li {
width: 50%;
padding: 7px 0;
}
#header .middle .popular-component .popular-body ul li:nth-child(odd) {
padding-right: 12px;
border-right: solid 1px gray;
}
#header .middle .popular-component .popular-body ul li:nth-child(even) {
padding-left: 12px;
}
setPopularData()
로 영역 안 내용물을 채워주었다.var $popularSlider = $('.popular-slider');
var $popularComponent = $('.popular-component');
$popularSlider.on({
mouseenter: function() {
setPopularData(popularData);
$popularComponent.show();
}
});
$popularComponent.mouseleave(function(){
$popularComponent.hide();
});
var popularData = ['그릭요거트', '답례품']; // 등등
function setPopularData(popularData) {
var $popularList = $('.popular-body ul li a');
for (i in popularData) {
$popularList.find('.rank')[i].textContent = parseInt(i)+1;
$popularList.find('.keyword')[i].textContent = `${popularData[i]}`;
}
}
var index = 0;
function changePopularSliderText () {
if(index>= popularData.length) {
index=0;
}
$popularSlider[0].textContent = `${index+1} ${popularData[index]}`
index++;
setTimeout(() => {
changePopularSliderText();
}, 3000, 60000);
}
changePopularSliderText ();
$(this)
를 사용해 클릭한 객체에만 토글 기능이 적용되도록 했다.#today-art .today-frame ul .card .btn-like.checked {
background-image: url(../img/love.png);
}
var $btnLike = $('.btn-like');
$btnLike.click(function() {
$(this).toggleClass('checked');
});
owl2
라이브러리 적용해보기display:none
상태였다. 자바스크립트를 적용해야 보이기 시작한다.<div id="main-banner">
<div class="owl-carousel">
<!-- <div class="item">1</div> -->
</div>
</div>
#main-banner {
position: relative;
width: 100%;
height: 480px;
}
#main-banner .owl-carousel {
width: 100%;
height: 480px;
}
#main-banner .owl-carousel .item {
width: 100%;
height: 480px;
background-image: url(../img/banner/product1.jpg);
background-position: center;
background-size: cover;
}
$('.owl-carousel').owlCarousel({
loop:true,
margin:0,
nav:false,
items: 1,
dots: false,
autoplay: true,
autoplayTimeout: 3000,
autoplayHoverPause: true
})
배너 이미지 파일은 product1, product2.. 이런 식으로 이름을 붙여두었다. 그래서 이미지 개수만 있으면 이미지 경로 텍스트를 생성할 수 있도록 했다.
function setBanner(number) {
var bannerList = [];
for (var i=1; i<=number; i++){
bannerList.push(`../idus/img/banner/product${i}.jpg`);
}
}
var item = document.createElement('div').classList.add('item');
을 시도했으나 욕심인지 잘 실행되지 않아서 코드를 나누었다.function setBanner(number) {
var bannerList = [];
for (var i=1; i<=number; i++){
bannerList.push(`../idus/img/banner/product${i}.jpg`);
}
var carousel = document.querySelector('#main-banner .owl-carousel');
for (i in bannerList) {
var item = document.createElement('div');
item.classList.add('item');
item.style.backgroundImage = `url(${bannerList[i]})`;
carousel.appendChild(item);
}
}
// 현재 이미지 3개 넣어둠
setBanner(3);
var $popularList = $('.popular-body ul li a');
$popularList[i].find('.rank'); // 안 됨
$popularList.find('.rank')[i] // 됨
오늘은 예전에 만든 페이지를 수정하고 자바스크립트 기능을 여러 개 추가해보았다. 만들고 싶었지만 예전에 하지 못했던 부분들을 지금은 할 수 있게 되었다는 점에서 굉장히 뿌듯했다. 내일은 영역의 아래쪽을 더 만들어봐야겠다.