이렇게 더보기 버튼을 누르면 추가의 책 자료들을 보여주는 ui를 만들었다. HTML은 거의 비워두고 자바스크립트로만 동작한다고 볼 수 있다.
HTML
<divclass="section">
<divclass="wrap">
<ulclass="content-box">
</ul>
<buttonclass="more">더보기</button>
</div>
</div>
HTML은 큰 틀과 더보기 버튼만 담아두었다.
CSS
.content-box{
display: flex;
flex-wrap: wrap;
padding: 120px;
}
.content{
padding: 40px;
width: 300px;
height: 500px;
}
.photo{
width: 250px;
height: 250px;
background-color: #999;
display: flex;
align-items:center;
justify-content: center;
font-size: 40px;
}
.title{
display: block;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
font-size: 40px;
}
.author, .price{
display: block;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
font-size: 30px;
margin-top: 20px;
}
.more{
display: block;
padding: 40px60px;
font-size: 40px;
background-color: #666;
border-radius: 40px;
margin: 0auto;
cursor: pointer;
}
자바스크립트로 HTML요소들을 넣어줄 것이기 때문에 그 HTML 요소들에 CSS를 입히는 작업이다.
제목을 보면 본인 박스의 길이보다 넘치면 ...으로 생략되는 것을 볼 수 있는데 .title이나 .author, .price의 css 요소를 보면 display: block, white-space: nowrap; text-overflow:ellipsis; overflow: hidden 을 볼 수 있다. 위의 요소가 한 패키지처럼 이루어져야 ...으로 생략이 될 수 있다.
이렇게 외부에서 데이터를 받아왔다는 가정하게 두개의 데이터 object 자료를 준비했고, 반복문을 활용해 기존 큰 틀에 content를 갯수만큼 넣어주게 했다. 저렇게 변수에 템플릿을 만들어놓고 insertAdjacentHTML을 이용해 템플릿을 삽입했다. beforeend의 의미는 끝나기 전, 즉 제일 마지막 부분에 템플릿을 넣어달라는 의미이다.
more버튼을 클릭하면 data2의 요소들을 넣어주고 more버튼은 없어지게 했다.
데이터를 더 불러와서 한 번 더 클릭했을 때 more버튼이 사라지게 하고 싶으면 count를 변수로 지정해서 숫자를 올려주고 그 숫자에 따라 다르게 동작하게 만들면 되지 않을까 싶다.