Recent Posts
Recent Comments
HEROJOON 블로그(히로블)
Jquery Scroll값 위치로 이동하기(window.scrollTo) 본문
반응형
1. 환경
- Framework : Spring Boot 2.2.4
- Build : Gradle 5.2
- JDK : JDK8
- Front : JSP
- Rendering : Server Side Rendering
2. 목표
: 리스트 페이지에서 상세 페이지 이동후 다시 리스트 페이지로 돌아올 때 scroll값을 기억할 수 있게 한다.
더보기
<리스트 페이지>
<상세 페이지>
<리스트로 돌아왔을 때 이전 scroll값으로 이동됨>
<리스트 페이지>
<상세 페이지>
<리스트로 돌아왔을 때 이전 scroll값으로 이동됨>
3. window.scrollTo를 이용해서 scroll 위치 지정
3-1. 스크롤 위치 기억
// LocalStorage에 스크롤 위치값 저장
localStorage.setItem("scrolly", scrollY)
3-2. 스크롤 값으로 위치 지정
var scrollY = localStorage.getItem("scrolly"); // LocalStorage에 저장된 scroll Y의 위치값 조회.
window.scrollTo(0, scrollY); // scroll 위치 지정 window.scrollTo(scrollX값, scrollY값)
4. 코드 작성 (by herojoon)
4-1. Controller 작성
package com.example.demojsp.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* jquery scroll 테스트 (animate효과없이 원하는 scroll위치에 바로 적용됨)
* by herojoon
* date 2020-02-27
*/
@Controller
@RequestMapping("scroll/position")
public class ScrollPositionController {
/**
* Jquery Scroll을 테스트하기위한 리스트 페이지 이동 함수
* @return
*/
@GetMapping(value = "list")
public ModelAndView scrollListPage() {
// sample list data
List<Map<String, Object>> datas = new ArrayList<>();
for (int i=0; i<31; i++) {
Map<String, Object> data = new HashMap<>();
data.put("no", i+1);
data.put("name", "user" + (i+1));
data.put("memo", "hello " + (i+1));
datas.add(data);
}
ModelAndView mav = new ModelAndView();
mav.setViewName("scroll/position/list");
mav.addObject("datas", datas);
return mav;
}
/**
* Jquery Scroll을 테스트하기위한 상세 페이지 이동 함수
* @param no
* @param name
* @param memo
* @return
*/
@GetMapping(value = "detail")
public ModelAndView scrollDetailPage(
@RequestParam(value = "no") Integer no,
@RequestParam(value = "name") String name,
@RequestParam(value = "memo") String memo) {
ModelAndView mav = new ModelAndView();
mav.setViewName("scroll/position/detail");
mav.addObject("no", no);
mav.addObject("name", name);
mav.addObject("memo", memo);
return mav;
}
}
4-2. JSP 페이지 생성
1) 리스트 페이지 (dir : scroll/position/list.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<!-- scroll 위치를 명확히 보기 위하여 style을 추가 -->
<style type="text/css">
table {
width: 100%;
border: 1px solid black;
}
td {
padding: 10px 10px 10px 10px;
border-top: 1px solid black;
}
</style>
<title>Scroll Test를 위한 List Page</title>
</head>
<body>
<h1>Scroll Test를 위한 List Page</h1>
<br><br>
<table>
<tr>
<th>No</th>
<th>Name</th>
<th>Memo</th>
</tr>
<c:forEach var="data" items="${datas}">
<tr style="cursor:pointer" onclick="moveDetailPage(${data.no}, '${data.name}', '${data.memo}')">
<td><c:out value="${data.no}" /></td>
<td><c:out value="${data.name}" /></td>
<td><c:out value="${data.memo}" /></td>
</tr>
</c:forEach>
</table>
<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
<script type="text/javascript">
var scrollHeight = 0;
/**
* scroll 위치 지정
*/
$(document).ready(function() {
var scrollY = localStorage.getItem("scrolly"); // LocalStorage에 저장된 scroll Y의 위치값 조회.
if (scrollY != null && scrollY != '' && scrollY > 0) {
window.scrollTo(0, scrollY);
}
});
/**
* scroll이 움직일때마다 scroll값을 전역변수에 넣어줌.
*/
$(window).scroll(function () {
scrollHeight = $(document).scrollTop();
});
/**
* move detail page
* @param no
* @param name
* @param memo
*/
function moveDetailPage(no, name, memo) {
localStorage.setItem("scrolly", scrollY); // LocalStorage에 scroll Y의 위치값 저장.
// 상세 페이지 이동
location.href = "/scroll/position/detail?no=" + no
+ '&name=' + encodeURIComponent(name)
+ '&memo=' + encodeURIComponent(memo)
}
</script>
</body>
</html>
2) 상세 페이지 (dir : scroll/position/detail.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Scroll Test를 위한 Detail Page</title>
</head>
<body>
<h1>Scroll Test를 위한 Detail Page</h1>
<br><br>
<div>
<li>no : ${no}</li>
<li>name : ${name}</li>
<li>memo : ${memo}</li>
</div>
<br><br>
<div>
<button style="cursor:pointer" onclick="moveListlPage()">scroll 위치 확인하기</button>
</div>
<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
<script type="text/javascript">
/**
* move list page
*/
function moveListlPage() {
location.href = "/scroll/position/list"
}
</script>
</body>
</html>
반응형
Comments