반응형

7개의 정수 데이터를 받아와 합산 값을 구해야 하는 프로그램이 있다고 할 때 우린 어떻게 해야할까?

변수 7개를 선언하고 각 변수에 값을 저장한 후 다 더해주면 될 것이다.

var num1 = 14;
var num2 = 33;
var num3 = 17;
var num4 = 12;
var num5 = 19;
var num6 = 24;
var num7 = 31;
alert(num1 + num2 + num3 + num4 + num5 + num6 + num7);

 

간단할 수 있지만 7개의 변수를 이름이 겹치지 않게 다 선언하고 또 호출하여 더하는 번거로움이 있다.

지금은 7개지만 100개를 받거나 1000개를 받아야 한다면????

이럴 때 배열을 사용하면 좋을 것이다.

자바스크립트의 배열 형태로 변경해보자.

var res = 0;
var arr = [14, 33, 7, 12, 19, 24, 31];
for(i=0; i<arr.length; i++){
  res += arr[i];
}
alert(res);

arr이라는 변수에 배열 데이터를 담아 저장하고

for을 활용하여 배열의 첫번째 데이터인 0번 인덱스부터 마지막 인덱스 6번까지 더해주면 똑같은 결과를 얻는다.

관련 데이터를 한 배열에 담아 값을 추가하거나 삭제 시킬 수 잇고 훨씬 깔끔하게 데이터를 처리 할 수 있다.

 


자바스크립트에서 배열 선언 방법

방법 1)

var fruits =  new Array();
fruits[0] = "포도";
fruits[1] = "멜론";
fruits[2] = "망고";
fruits[3] = "사과";
//fruits > [포도, 멜론, 망고, 사과]

방법 2)

var fruits = ["포도", "멜론", "망고", "사과"];
//fruits > [포도, 멜론, 망고, 사과]

방법 3)

var fruits = new Array("포도", "멜론", "망고", "사과");
//fruits > [포도, 멜론, 망고, 사과]

 


배열 호출

선언을 하였으니 하나씩 호출하는 방법도 알아보자.

배열명의 해당 위치 인덱스를 찍으면 해당 데이터를 호출 할 수 있다.

var fruits = ["포도", "멜론", "망고", "사과"];

fruits[0] // "포도"

fruits[1] // "멜론"

fruits[2] // "망고"

fruits[3] // "사과"

이와 같은 특성을 활용하여 for문을 통해 0번째 인덱스부터 배열의 길이까지 찍으면 하나씩 데이터를 얻을 수 있다.

var fruits = ["포도", "멜론", "망고", "사과"];
var str = "";
for(i=0; i<fruits.length; i++){
   console.log(fruits[i]);
   str += fruits[i];
}
console.log(str); // 포도멜론망고사과

 


 

배열 제어

기존 배열에서 데이터 추가 하기 - push(데이터)

var fruits = ["포도", "멜론", "망고", "사과"];
fruits.push("체리");
console.log(fruits); //["포도", "멜론", "망고", "사과", "체리"]

추가 후 마지막에 체리 데이터가 추가 된 걸 볼 수 있다.

기존 배열에서 데이터 삭제 하기 - pop()

var fruits = ["포도", "멜론", "망고", "사과"];
fruits.pop();
console.log(fruits); //["포도", "멜론", "망고"]

 

삭제 후 마지막에 사과 데이터가 삭제 된 걸 볼 수 있다.

그럼 특정 위치에 추가하거나 삭제 하는 방법도 알아보자.

특정 인덱스 값 삭제하기 - splice

var fruits = ["포도", "멜론", "망고", "사과"];
var idx = fruits.indexOf("망고");
var removeItem = fruits.splice(idx, 1);
console.log("removeItem > "+removeItem); //망고
console.log(fruits); //["포도", "멜론", "사과"]

 

망고 텍스트를 indexOf를 통하여 인덱스 값을 얻은 후,

splice(시작 위치, 삭제 개수) 를 통하여 데이터를 삭제 할 수 있다.

삭제 개수를 늘리면 연달아 삭제도 가능하다.

