티스토리 뷰

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>반응형 공지사항 게시판</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
/* [1] 기본 및 레이아웃 설정 */
:root { --primary-color: #007bff; --border-color: #dee2e6; }
body { font-family: 'Pretendard', sans-serif; background: #f8f9fa; padding: 20px; color: #333; }
.container { max-width: 1000px; margin: 0 auto; background: #fff; padding: 30px; border-radius: 12px; box-shadow: 0 4px 10px rgba(0,0,0,0.05); }
h2 { margin-top: 0; padding-bottom: 20px; border-bottom: 2px solid var(--primary-color); }
/* [2] 반응형 테이블 스타일 */
.board-table { width: 100%; border-collapse: collapse; margin-bottom: 30px; }
.board-table th, .board-table td { padding: 15px; border-bottom: 1px solid var(--border-color); text-align: center; }
.board-table th { background: #f1f3f5; font-weight: bold; font-size: 14px; }
.board-table .title-cell { text-align: left; cursor: pointer; }
.board-table .title-cell:hover { text-decoration: underline; color: var(--primary-color); }
/* 모바일 대응: 너비가 600px 이하일 때 */
@media screen and (max-width: 600px) {
.board-table thead { display: none; } /* 제목 행 숨김 */
.board-table tr { display: block; border-bottom: 2px solid var(--border-color); padding: 10px 0; }
.board-table td { display: block; text-align: left; padding: 5px 15px; border: none; }
.board-table td:before { content: attr(data-label); font-weight: bold; width: 60px; display: inline-block; color: #888; }
.board-table .title-cell { font-size: 1.1rem; font-weight: bold; padding-top: 10px; }
}
/* [3] 페이징 스타일 */
.pagination { display: flex; justify-content: center; gap: 5px; list-style: none; padding: 0; }
.pagination li { cursor: pointer; padding: 8px 14px; border: 1px solid var(--border-color); border-radius: 4px; font-size: 14px; }
.pagination li:hover { background: #f1f3f5; }
.pagination li.active { background: var(--primary-color); color: white; border-color: var(--primary-color); }
.pagination li.disabled { color: #ccc; cursor: default; pointer-events: none; }
</style>
</head>
<body>
<div class="container">
<h2>📢 공지사항</h2>
<table class="board-table">
<thead>
<tr>
<th style="width: 80px;">순번</th>
<th>제목</th>
<th style="width: 120px;">작성자</th>
<th style="width: 120px;">날짜</th>
</tr>
</thead>
<tbody id="board-body">
</tbody>
</table>
<ul class="pagination" id="pagination"></ul>
</div>
<script>
$(document).ready(function() {
// 1. 대량의 샘플 데이터 생성 (실제로는 서버 API 호출)
let noticeData = [];
for (let i = 1; i <= 55; i++) {
noticeData.push({
no: i,
title: i + "번째 공지사항 제목입니다. 중요한 내용을 확인하세요.",
author: "관리자",
date: "2026-01-" + (i % 31 + 1).toString().padStart(2, '0')
});
}
// 최신글이 위로 오도록 역순 정렬
noticeData.reverse();
const itemsPerPage = 10; // 페이지당 글 수
let currentPage = 1;
// 2. 게시글 출력 함수
function displayBoard(page) {
currentPage = page;
const start = (page - 1) * itemsPerPage;
const end = start + itemsPerPage;
const paginatedData = noticeData.slice(start, end);
let html = "";
paginatedData.forEach(item => {
html += `
<tr>
<td data-label="순번">${item.no}</td>
<td data-label="제목" class="title-cell">${item.title}</td>
<td data-label="작성자">${item.author}</td>
<td data-label="날짜">${item.date}</td>
</tr>`;
});
$('#board-body').html(html);
displayPagination();
}
// 3. 페이징 버튼 생성 함수
function displayPagination() {
const totalPages = Math.ceil(noticeData.length / itemsPerPage);
let paginationHtml = "";
// 이전 버튼
paginationHtml += `<li class="${currentPage === 1 ? 'disabled' : ''}" onclick="changePage(${currentPage - 1})"><</li>`;
// 페이지 번호 (최대 5개씩 표시 예시)
for (let i = 1; i <= totalPages; i++) {
paginationHtml += `<li class="${currentPage === i ? 'active' : ''}" onclick="changePage(${i})">${i}</li>`;
}
// 다음 버튼
paginationHtml += `<li class="${currentPage === totalPages ? 'disabled' : ''}" onclick="changePage(${currentPage + 1})">></li>`;
$('#pagination').html(paginationHtml);
}
// 4. 페이지 변경 함수 (글로벌 스코프)
window.changePage = function(page) {
displayBoard(page);
};
// 초기 실행
displayBoard(1);
});
</script>
</body>
</html>
반응형 공지사항 게시판 (JSON _ 페이징 포함).html
0.01MB
※ 해당 내용은 Google Gmini3.0에서 작성되었습니다.
'WEB > JQuery' 카테고리의 다른 글
| 공지사항 등록/수정 (0) | 2026.01.23 |
|---|---|
| 공지사항 상세보기 화면 (View) (0) | 2026.01.23 |
| 프로필 이미지 기능이 포함된 인사 관리 시스템 (0) | 2026.01.23 |
| 검색 결과 바로 선택 기능이 추가된 통합 코드 (0) | 2026.01.22 |
| 인사 관리 트리 탐색기 (검색/초기화 버튼 포함) (0) | 2026.01.22 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 광주분식 #광주분식맛집 #상추튀김 #상추튀김맛집 #광주상추튀김
- 탭메뉴자바스크립트
- thymeleaf
- 좋은책 #밥프록터 #부의원리
- 연명의료결정제도 #사전연명의료의향서 #사전연명의료의향서등록기관 #광주사전연명의료의향서
- 좋은책
- ajax
- 테스크탑무선랜카드 #무선랜카드 #아이피타이무선랜카드 #a3000mini #무선랜카드추천
- 와이파이증폭기추천 #와이파이설치
- css미디어쿼리 #미디어쿼리 #mediaquery
- 파비콘사이즈
- // 사진직: 데이터가 없으면 DEFAULT_IMG 사용 const profileSrc = (d.img && d.img !== "") ? d.img : DEFAULT_IMG;('#user-photo').attr('src'
- sw기술자평균임금 #2025년 sw기술자 평균임금
- 바지락칼국수 #월곡동칼국수 #칼국수맛집
- iptime와이파이증폭기 #와이파이증폭기설치
- 자바스크립트정규표현식
- 쇼팬하우어 #좋은책
- SQL명령어 #SQL
- 증폭기 #아이피타임증폭기
- 자바스크립트 #javascript #math
- 썬크림 #닥터지썬크림 #내돈내산 #내돈내산썬크림 #썬크림추천 #spf50썬크림 #닥터지메디유브이울트라선
- 정보처리기사 #정보처리기사요약 #정보처리기사요점정리
- jdk #jre
- lg그램pro #lg그램 #노트북 #노트북추천 #lg노트북
- 자바스크립트countiue
- jQuery #jQuery이미지슬라이드 #이미지슬라이드
- echart
- 파비콘 #파비콘 사이트에 적용
- 무료폰트 #무료웹폰트 #한수원한돋움 #한수원한울림 #한울림체 #한돋움체
- 자바스크립트break
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 29 | 30 | 31 |
글 보관함

