Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- includes()
- myshortcut
- 노션
- strpos()
- explode()
- 배열
- 1064
- Excel
- primary_key
- php
- 동작안함
- JavaScript
- formula
- 오류
- MySQL
- implode()
- getimagesize()
- error
- srtpos()
- 이걸 그렇게 쓸 줄은 몰랐지
- 서버부하
- jQuery
- SQL
- 문자열 포함여부
- 일부 문자열 포함여부
- 중간에추가
- ES6
- 특수문자 포함여부
- 지직거림
- 정규식
Archives
- Today
- Total
코딩짜는 일상
[Alpine JS] 간단한 리스트 페이징 만들기 본문
반응형
알파인 JS가 심플해서 마음에 든 김에 좀 살펴보다가
근래 리스트 페이징 만들 때 고생했던 게 떠올라 만들어 봤습니다.
인터넷에 검색하면 전부 ajax
로 불러와서 <li>
들을 치환하라고 하는데
당시 조금 급하게 완성해야해서 머리도 안 돌아가고 당황했던 기억이...ㅜㅠ
각설하고 컨셉은~
예제중 가장 첫번째인 x-on:clikc
으로 x-data
를 늘이고 줄이는 예제와x-show
와 x-transition
을 이용해 해당 요소를 숨겼다 꺼내는 예제를 섞습니다!
연산자 중에 %
가 있죠?x-data="{val: 0}"
를 만들고 이걸 x-on:clikc
으로 늘였다 줄이고요.
x-show의 값은 val%'페이징갯수'=='현재페이지번호(0부터 시작)'
이렇게 해주면 해당 페이지만 true가 되면서 보여지고
다른 페이지들은 자동으로 숨겨지는 예제입니다!
예제 코드
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script defer src="https://unpkg.com/alpinejs@3.10.4/dist/cdn.min.js"></script>
<title>Document</title>
</head>
<body>
<div x-data="{val: 0}">
<ul x-show="val%3==0" x-transition>
<li>A</li>
<li>B</li>
<li>C</li>
</ul>
<ul x-show="val%3==1" x-transition>
<li>A1</li>
<li>B1</li>
<li>C1</li>
</ul>
<ul x-show="val%3==2" x-transition>
<li>A2</li>
<li>B2</li>
<li>C2</li>
</ul>
<button x-on:click="val = val-1">이전</button>
<button x-on:click="val = val+1">다음</button>
</div>
</body>
</html>
아주 간단합니다!
반복문으로 배열을 화면에 뿌려줄 때 특정 갯수 이상 <li>
가 생성되면
자동으로 다음페이지가 되도록 조건문만 추가해주면 되겠죠~
단점은 x-transition으로 각 페이지가 바뀔 때
이전 페이지와 다음 페이지가 아주 잠깐, 한 0.3초정도?
동시에 떴다가 사라지는 이슈 때문에
리스트가 길어졌다가 되돌아오는 모습을 보입니다.
덤으로 val이 0일 때 이전버튼을 누르면 표시할 목록이 없어서
빈 리스트가 보여지는 문제가 있죠.
그걸 보완한 완성 코드입니다!
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script defer src="https://unpkg.com/alpinejs@3.10.4/dist/cdn.min.js"></script>
<title>Document</title>
</head>
<body>
<div x-data="{val: 0}">
<div style="overflow: hidden; height: 100px;">
<ul x-show="val%3==0" x-transition>
<li>A</li>
<li>B</li>
<li>C</li>
</ul>
<ul x-show="val%3==1" x-transition>
<li>A1</li>
<li>B1</li>
<li>C1</li>
</ul>
<ul x-show="val%3==2" x-transition>
<li>A2</li>
<li>B2</li>
<li>C2</li>
</ul>
</div>
<button x-on:click="val = val-1" x-show="val>0">이전</button>
<button x-on:click="val = val+1" x-show="val<2">다음</button>
</div>
</body>
</html>
짜잔~ 완성!
좋은하루 되세요~
반응형