한번에 2개 데이터 삭제하기

var fruits = ["포도", "멜론", "망고", "사과"];
var idx = fruits.indexOf("망고");
var removeItem = fruits.splice(idx, 2);
console.log("removeItem > "+removeItem); //망고,사과
console.log(fruits); //["포도", "멜론"]

 

특정 위치에 데이터 추가하기

var fruits = ["포도", "멜론", "망고", "사과"];
var idx = fruits.indexOf("망고");
fruits.splice(idx, 0, "파인애플");
console.log(fruits); //["포도", "멜론", "파인애플", "망고", "사과"

망고가 기존에 3번째 즉 fruits[2] 위치였고 해당 위치에 파인애플이 들어온 걸 볼 수 있다.

자바스크립트에서는 배열을 splice(시작 위치, 삭제 개수, 추가할 데이터)를 활용하여 자유롭게 제어 할 수 있다.

반응형
반응형

인터넷을 하다보면 여러 광고 사이트 또는 화장품, 쇼핑몰 등에서 흔하게 이미지가 하나하나 넘어가면서

상품이나 기술등을 나열한 모습들을 볼 수 있다.

- 좌, 우버튼에 따른 이동

- 하단부 버튼에 따른 매칭 이미지 변경

- 일정시간마다 다음 이미지로 변경

3가지 기능이 동작하는 슬라이드쇼를 만들어 보자.

적용모습

슬라이드쇼

 

 

See the Pen slideShow by myhappyman (@myhappyman) on CodePen.

반응형
반응형

반복문이란?

반복적인 작업이 발생할 경우 사용 할 수 있는 문법이다.

예를들어 div태그를 천개를 생성해야 할 경우 하나하나 생성하여 천개를 만드는 것 보다는

반복문을 통하여 프로그래밍적으로 처리하는 것이 더 효율적이고 시간적으로도 생산적 일 것이다.

좀 더 단적인 예를 들어

업무 지시로 천개의 div 태그를 생성할 일이 있어서 만들었는데

알고보니 2천개가 필요했다면 간단하게 반복문 수정을 통해 변경이 가능 할 것이다.

그럼 반복문 사용법을 알아보자.

 

for 문법

for(초기값; 종료조건; 증감식){
   // 반복문 동작...
}

 

ex) 2단 구구단

<!DOCTYPE html>
<html>
<head>
  <title>2단</title>
</head>
<body>

<script>
  for(i=1; i<10; i++){
    console.log(i+" * 2 = "+i*2);
  }
</script>

</body>
</html>

2단 출력

 

2단을 찍어봤으니 9단까지도 찍어보면 좋을 것 같다.

ex) 구구단 gugudan.html

<!DOCTYPE html>
<html>
<head>
  <script src="gugudan.js" type="text/javascript" charset="utf-8"></script>
  <style>
    .gugudan{
      width: 100%;
      position: absolute;
    }
    .gugudan div{
      width: 10%;
      float: left;
      margin: 15px;
      border: 1px solid black;
    }
    .gugudan div div{
      width: 100px;
      position: relative;
      text-align: center;
      border: none;
    }
  </style>
</head>
<body >
  <div id="gugudan" class="gugudan">

  </div>

</body>
</html>

 

gugudan.js

window.onload = function () {
  var htmlStr = "";
  var dan = 2;
  var value;

  for(dan; dan<10; dan++){

    htmlStr += "<div id='dan-"+dan+"'><div> " + dan + "단 </div>";
    for(j=1; j<10; j++){
      value = dan * j;
      htmlStr += "<div>" + dan + " * " + j + " = " + value + "</div>";
    }
    htmlStr += "</div>";
  }

  var gugudan = document.getElementById("gugudan");
  gugudan.innerHTML = htmlStr;
};

 


 

for문으로 반복문이 구현이 되었다면 while문으로도 구현이 가능하다.

while 문법

초기값;
while(종료조건){
    //반복문 동작...
    증감식;
}

 

