타입스크립트란?

타입스크립트는 자바스크립트에 타입을 부여한 언어입니다.
자바스크립트의 확장된 언어라고 볼 수 있습니다. 타입스크립트는 자바스크립트와 달리 브라우저에서 실행하려면 파일을 한번 변환해주어야 합니다. 이 변환 과정을 우리는 컴파일(complile) 이라고 부릅니다.

타입스크립트 장점

- 에러의 사전방지
- 코드 가이드 및 자동완성 (개발 생산성 향상)


타입스크립트 사용을 고려해야 하는 이유
타입스크립트는 코드에 목적을 명시하고 목적에 맞지 않는 타입의 변수나 함수들에서 에러를 발생시켜 버그를 사전에 제거합니다. 또한 코드 자동완성이나 실행 전 피드백을 제공하여 작업과 동시에 디버깅이 가능해 생산성을 높일 수 있습니다.

TypeScript는 정적 타입을 지원하므로 컴파일 단계에서 오류를 포착할 수 있는 장점이 생긴다

// sample.ts

// 아래처럼 타입을 정의해주어 코드상에서 정해준 타입이 아니였을때 에러로 간주하여 알려줌. (사전방지)
fuction add(a: number, b: number): number {
	return a + b;
}
//add(10, 20);
// 두번째 '20'은 숫자가 아니기때문에 코드상에서 에러로 미리 간주하여 알려줌
add(10, '20');





https://www.typescriptlang.org/

JavaScript With Syntax For Types.

TypeScript extends JavaScript by adding types to the language. TypeScript speeds up your development experience by catching errors and providing fixes before you even run your code.

www.typescriptlang.org

https://imagineu.tistory.com/m/6

[Typescript] 타입스크립트를 "사용해야 하는" 이유 (+ 온라인에서 연습하기)

자바스크립트는 전세계의 97% 이상의 웹사이트에서 사용되고 있는 만큼 가장 인기 있는 프로그래밍 언어 중에 하나입니다. 자바스크립트는 웹사이트를 동적으로 만들 수 있고 다른 복잡한 기능

imagineu.tistory.com



https://joshua1988.github.io/ts/

타입스크립트 핸드북

joshua1988.github.io

https://joshua1988.github.io/web-development/javascript/promise-for-beginners/
https://jsonplaceholder.typicode.com/

VSCode 플러그인 목록

문법검사: ESLint, TSLint
실습 환경보조: Live Server
Pretiier, Project Manager, Auto Close Tags 등

반응형

for .. in 문

  • 객체의 프로퍼티 키 열거 전용
  • for in문은 for문가 다르게 동작하는 반복문이다.
  • for에 들어가는 인자 형태가 서로 다르다.
  • for / in 문은 해당 객체의 모든 열거할 수 있는 프로퍼티(property)를 순회할 수 있도록 해준다.
(주의) 해당 객체가 상속받는 프로토타입 체인상의 모든 프로퍼티 키를 열거한다.(단, [[Enumerable]] 값이 false인 프로퍼티는 제외)
for(const key in 객체){
	//...반복 수행 코드...
}

const obj = { 
	name: 'curryyou', job: 'engineer' 
} 
for (const key in obj){ 
	console.log(`${key} : ${obj[key]}`); 
}
// name : curryyou 
// job : engineer

 


for .. of 문

  • 이터러블 순회 전용
  • Iterator 속성이 있는 객체인 Array, Map, Set, String, TypedArray, arguments 등의 값을 반복할 수 있으며, string 문자열에도 적용할 수 있다.
  • Array, Map, Set, arguments 등이 해당됨 (Object는 해당 X)
  • for ...of 문은 반복 가능한 객체(iterable)를 순회할 수 있도록 해준다.
  • for in문 문법은 동일하지만 순회하는 대상에 차이가 있다.
  • for of 문은 Set 객체를 순회할 수 있지만 for in문은 객체를 순회할 수 없다.
for ...of 반복문은 ES6에 추가된 새로운 컬렉션 전용 반복 구문입니다.
for ...of구문을 사용하기 위해선 컬렉션 객체가 [Symbol.iterator] 속성을 가지고 있어야만 합니다(직접 명시 가능).
// Array 
for (const val of ['a', 'b', 'c']) { 
	console.log(val); 
	// 'a','b','c' 
} 

// Array2
const arr = [10, 20, 30]; 
for (const item of arr){ 
    console.log(item); 
    // 10, 20, 30 출력 
}

