JavaScript

97. (javascript/자바스크립트) spin js 라이브러리 사용해 로딩 loading 스핀 구현 실시

투케이2K 2021. 7. 23. 11:09

[ 개발 환경 설정 ]

개발 툴 : Edit++

개발 언어 : javascript


[소스 코드]

    <!-- spin js 라이브러리 -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/spin.js/2.3.2/spin.js"></script>



    <!-- 내부 JS 지정 -->
    <script>

    	/*
    	[JS 요약 설명]
    	1. window.onload : 브라우저 로드 완료 상태를 나타냅니다 
    	2. spin js : 브라우저 내에서 로딩 스핀 상태를 나타낼 수 있습니다 
    	3. 로직 : 사용자 통신 요청 시 >> spinnerStart 호출 >> 리턴 응답 받을 시 >> spinnerStop 호출    	
    	4. 옵션 참고 공식 사이트 : https://spin.js.org/
    	*/

   	
    	
    	/* [html 최초 로드 및 이벤트 상시 대기 실시] */
    	window.onload = function() {
    		console.log("");
    		console.log("[window onload] : [start]");
    		console.log("");

    		// 로딩 스피너 호출
    		spinnerStart();

    		/* setTimeout 호출 : 일정 시간 후 실행 : [함수호출] 일회용 */
    		setTimeout(spinnerStop, 3000); //5초후에 spinnerStop() 함수 호출
    	};



    	/* [spinnerStart 시작 이벤트 호출] */
    	function spinnerStart(){
    		console.log(""); 
    		console.log("[spinnerStart] : " + "[start]");           
    		console.log("");

    		// [로딩 부모 컨테이너 동적 생성]
    		var createLayDiv = document.createElement("div");
    		createLayDiv.setAttribute("id", "spinnerLay1000");
    		var createLayDivStyle = "width:100%; height:100%; margin:0 auto; padding:0; border:none;";
    		createLayDivStyle = createLayDivStyle + " float:top; position:fixed; top:0%; z-index:1000;";
    		createLayDivStyle = createLayDivStyle + " background-color:rgba(0, 0, 0, 0.3);"; // 불투명도 설정 >> 자식에게 적용 안됨
    		createLayDiv.setAttribute("style", createLayDivStyle);
    		document.body.appendChild(createLayDiv); //body에 추가 실시


    		// [실제 스핀 수행 컨테이너 동적 생성]
    		var createSpinDiv = document.createElement("div");
    		createSpinDiv.setAttribute("id", "spinnerContainer1000");
    		var createSpinDivStyle = "width:100px; height:100px; margin:0 auto; padding:0; border:none;"; // 스핀 컨테이너 크기 조절
    		createSpinDivStyle = createSpinDivStyle + " float:top; position:relative; top:40%;";
    		//createSpinDivStyle = createSpinDivStyle + " background-color:#ff0000;";  
    		createSpinDiv.setAttribute("style", createSpinDivStyle);
    		document.getElementById("spinnerLay1000").appendChild(createSpinDiv); //spinnerLay에 추가 실시


    		// [스핀 옵션 지정 실시]
    		var opts = {
    			lines: 10, // 그릴 선의 수 [20=원형 / 10=막대] [The number of lines to draw]
    			length: 10, // 각 줄의 길이 [0=원형 / 10=막대] [The length of each line]
    			width: 15, // 선 두께 [The line thickness]
    			radius: 42, // 내부 원의 반지름 [The radius of the inner circle]
    			scale: 0.85, // 스피너의 전체 크기 지정 [Scales overall size of the spinner]
    			corners: 1, // 모서리 라운드 [Corner roundness (0..1)]
    			color: '#003399', // 로딩 CSS 색상 [CSS color or array of colors]
    			fadeColor: 'transparent', // 로딩 CSS 색상 [CSS color or array of colors]
    			opacity: 0.05, // 선 불투명도 [Opacity of the lines]
    			rotate: 0, // 회전 오프셋 각도 [The rotation offset]
    			direction: 1, // 회전 방향 시계 방향, 반시계 방향 [1: clockwise, -1: counterclockwise]
    			speed: 1, // 회전 속도 [Rounds per second]
    			trail: 74, // 꼬리 잔광 비율 [Afterglow percentage]
    			fps: 20, // 초당 프레임 수 [Frames per second when using setTimeout() as a fallback in IE 9]
    			zIndex: 2e9 // 인덱스 설정 [The z-index (defaults to 2000000000)]
    		};


    		// [스피너 매핑 및 실행 시작]
    		var target = document.getElementById("spinnerContainer1000");
    		var spinner = new Spinner(opts).spin(target);
    	};




    	/* [spinnerStop 중지 이벤트 호출] */
    	function spinnerStop(){
    		console.log("");
    		console.log("[spinnerStop] : " + "[start]");
    		console.log("");
    		try {
    			// [로딩 부모 컨테이너 삭제 실시]
    			var tagId = document.getElementById("spinnerLay1000");
    			document.body.removeChild(tagId); //body에서 삭제 실시 
    		}
    		catch (exception) {
    			// console.error("catch : " + "not find spinnerLay1000");
    		}

    	};
    	
    </script>

[결과 출력]


[요약 설명]

/*

[JS 요약 설명]

1. window.onload : 브라우저 로드 완료 상태를 나타냅니다

2. spin js : 브라우저 내에서 로딩 스핀 상태를 나타낼 수 있습니다

3. 로직 : 사용자 통신 요청 시 >> spinnerStart 호출 >> 리턴 응답 받을 시 >> spinnerStop 호출

4. 옵션 참고 공식 사이트 : https://spin.js.org/

*/


 

반응형