for문에서는 "( )" 내에서 초기, 종료, 증감값을 정의하여 사용하지만, while문은 종료조건밖에 없기때문에

별도의 변수를 선언하여 초기값을 정하고 종료조건과 증감식을 처리해야 동일하게 동작 시킬 수 있다.

ex) 2단 구구단

<!DOCTYPE html>
<html>
<head>
  <title>구구단</title>
</head>
<body>

<script>
  var i = 1;
  while(i<10){
    console.log(i+" * 2 = "+i*2);
    i++;
  }
</script>

</body>
</html>

 

for문에서 동작시킨 결과와 동일하게 동작하는 것을 볼 수 있다.

 

ex) 구구단 gugudan.html

<html>
<head>
  <script src="gugudan.js" type="text/javascript" charset="utf-8"></script>
  <style>
    .gugudan{
      width: 100%;
      position: absolute;
    }
    .gugudan div{
      width: 10%;
      float: left;
      margin: 15px;
      border: 1px solid black;
    }
    .gugudan div div{
      width: 100%;
      position: relative;
      text-align: center;
      border: none;
      margin: 0 auto;
      margin-top: 15px;
      margin-bottom: 15px;
    }
  </style>
</head>
<body >
  <div id="gugudan" class="gugudan">

  </div>

</body>
</html>

 

gugudan.js

window.onload = function () {
  var htmlStr = "";
  var dan = 2;
  var value;
  while(dan < 10){

    htmlStr += "<div id='dan-"+dan+"'><div> " + dan + "단 </div>";

    var j=1;
    while(j < 10){
      value = dan * j;
      htmlStr += "<div>" + dan + " * " + j + " = " + value + "</div>";
      j++;
    }
    htmlStr += "</div>";
    dan++;
  }

  var gugudan = document.getElementById("gugudan");
  gugudan.innerHTML = htmlStr;
};

 

구구단 출력

 


간단하게 for, while문에 대하여 알아보았다.

do ~ while문도 존재하는데 while문과의 차이점은 무었일까?

do while 문법

초기값;
do{
    //반복문 동작...
    증감식;
}while(종료조건)

 

설명보다도 소스 결과로 바로 확인을 해보자.

<!DOCTYPE html>
<html>
<head>
  <title>do while</title>
</head>
<body>
<script>
  var i = 1;
  while(i<1){

    console.log("while문입니다.")
    i++;
  }

  /////////////////////////////////////

  i = 1;
  do{
    console.log("do while문입니다.")
    i++;
  }while(i<1)


</script>
</body>
</html>

 

결과값

 

while문의 log값은 찍히지 않고 do while문의 log값은 한번 찍힌걸 볼 수 있다.

반복문은 처음 종료조건을 만족하는지 확인하고 동작을 한다.

위 소스의 while문 변수 i는 1이고 종료조건은 1보다 작을때까지 동작하므로바로 종료하지만

do while문은 종료조건을 먼저 보는게 아니라 do문구를 먼저 동작하고 종료조건을 확인 하기 때문에

로그값이 찍힌걸 볼 수 있다.

이러한 특징을 활용하여 반복문이지만 조건에 따라 무조건 한번은 동작해야되는 로직이 필요할 경우 do while문을 활용하면 좋다.

반응형
반응형

프로토타입을 활용하여 자바스크립트 내부함수인 Date 함수의 값을 원하는 방식으로 커스텀 하는 방법을 작성해보겠습니다.

 

<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>  
<body>
  <div></div>
<script type="text/javascript" charset="utf-8">
  Date.prototype.myCalendar = function() {
      if (this.getMonth() == 0)       {this.myMonth = "1월"}
      else if (this.getMonth() == 1)  {this.myMonth = "2월"}
      else if (this.getMonth() == 2)  {this.myMonth = "3월"}
      else if (this.getMonth() == 3)  {this.myMonth = "4월"}
      else if (this.getMonth() == 4)  {this.myMonth = "5월"}
      else if (this.getMonth() == 5)  {this.myMonth = "6월"}
      else if (this.getMonth() == 6)  {this.myMonth = "7월"}
      else if (this.getMonth() == 7)  {this.myMonth = "8월"}
      else if (this.getMonth() == 8)  {this.myMonth = "9월"}
      else if (this.getMonth() == 9)  {this.myMonth = "10월"}
      else if (this.getMonth() == 10) {this.myMonth = "11월"}
      else if (this.getMonth() == 11) {this.myMonth = "12월"}
      else {this.myMonth = "Error"};
  };

  var d = new Date();
  d.myCalendar();
  var month_Name = d.myMonth;
  alert(month_Name);