// String 
for (const val of 'abc') { 
	console.log(val); 
	// 'a','b','c' 
} 

// Object 
for ( let val of {1 :'a', 2 :'b', 3 :'c'} ) { 
	console.log(val); 
	// TypeError: object is not iterable 
}

 

 

참조

반응형

템플릿 리터럴이란 자바스크립트에서 문자열을 입력하는 방식입니다. 기존에는 var str = 'Hello ES6'와 같은 방식으로 사용하였으나 ES6에서는 백틱(back-tick)이라는 기호(`)를 사용하여 정의합니다.

const str = `Hello ES6`;

 

여러 줄에 걸쳐 문자열 선언하기

 

기존 자바스크립트 문자열 선언 작은따옴표 '는 아래와같은 문제가 있다. 자동으로 개행이 되지않아 \n 을 중간중간 추가해줘야함...

var str = 'Template literals are string literals allowing embedded expressions. \n' + 
'You can use multi-line strings and string interpolation features with them. \n' + 
'They were called "template strings" in prior editions of the ES2015 specification.';

백틱을 이용하면 문자열 선언시엔 개행할 필요가 없다. 

const str = `Template literals are string literals allowing embedded expressions.
You can use multi-line strings and string interpolation features with them.
They were called "template strings" in prior editions of the ES2015 specification.`;

 

문자열 중간에 변수 바로 대입하기

 

기존 문자열 정의 방식에서 또 번거로웠던 부분은 바로 자바스크립트 변수 값을 문자열과 함께 사용하는 부분이었습니다.

 

기존

var language = 'Javascript';
var expression = 'I love ' + language + '!';
console.log(expression); // I love Javascript!

백틱안에서 ${}  을 이용하면 변수의 값을 대입할수 있고 간단한 연산도 가능하다.

var language = 'Javascript';
var expression = `I love ${language.split('').reverse().join('')}!`;
console.log(expression); // I love tpircsavaJ!

 

반응형

Destructuring (디스트럭처링) ES6문법

 

기본 객체 배열구조

var arr = [1, 2, 3, 4];
var obj = {
  a: 10,
  b: 20,
  c: 30
};

'구조 분해' 변수 선언 형식이 아래와 같이 자유로워지는 것

var { a, b, c } = obj;

ES6에선 정상동작됨

console.log(a); // 10
console.log(b); // 20
console.log(c); // 30

 

구조 분해 문법을 적용하면 훨씬 더 간편하게 꺼내올 수 있다.

var josh = {
  language: 'javascript',
  position: 'front-end',
  area: 'pangyo',
  hobby: 'singing',
  age: '102'
};

var { language, position, area, hobby, age } = josh;
console.log(language); // javascript
console.log(position); // front-end
console.log(area); // pangyo
console.log(hobby); // singing
console.log(age); // 102

코드 라인 숫자를 줄일 수 있고, 이 문법이 익숙해지면 전체적으로 코드가 더 간결해지는 것을 느낄 수있다.

 

 

https://joshua1988.github.io/es6-online-book/destructuring.html#%ED%8A%B9%EC%A0%95-%EA%B0%9D%EC%B2%B4%EC%9D%98-%EA%B0%92%EC%9D%84-%EA%BA%BC%EB%82%B4%EC%98%A4%EB%8A%94-%EB%B0%A9%EB%B2%95

 

Destructuring | Vue.js + ES6

구조 분해 문법(Destructuring) 디스트럭처링이라고 하는 이 ES6 문법은 한글로 번역하면 구조 분해 문법입니다. 구조 분해(?)라는 억지스러운 용어를 설명하기 전에 여기서 말하는 '구조'라는 단어를

joshua1988.github.io

 

반응형

자바스크립트의 비동기 처리 시리즈의 마지막 연재물 async & await 문법.

async & await

async와 await는 자바스크립트의 비동기 처리 패턴 중 가장 최근에 나온 문법으로

기존의 비동기 처리 방식인 콜백 함수와 프로미스의 단점을 보완하고

개발자가 읽기 좋은 코드를 작성할 수 있게 도와준다.

https://joshua1988.github.io/web-development/javascript/js-async-await/

 

자바스크립트 async와 await

(중급) 자바스크립트 개발자를 위한 async, await 사용법 설명. 쉽게 알아보는 자바스크립트 async await 개념, 사용법, 예제 코드, 예외 처리 방법

joshua1988.github.io

자바스크립트 비동기 처리와 콜백 함수

https://joshua1988.github.io/web-development/javascript/javascript-asynchronous-operation/

 

자바스크립트 비동기 처리와 콜백 함수

(중급) 중급 자바스크립트 개발자가 되기 위한 자바스크립트 비동기 처리와 콜백 함수 이해하기. 콜백 지옥과 해결 방법 등

joshua1988.github.io

자바스크립트 Promise 쉽게 이해하기

https://joshua1988.github.io/web-development/javascript/promise-for-beginners/

 

자바스크립트 Promise 쉽게 이해하기

(중급) 자바스크립트 입문자를 위한 Promise 설명. 쉽게 알아보는 자바스크립트 Promise 개념, 사용법, 예제 코드. 예제로 알아보는 then(), catch() 활용법

joshua1988.github.io

 

반응형

https://swagger.io/

 

API Documentation & Design Tools for Teams | Swagger

 

swagger.io

 

반응형

https://gxnzi.tistory.com/94

 

Chrome 브라우저에서 Ajax 테스트

서버에 올리지 않은 로컬의 HTML 파일에서 크롬을 통해 Ajax 테스트를 하는 경우 Access to XMLHttpRequest at 'file:///xxxxxx' from origin 'null' has been blocked by CORS policy: Cross origin requests are..

gxnzi.tistory.com

http://jinolog.com/programming/javascript/2011/03/21/jquery-ready-function.html

 

window.onload를 대체하는 jquery의 ready 함수 - Jinolog

2011.03.21 00:41 window.onload를 대체하는 jquery의 ready 함수 window.onload 함수는 웹페이지의 로딩이 끝나는 시점에 실행되는 함수다 window.onload = function () { alert("로딩 완료"); } 와 같이 사용하게 되면 페이지 로드가 끝난 후에 "로딩 완료" 라는 얼럿창이 뜨게 된다 하지만 onload에는 몇가지 단점이 있는데, 이 함수는 페이지 안의 이미지나 외부 파일이 로드 될때까지도

jinolog.com

 

https://codediver.tistory.com/33

 

[JavaScript] 동적 로딩

Dynamic Script Loading 동적으로 자바스크립트를 로딩하는 방법 중 하나는 script 태그를 자바스크립트 코드에서 직접 생성하는 것인데요. 다음과 같이 script 태그를 생성하고 src에 로딩할 주소를 넣음으로서..

codediver.tistory.com

https://developers.google.com/analytics/devguides/collection/analyticsjs/

 

Adding analytics.js to Your Site  |  Analytics for Web (analytics.js)  |  Google Developers

A JavaScript library that lets you measure how users interact with your website.

developers.google.com

https://gxnzi.tistory.com/94

 

Chrome 브라우저에서 Ajax 테스트

서버에 올리지 않은 로컬의 HTML 파일에서 크롬을 통해 Ajax 테스트를 하는 경우 Access to XMLHttpRequest at 'file:///xxxxxx' from origin 'null' has been blocked by CORS policy: Cross origin requests are..

gxnzi.tistory.com

 

반응형

https://codediver.tistory.com/33

 

[JavaScript] 동적 로딩

Dynamic Script Loading 동적으로 자바스크립트를 로딩하는 방법 중 하나는 script 태그를 자바스크립트 코드에서 직접 생성하는 것인데요. 다음과 같이 script 태그를 생성하고 src에 로딩할 주소를 넣음으로서..

codediver.tistory.com

 

반응형

iframe 태그 (비추천)

iframe을 통해 html을 import할 경우 문제점

  • XSS 공격에 취약합니다. 악의적인 스크립트를 가지고 있는 사이트를 띄울 수 있다고 합니다. 물론 이래저래 공격을 피하는 방법으로 여러가지 방법이 제시되어 있긴합니다
  • 외부 스타일 적용이 어렵습니다. 특히 height 값이 마음대로 조작되지 않는다고 합니다 (스크롤이 자동으로 생성됨) 제이쿼리로 해결하는 방법이 있다고는 하지만 매우 번거로운 것 같습니다
  • 웹 크롤링 문제. iframe으로 불러온 소스는 숨겨져 있어서 찾기가 어렵습니다. 
  • 접근성, 사용성 저하 문제. 프레임 구조의 문서는 제목을 프레임 셋 본체의 <title> 제목으로 보여주기 때문입니다. 검색 엔진에 등록시 프레임셋 뿐만 아니라 메뉴용, 콘텐츠용 페이지들까지 함께 크롤링이 되는데, 경로로 들어가면 프레임에 넣어서 표시하도록 만든 페이지만 뜨게됩니다.
  • frame으로 불러온 페이지의 데이터가 큰 경우 브라우저의 속도 저하가 우려

 

JS를 이용한 HTML include

 

 

  • <head>에 <script src="js/includeHTML.js"></script>를 넣어준다.
  • <body>에 <div include-html="navbar.html"></div>를 넣고 <script>includeHTML();</script>를 호출해준다. 여기서는 navbar를 관리하고 있다.
// includeHTML.js

function includeHTML() { 
	var z, i, elmnt, file, xhttp; 
	z = document.getElementsByTagName("*"); 
	for (i = 0; i < z.length; i++) { 
    	elmnt = z[i]; 
    	file = elmnt.getAttribute("include-html"); 
    	if (file) { xhttp = new XMLHttpRequest(); 
    		xhttp.onreadystatechange = function() { 
    			if (this.readyState == 4 && this.status == 200) { 
    				elmnt.innerHTML = this.responseText; elmnt.removeAttribute("include-html"); 
    				includeHTML();
				} 
			} 
        	xhttp.open("GET", file, true); xhttp.send(); return; 
		} 
	} 
}
 

html in html - html에서 html을 불러오자~

index.html 파일에 div의 id가 contents인 곳에 testContents.html 파일을 넣는다고 했을 때 쉽게 쓸수 있는 방법은 import와 Jquery load 가 쉬울 것 같다. 1. impot 를 사용한 방법 index.html <!DOCTYPE html>..

beableto.tistory.com

 

html in html - html에서 html을 불러오자~

index.html 파일에 div의 id가 contents인 곳에 testContents.html 파일을 넣는다고 했을 때 쉽게 쓸수 있는 방법은 import와 Jquery load 가 쉬울 것 같다. 1. impot 를 사용한 방법 index.html ..

beableto.tistory.com

 

https://doolyit.tistory.com/15

 

javascript / jQuery 개발시 PC, 모바일 접속유무 확인하기

웹사이트 개발시, PC환경에서 접속을 했는지 모바일에서 접속을 했는지 확인하기 위한 javascript 코드 입니다. navigator 객체의 platform 속성을 이용하여 확인을 하게 됩니다. 아래 링크는 navigator 객체의 P..

doolyit.tistory.com

 

https://www.html5rocks.com/ko/tutorials/webcomponents/imports/

 

HTML Imports: #include for the web - HTML5 Rocks

HTML Imports allows you to include HTML/CSS/JS in other HTML documents.

www.html5rocks.com

 

https://webclub.tistory.com/316

 

브라우저 호환성 대응 방안

Browser Compatibility - 브라우저 호환성 대응 방안 PC/모바일에서 사용하는 브라우저가 다양하고 각각의 레이아웃 엔진, Javascript 엔진이 다르고 지원하는 기능 범위도 차이가 있습니다. 부분적인 기능이지만..

webclub.tistory.com

http://blog.naver.com/PostView.nhn?blogId=jb7xx8r&logNo=220650589541

 

link rel=import 에 대한 설명

개요

blog.naver.com

 

 

반응형

'UXUI Development > Javascript' 카테고리의 다른 글

자바스크립트 async / await  (0) 2021.12.23
API 문서 자동화 도구  (0) 2021.12.14
javascript 동적로딩  (0) 2019.06.12
script 내에 script호출  (0) 2019.06.12
자바스크립트  (0) 2019.05.29
날짜 분기 스크립트  (0) 2019.05.29
iframe/ContentDocument 프로퍼티 (+삼항연산자)  (0) 2019.04.04
여러개의 스크롤이벤트 사용시  (0) 2019.03.19

http://www.nextree.co.kr/p7363/

 

JavaScript : Scope 이해

JavaScript는 단순한 언어로 여겨져 왔습니다. 그래서 여러 개발자분들이 JavaScript를 배우기도 쉽고 간단히 쓸 수 있다는 편견을 가지고있습니다. 하지만, 최근 JavaScript의 관심이 늘어나면서 JavaScript는 더이상 '쉬운 언어'가 아닌 깊은 이해를 필요로 하는 언어라는 인식이 생기고있습니다. 저는 JavaScript에 대한 깊은 이해를 하기 위해서는 클로저(Closure)에 대해 알아야 되며 이를 알기 위해서는

www.nextree.co.kr

https://alnova2.tistory.com/967

 

[자바스크립트] Execution Context (실행 컨텍스트) 에 대하여

1. 실행 컨택스트 개념 자바스크립트가 실행될 떄에는 실행 단위인 실행 컨텍스트하에서 실행된다. 실행 가능한 자바스크립트 코드 블록이 실행되는 환경이라고 할 수 있다. 실행 컨텍스트(Execution Context)는 "..

alnova2.tistory.com

 

 

Chart 차트 라이브러리 (Chart.js)

Chart.js 

  • 무료/완전 오픈소스.
  • JS/HTML5/Canvas 기반.
  • 캔버스 기반이라 빅데이터 처리 애니메이션에 좋다.
  • 적당히 다양한 타입과 옵션.
  • 사용하기 매우 쉽다.
  • 필요한 모듈만 가져다 사용할 수 있음.
  • 반응형지원
  • vue.js wrapper : https://github.com/apertureless/vue-chartjs

https://www.chartjs.org/

 

Chart.js | Open source HTML5 Charts for your website

New in 2.0 New chart axis types Plot complex, sparse datasets on date time, logarithmic or even entirely custom scales with ease.

www.chartjs.org

 

Google Charts

https://developers.google.com/chart/interactive/docs/

 

Using Google Charts  |  Google Developers

Send feedback Using Google Charts Google Charts provides a perfect way to visualize data on your website. From simple line charts to complex hierarchical tree maps, the chart gallery provides a large number of ready-to-use chart types. The most common way

developers.google.com



 

반응형

http://changpd.blogspot.com/2014/01/javascript-jquery-cron.html

 

[javascript] 특정시간에만 함수 실행

특정시간에만 팝업을 띄우려면?? 특정시간에만 로그인을 막으려면?? 특정시간에만 할일은 의외로 참 많다. 방법? 딱히 없다. 현재시간 구해서 시작시간, 종료시간 사이에 있을때 시작하는 수밖엔. if ((현재시간 > 시작시간) && ...

changpd.blogspot.com

https://mainia.tistory.com/2564

 

자바스크립트 날짜 계산하는 다양한 방법

자바스크립트 날짜 계산하는 다양한 방법 프로그램 언어에서 가장 자주 찾는 항목 중에 하나가 날짜 계산입니다. 데이터베이스 테이블 설계할 때 날짜는 항상 들어가고 꺼내서 가공할 때도 날짜를 기준으로 많이..

mainia.tistory.com

https://github.com/jinyowo/JS-Calendar/wiki/**-moment.js-(%EB%82%A0%EC%A7%9C%EA%B4%80%EB%A0%A8-%EC%9E%91%EC%97%85%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC)

 

jinyowo/JS-Calendar

2017 FEinternship, simple calendar with javascript - jinyowo/JS-Calendar

github.com

https://ggmouse.tistory.com/103

 

[JavaScript] 오늘 날짜 (년, 월, 일) 및 날짜 비교 new Date() NaN

오늘 날짜 정보를 가져와보자 1 2 3 4 5 6 7 8 9 10 11 12 13

 

반응형

삼항연산자

var a = ( 조건문 ) ?  b  c  ;

               조건문이 true일때 b가 담기고, 조건문이 false일때 c가 담긴다.

 

if 조건문

if (a>b) {
	c =10;
} else {
	c= 20;
}

조건 (삼항)연산자

(a > b) ? c=10 : c=20;

html DOM 내에 iframe이 있고, 그 안에서 html 을 로드할 경우

페이지 내에 iframe이 있고, 그 안에 html페이지가 로드할 경우 사용

 

 

 

if 조건문

if ($('#iframe', parent.document).length > 0){
	var targetFrameContent = $('#iframe', parent.document).get(0);
	if (targetFrameContent.contentDocument) {
		targetFrameContent.contentDocument;
	} else {
		targetFrameContent.contentWindow.document;
	}
	('#iframe', parent.document).css({"height" : (targetFrameDocContent.body.scrollHeight + 17) + "px"});
}

 

조건 (삼항)연산자

if ($('#iframe', parent.document).length > 0){ 
	var targetFrameContent = $('#iframe', parent.document).get(0); 
    var targetFrameDocContent = (targetFrameContent.contentDocument) ? targetFrameContent.contentDocument : targetFrameContent.contentWindow.document;
	$('#iframe', parent.document).css({"height" : (targetFrameDocContent.body.scrollHeight + 17) + "px"});
}
		

삼항연산자를 사용하여 코드라인이 줄어드는 장점이 있으나 

가독성이 떨어 질 수 있으므로 증복처리는 피하는 것이 좋다.

  • if ($('#iframe', parent.document).length > 0){ ... }

      -  #iframe(자식요소)의 parent.document (iframe의 부모요소) 길이가 0보다 클 때 실행


 

  • var targetFrameContent = $('#iframe', parent.document).get(0);

       #iframe(자식요소)의 parent.document(iframe의 부모요소)에서 첫번째 인덱스(0)를 가져와 targetFrameContent 에 대입

    -  $(selector).get(index);  : 선택한 요소를 배열의 (index)번째로 가져온다. 

 


 

  • (targetFrameContent.contentDocument)  targetFrameContent.contentDocument  :  targetFrameContent.contentWindow.document ;

     -  contentDocument 프로퍼티 : iframe에 의해 생된 document 객체

      contentWindow 프로퍼티 : iframe에 의해 생성된 window객체

     -  true 일때 .contentDocument : document 객체 

     -  false 일때 .contentWindow.document : window의 document 객체

 


 

  • $('#iframe', parent.document).css( { "height" : (targetFrameDocContent.body.scrollHeight + 17) + "px" });

#iframe의 부모페이지 

scrollHeight의 픽셀(pixel)

scrollHeight는 읽기 전용 속성

 

참고 링크

https://strangelight.tistory.com/entry/iframe-%EB%B6%80%EB%AA%A8-%EC%9E%90%EC%8B%9D-%EC%A0%91%EA%B7%BC

 

iframe 부모 자식 접근

부모 함수 호출 시 parent.함수명 부모 요소 접근 시 $(parent.document).find('셀렉터') 부모 요소 접근 시 window.parent.document.getElementById('요소아이디') 자식 함수 호출 시 document.getElementById('..

strangelight.tistory.com

https://mylife365.tistory.com/10

 

[jQuery] iframe 접근, 제어

// iframe 접근 window.frames.length; // 1 window.frames[0].document; // iframe의 window의 document객체 document.getElementById('ifra..

mylife365.tistory.com

https://zeronica.tistory.com/80

 

jquery iframe 부모에 접근하기

아이프레임에서 부모의 노드에 속성을 변경할때는 아래의 방법을 사용한다. $(top.document).find("부모의 노드 아이디나 클래스").attr("height","500"); case 1. $('#id', parent.document) iframe에서 사용시 i..

zeronica.tistory.com

 

반응형

'UXUI Development > Javascript' 카테고리의 다른 글

API 문서 자동화 도구  (0) 2021.12.14
javascript 동적로딩  (0) 2019.06.12
script 내에 script호출  (0) 2019.06.12
html안에 html 로드 스크립트 분기처리  (0) 2019.06.12
자바스크립트  (0) 2019.05.29
날짜 분기 스크립트  (0) 2019.05.29
여러개의 스크롤이벤트 사용시  (0) 2019.03.19
Ajax(Asynchronous Javascript And XML)  (0) 2018.03.27

 

여러개의 스크롤이벤트 사용시

 

원페이지 랜딩페이지를 구현할때

 

상단 menu와 사이드 navigation을 각 section별로 걸어 부드럽게 내려가는 스크롤 

2번째 section부터 top버튼이 생성되어 클릭시 최상단으로 스크롤되는 효과

 

 

html

<body>
  <header id="header">
      <div class="header">
          <h1 class="logo"><a href="index.html"><img src="static/imgs/logo.png" alt="로고"></a></h1>
          <nav class="gnb">
            <ul>
              <li><a href="#section1">About</a></li>
              <li><a href="#section2">Portfolio</a></li>
              <li><a href="#section3">Technology</a></li>
              <li><a href="#section4">Contact Us</a></li>
            </ul>
          </nav>
      </div>
  </header>
  <!-- page_control -->
  <nav id="page_control">
    <div class="dots_wrap">
      <a class="dot active" href="#section1"><span class="blind">About</span></a>
      <a class="dot" href="#section2"><span class="blind">Portfolio</span></a>
      <a class="dot" href="#section3"><span class="blind">Technology</span></a>
      <a class="dot" href="#section4"><span class="blind">Contact Us</span></a>
    </div>
  </nav>
  <!-- //page_control -->
  <div id="topBtn">
    <p class="top_btn">
    <a href="#top"><i class="up"></i><span>top</span></a>
    </p>
  </div>

  <div id="container">
    <section id="section1">
      <div class="section_header">
          <h3>section1</h3>
      </div>
      <div class="section_body"> section1 </div>
    </section>
    <section id="section2">
      <div class="section_header">
          <h3>section2</h3>
      </div>
      <div class="section_body">section2 </div>
    </section>
    <section id="section3">
      <div class="section_header">
          <h3>section3</h3>
      </div>
      <div class="section_body">section3</div>
    </section>
    <section id="section4">
      <div class="section_header">
          <h3>section4</h3>
      </div>
      <div class="section_body">section4</div>
    </section>
  </div>
</body>

 

style

<style>

#topBtn{ 
display: none; position: fixed; right: 6.474%; z-index: 40; width: 40px; height: 40px; bottom: 4.5%; font-size: 12px; text-align: center; vertical-align: middle; text-transform: uppercase; border-radius: 50%; border:1px solid rgb(225,225,225);
}

.top_btn{ margin-top: 3px;}
.top_btn i{display: inline-block; text-align: center; border: solid #fff;  border-width: 0 1px 1px 0; padding: 3.5px;}
.top_btn i.up{ transform: rotate(-135deg); -webkit-transform: rotate(-135deg);}
.top_btn span{display: block;}

</style>
 

 

script

<script>

    $(document).ready(function () {

      // scroll
      var speed = 700;

      function scrolling(obj) {
        if (!obj) {
          $('html, body').animate({ scrollTop: 0 }, speed);
        } else {
          var posTop = $(obj).offset().top;
          $('html, body').animate({ scrollTop: posTop }, speed)
        }
      };


      // menu link
      $('.gnb ul li a').click(function () {
        var direction = $(this).attr("href");
        scrolling(direction);
        moveSection($(this).parent().index()+1);
      });


      $(".dots_wrap a").click(function () {
        var direction = $(this).attr("href");
        scrolling(direction);
        moveSection($(this).index()+1);
      });


      /* 스크롤 모션 */
      setGrid('.section_body');

      function setGrid(target) {
        var $win = $(window),
        $target = $(target);
        
        var scrollMotion = function () {
          var scrollTop = $win.scrollTop(),
            winH = $win.height();
          $target.each(function (i) {
            var $this = $(this),
              position = this.getBoundingClientRect().top;  // 요소의 크기와 요소의 viewport에서의 상대적인 위치를 반환

            if (position < winH) {
              $this.addClass('show');
            } else {
              $this.removeClass('show');
            }
          });
        };

        scrollMotion();
        $(window).on('scroll', scrollMotion);
      }

      var currentPage = 1;

      // scroll mousewheel
      var moveTop = null;

      $(".section").each(function () {
        // 개별적으로 Wheel 이벤트 적용
        $(this).on("mousewheel DOMMouseScroll", function (e) {
          e.preventDefault();
          var delta = 0;


          if (!event) event = window.event;
          if (event.wheelDelta) {
            delta = event.wheelDelta / 120;
            if (window.opera) delta = -delta;
          } else if (event.detail) delta = -event.detail / 3;



          // 마우스휠을 위에서 아래로
          if (delta < 0) {
            if ($(this).next() != undefined) {
              moveTop = $(this).next().offset().top; //타겟의 다음 좌표의
            }

            // 마우스휠을 아래에서 위로
          } else {
            if ($(this).prev() != undefined) {
              moveTop = $(this).prev().offset().top;
            }
          }

          // 화면 이동 0.8초(800)
          $("html,body").stop().animate({
            scrollTop: moveTop + 'px'
          }, {
              duration: 1000, complete: function () {
                moveSection();
              }
            });
        });
      });


      function moveSection(idx){
        if(moveTop == $('#section1').offset().top || idx==1){

          $('.gnb ul li').removeClass('active');
          $('.gnb ul li:nth-child(1)').addClass('active')
          $('.dots_wrap a').removeClass('active');
          $('.dots_wrap a:nth-child(1)').addClass('active');

        }else if(moveTop == $('#section2').offset().top || idx==2){

          $('.gnb ul li').removeClass('active');
          $('.gnb ul li:nth-child(2)').addClass('active')
          $('.dots_wrap a').removeClass('active');
          $('.dots_wrap a:nth-child(2)').addClass('active');

        }else if(moveTop == $('#section3').offset().top || idx==3){

          $('.gnb ul li').removeClass('active');
          $('.gnb ul li:nth-child(3)').addClass('active')
          $('.dots_wrap a').removeClass('active');
          $('.dots_wrap a:nth-child(3)').addClass('active');

        }else if(moveTop == $('#section4').offset().top || idx==4){

          $('.gnb ul li').removeClass('active');
          $('.gnb ul li:nth-child(4)').addClass('active')
          $('.dots_wrap a').removeClass('active');
          $('.dots_wrap a:nth-child(4)').addClass('active');
        }
      }

      // tab JS
      $('ul.tab>li').click(function () {
        var activeTab = $(this).attr('data-tab');
        $('ul.tab>li').removeClass('current');
        $('.tab_content').removeClass('current');
        $(this).addClass('current');
        $('#' + activeTab).addClass('current');
      })
    });

  </script>
<script>
  $(window).scroll(function() {
  	if ($(this).scrollTop() > 500) {
  		$('#topBtn').fadeIn();
  	} else {
  		$('#topBtn').fadeOut();
  	}
  });

  $("#topBtn").click(function() {
  	$('html, body').animate({
  		scrollTop : 0
  	}, 400);
  	return false;
  });

</script>

http://www.gisdeveloper.co.kr/?p=2122

 

https://m.blog.naver.com/PostView.nhn?blogId=st004329&logNo=221018707838&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

https://codepen.io/Kangjii/pen/WmKREw

반응형

Ajax (Asynchronous Javascript And XML) - 에이잭스



서버에 요청을 하고있어 응답을 받게 되면 성공이나 실패 등에 따라 함수가 실행하게 되는데 그 함수가 먼저 실행되는 것이 아니라 서버의 응답을 받은 후 실행되는 것.

 

자바스크립트를 통해서 서버에 데이터를 요청한다.

HTML form태그가 아니라 자바스크립트를 통해서!

 

Ajax는 자체가 하나의 특정한 기술을 말하는 것이 아니며

함께 사용하는 기술의 묶음을 지칭하는 용어로 여러가지 기술집합을 의미한다.


웹 클라이언트 측에서 Reload 없이 비동기적으로 콘텐츠를 변경하기 위해 사용하는 모든 기술을 지칭한다.

서버에서 로딩된 데이터를 페이지에 보여주기 위해 새로운 HTML페이지로 간다거나

새로고침을 할 필요가 없이 부분부분만 로딩한다.

 



Ajax 장점


1.      페이지 이동없이 (부분부분만 로딩) 고속으로 화면을 전환할 수 있다.

2.      수신하는 데이터 양을 줄일 수 있다.

3.      클라이언트에게 처리를 위임할 수 있다.



 

Ajax단점


1.      페이지 이동 없는 통신으로 인한 보안성의 문제가 있다.

2.      스크립트로 작성되므로 디버깅이 용이하지 않다..

3.      Ajax 요청을 남발하여 사용하게 되면 역으로 서버에 부하가 늘 수 있어서 필요한 

   부분에서만 적절히 사용하는 것이 효율적이다.





Ajax요청을 남발하여 사용하게 되면 역으로 서버에 부하가 늘 수 있어 필요한 부분에서만 

사용하고 *Submit과 적절히 사용하는 것이 효율적이다. 


 

* Submit이란?

동기방식으로 DOM(HTML)을 그릴 때 쓴다.

메인화면이 생기고 View DOM을 그리는 상황이 Submit이다.

전체페이지 절반이상을 바꿔야한 상황에서는 Submit을 사용한다.


동기 (synchronous) 

 비동기 (Asynchronous)

 

  • 작업이 완료될 때 까지 대기 한 후 순차적으로 실행.

  • 타임아웃 처리(타임아웃을 건다)

  • 초 동안 기다리고 넘어가면 강제적으로 오류를 뱉어 기다림을 멈추게 해준다.

  •           작업완료까지 기다리지 않고 다른 동작이 실행된다.

  •           버튼을 누르고 실행될 때까지 기다리지않고 다른버튼을 누르면 바로 다음버튼이 실행된다


반응형

+ Recent posts