</script>
</body>
</html>

 

alert의 경고문구는 해당 월로 표현되는것을 볼 수 있을겁니다.

다음은 년 월 일을 출력해보겠습니다.

<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>  
<body>
  <div id="today"></div>

<script type="text/javascript" charset="utf-8">
  Date.prototype.myCalendar = function() {
   switch(this.getMonth()){
	case 0: this.myMonth = "1월"; break;
	case 1: this.myMonth = "2월"; break;
	case 2: this.myMonth = "3월"; break;
	case 3: this.myMonth = "4월"; break;
	case 4: this.myMonth = "5월"; break;
	case 5: this.myMonth = "6월"; break;
	case 6: this.myMonth = "7월"; break;
	case 7: this.myMonth = "8월"; break;
	case 8: this.myMonth = "9월"; break;
	case 9: this.myMonth = "10월"; break;
	case 10: this.myMonth = "11월"; break;
	case 11: this.myMonth = "12월"; break;
   }
      
   switch(this.getDay()){
	case 0: this.myWeek = "일"; break;
	case 1: this.myWeek = "월"; break;
	case 2: this.myWeek = "화"; break;
	case 3: this.myWeek = "수"; break;
	case 4: this.myWeek = "목"; break;
	case 5: this.myWeek = "금"; break;
	case 6: this.myWeek = "토"; break;
   }
  };

  var d = new Date();
  d.myCalendar();
  var year = d.getFullYear() + "년";
  var month = d.myMonth;
  var week = d.myWeek;
  var day = d.getDate() + "일";

  document.getElementById("today").innerHTML = "오늘의 날짜는 : " 
  + year + month + day + "(" + week + ")";
</script>
</body>
</html>

 

이렇게 Date함수를 활용하여 현재 날짜를 출력 할 수 있으며,

prototype부분에서 영문으로 변경하여 구현 가능하며 원하는 방식으로 사용 할 수 있다.

반응형
반응형

2차원 배열을 이용하여 시계방향으로 이동하는 프로그램입니다.

HTML, CSS, JAVASCRIPT(jQuery)를 이용하여 구성하였습니다.

1) 초기화 상태

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

2) 한번 동작 후

5

1

2

3

9

10

6

4

13

11

7

8

14

15

16

12


 

See the Pen 2DArraySnail by myhappyman (@myhappyman) on CodePen.

반응형
반응형

HTML 페이지에서 반응형 작업을 한 후 모바일에서 테스트를 하는도중 input text속성 태그를 모바일환경에서

선택하게 되면 키 자판이 일반 입력 배열이 아닌 숫자자판이 나오게 하고 싶었다.

이러한 경우엔 type 값을 tel 속성으로 지정해주면 모바일환경에서 숫자자판이 먼저 나오는 걸 볼 수 있다.

 

<input type="tel" value="">

 

https://www.w3schools.com/tags/att_input_type_tel.asp

 

HTML input type="tel"

HTML ❮ HTML type attribute Example Define a field for entering a telephone number: Telephone:

Try it Yourself » Definition and Usage The

defines a field for entering a telephone number. Note: Browsers tha

www.w3schools.com

 

같이 사용할만한 자바스크립트 입력제한 방법이다.

html

<input type="tel" value="" telOnly="true">

 

javascript

//input tel telOnly 속성이 있으면 숫자, '-'만 입력받기
$(document).on("keyup", "input[telOnly]", function() {$(this).val( $(this).val().replace(/[^0-9-]/gi,"") );});

 

자바스크립트 keyup 이벤트를 통해 입력된 데이터를 replace 함수를 통해 변경한다.

해당 자바스크립트를 설정하면 숫자 및 '-'만 입력이 가능하다.

반응형
반응형

HTML5의 경우 입력창의 데이터를 자동완성 해주는 기능이 탑재되어 지원됩니다.

반대로 자동완성을 끄고 싶은 경우가 있는데 이러한 경우 autocomplete="off" 처리를 통하여

쉽게 해제 할 수 있습니다.

input태그에 처리)

<input type="tell" value="" maxlength="11" autocomplete="off"/>

 

또 해당하는 input 타입의 태그들이 form태그 안에 있다면 form태그에 속성 처리를 통해

한번에 모든 form태그 내부 입력 창을 제어 할 수 있습니다.

form태그에 처리)

<form  autocomplete="off">
  <input type="text" name="name" value="" maxlength="5"/>
  <input type="tell" name="phone" value="" maxlength="11"/>
  <input type="tell" value="mobile" maxlength="11"/>
</form>

 

반응형
반응형

css display 속성 중 flex 속성이 존재한다.

flex 속성을 활용하여 정렬하는 방법을 알아보겠다.

 

 

flex-direction 속성을 통해 수평 정렬 (row)

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <style media="screen">
    *{
      margin: 0;
      padding: 0;
    }
    body{
      height: 100vh;
      display: flex;
      flex-wrap: wrap;
      flex-direction: row; /*수평 정렬*/
      align-items: center;
      justify-content: center;
    }
    div{
      width: 60px;
      height: 60px;
      background: #0054FF;
      margin: 10px;
    }
  </style>
  <body>
    <div class="one"></div>
    <div class="two"></div>
    <div class="three"></div>
    <div class="four"></div>
  </body>
</html>

 

수평 정렬

 


 

flex-direction 속성을 통해 수직 정렬(column)

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <style media="screen">
    *{
      margin: 0;
      padding: 0;
    }
    body{
      height: 100vh;
      display: flex;
      flex-wrap: wrap;
      flex-direction: column; /*수직 정렬*/
      align-items: center;
      justify-content: center;
    }
    div{
      width: 60px;
      height: 60px;
      background: #0054FF;
      margin: 10px;
    }
  </style>
  <body>
    <div class="one"></div>
    <div class="two"></div>
    <div class="three"></div>
    <div class="four"></div>
  </body>
</html>

 

수직 정렬

display flex 정렬은 감싸는 태그의 사이즈에 맞추어 적용되는 속성으로 body 태그에 높이 100vh를 적용하여 전체 높이에 맞추어 수직 수평 정렬을 적용하였다.

align-items는 flex 내부 항목 열을 정렬한다.

적용 가능한 값

stretch

flex-start

flex-end

center

justify-content는 flex 내부 항목의 행을 정렬한다.

적용 가능한 값

stretch

flex-start

flex-end

center

space-around

space-betweenspace-evenl


flex 속성을 사용하게 되면 flex-wrap 속성을 통해 줄 별로 정렬도 가능하다.

flex-wrap 속성을 사용하지 않으면 default값으로 nowrap 이 적용되어 넓이를 초과하더라도 아랫줄로 이동하지 않는다.

flex-wrap 속성 변경을 통한 줄 변경(wrap)

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <style media="screen">
    *{
      margin: 0; padding: 0;
    }
    .box{
      width: 240px;
      display: flex;
      flex-wrap: wrap; /*줄 바꿈*/
      outline: 1px solid black;
    }
    .box div{
      width: 60px;
      height: 60px;
      background: #0054FF;
      margin: 10px;
    }
  </style>
  <body>
    <div class="box">
      <div class="one"></div>      <div class="two"></div>      <div class="three"></div>      <div class="four"></div>
    </div>
  </body>
</html>

wrap 속성을 통한 줄바꿈

 

nowrap 속성 상태

 

wrap 속성이 없어지면 nowrap으로 처리되어 자동으로 넓이가 적용된다.

반응형