자바스크립트로 공공 API활용하여 XML 일출시간 일몰시간 가져오기

일단 소스는 이렇다. 

<script>
var getLCRiseSetInfocnt=0;
function getLCRiseSetInfo()
{
	getLCRiseSetInfocnt++;
	var today = new Date();
	var year = today.getFullYear();
	var month = today.getMonth() + 1; // 월은 0부터 시작하므로 1을 더해줍니다.
	var day = today.getDate();
	// 월과 일이 한 자리 숫자인 경우 앞에 0을 추가합니다.
	month = month < 10 ? '0' + month : month;
	day = day < 10 ? '0' + day : day;
	var formattedDate = year + '' + month + '' + day;
	console.log('오늘의 날짜: ' + formattedDate);
	var encodedServiceKey = encodeURIComponent('서비스키값');
	$.ajax({
	    url: 'http://apis.data.go.kr/B090041/openapi/service/RiseSetInfoService/getLCRiseSetInfo',
	    type: 'GET',
	    data: {
	        serviceKey: encodedServiceKey,
	        locdate: formattedDate,
	        longitude: '위도',
	        latitude: '경도',
	        dnYn: 'Y'
	    },
	    dataType: 'xml',
	    success: function(responseXml) {
	        console.log('Success:', responseXml);
	     // 서버 응답 성공 시 처리
	        var $xml = $(responseXml);
	
	        // 필요한 정보 추출
	        var sunrise = $xml.find('sunrise').text();
	        var sunset = $xml.find('sunset').text();
	        //var moonrise = $xml.find('moonrise').text();
	        //var moonset = $xml.find('moonset').text();
			//실행n번째 결과
	        console.log('n번째 결과 :',  getLCRiseSetInfocnt);
	        // 추출한 정보 출력 또는 다른 작업 수행
	        console.log('일출 : Sunrise:', sunrise);
	        console.log('일몰 : Sunset:', sunset);
	        //console.log('Moonrise:', moonrise);
	        //console.log('Moonset:', moonset);
	         
	        //결과값을 받아왔으면 멈춘다.
	        if(sunrise!='')
	        {
	        	checkAndStopInterval();
	        	var Sunrise =  formatTime(sunrise);
	        	var Sunset = formatTime(sunset);
	        	
	        	document.getElementById('Sunrise').innerText = Sunrise;
	            document.getElementById('Sunset').innerText = Sunset;
	            document.getElementById('mSunrise').innerText = Sunrise;
	            document.getElementById('mSunset').innerText = Sunset;
                //ID값을 찾아 innerText로 값을 변경해준다.
	        }
	    },
	    error: function(error) {
	        console.log('Error:', error);
	        getLCRiseSetInfo();
	        // 서버 응답 에러 시 처리
	    }
	});
}
//최초실행
getLCRiseSetInfo();
//3초마다 실행되게 한다.
var intervalId = setInterval(getLCRiseSetInfo, 3000);
//루프를 멈추게 한다. 
function checkAndStopInterval() {
	console.log('값을 받음');
	clearInterval(intervalId);
}
function formatTime(timeString) {
    // 앞에 0을 추가하여 4자리로 만들기
     timeString = timeString.padStart(4, '0');

    // 시간과 분으로 분리
    var hours = timeString.slice(0, 2);
    var minutes = timeString.slice(2);

    // 포맷팅된 문자열 반환
    return hours + ':' + minutes;
}
</script>
  • 일몰시간

    00:00

  • 일출시간

    00:00

주석을 충분히 달아 놓아 활용하는데 무리는 없을 것이라 봅니다. 

수고하세요.

참고사이트 : https://www.data.go.kr/data/15012688/openapi.do

 

한국천문연구원_출몰시각 정보

(천문우주정보)지역별 해달 출몰시각정보, 위치별 해달 출몰시각정보를 조회하는 서비스 입니다. 활용 시 날짜, 지역, 경도, 위도, 일출시각, 일몰시각, 일중시각, 월출시각, 월중시각, 월몰시각,

www.data.go.kr

 

이렇게 구축하니 로컬에서는 문제가 안보였는데 (왜인지 모름)

서버에 올리니 문제가 발생했네요. 

CORS (Cross-Origin Resource Sharing) 문제로 인한 오류로 브라우저에서 동일 출처 정책(Same-Origin Policy)에 위배되는 경우, 브라우저는 보안상의 이유로 외부 도메인으로의 AJAX 요청을 차단된다고 합니다.

그래서 급히 수정해봅니다. 

function getLCRiseSetInfo()
{
	getLCRiseSetInfocnt++;
	
	var today = new Date();
	var year = today.getFullYear();
	var month = today.getMonth() + 1; // 월은 0부터 시작하므로 1을 더해줍니다.
	var day = today.getDate();
	// 월과 일이 한 자리 숫자인 경우 앞에 0을 추가합니다.
	month = month < 10 ? '0' + month : month;
	day = day < 10 ? '0' + day : day;
	var formattedDate = year + '' + month + '' + day;
	
	var url = '/ajx/getLCRiseSetInfo';   		
	var sql_state_value = "GetData";
	var data = JSON.stringify({
		   sql_state : sql_state_value
		 , locdate : formattedDate
	});
	getPostData(url,data,callback_getLCRiseSetInfo);
}
function callback_getLCRiseSetInfo(result)
{
	console.log('n번째 결과 :',  getLCRiseSetInfocnt);
	console.log(result.result);
	if(result.result=='ok')
	{	
		var responseXml = result.xml;
		var $xml = $(responseXml);
		// 필요한 정보 추출
        var sunrise = $xml.find('sunrise').text();
        var sunset = $xml.find('sunset').text();
        //var moonrise = $xml.find('moonrise').text();
        //var moonset = $xml.find('moonset').text();
		//실행n번째 결과
        console.log('n번째 결과 :',  getLCRiseSetInfocnt);
        // 추출한 정보 출력 또는 다른 작업 수행
        console.log('일출 : Sunrise:', sunrise);
        console.log('일몰 : Sunset:', sunset);
        //console.log('Moonrise:', moonrise);
        //console.log('Moonset:', moonset);
         
        
        if(sunrise!='')
        {
        	checkAndStopInterval();
        	var Sunrise =  formatTime(sunrise);
        	var Sunset = formatTime(sunset);
        	
        	document.getElementById('Sunrise').innerText = Sunrise;
            document.getElementById('Sunset').innerText = Sunset;
            document.getElementById('mSunrise').innerText = Sunrise;
            document.getElementById('mSunset').innerText = Sunset;
        }
        if(getLCRiseSetInfocnt>7)
        {
        	checkAndStopInterval();
        }
	}
}
getLCRiseSetInfo();
var intervalId = setInterval(getLCRiseSetInfo, 5000);
function checkAndStopInterval() {
	console.log('값을 받음');
	clearInterval(intervalId);
}
function formatTime(timeString) {
    // 앞에 0을 추가하여 4자리로 만들기
     timeString = timeString.padStart(4, '0');

    // 시간과 분으로 분리
    var hours = timeString.slice(0, 2);
    var minutes = timeString.slice(2);

    // 포맷팅된 문자열 반환
    return hours + ':' + minutes;
}

//추가로 컨트롤러에 XML데이터를 요청하는 코드를 작성하여 XML을 받아오게 하였습니다.
					function getContextPath(){
            		    var ctxPath=$("#web_contextPath").val();
            		    return ctxPath;
            		}
            		function getPostData(inurl,indata,myfunction,in_async)  		
            		{
            			var async_value=true;
            			if(in_async==false)
            			{
            				async_value=false;
            			}
            		$.ajax({
            			type : 'post',
            			url : getContextPath()+inurl,
            			headers : {
            				"Content-Type" : "application/json",
            				"X-HTTP-Method-Override" : "POST",
            				'X-CSRF-TOKEN': $("#csrf_token").val()
            			},
            			dataType : 'text',
            			data : indata,
            			async: async_value,
            			error:function(request,status,error)
            			{
            				//alert("알림",status+error);
            				console.log("ajax error : " + status+","+error);
            			},				
            			success : function(result) {									
            				//console.log("result: " + result);
            				var obj = jQuery.parseJSON( result );	
            				if(myfunction!=null)
            				{
            					myfunction(obj);
            				}
            			}
            		});
            	}
</script>

자바 소스단은  https://www.data.go.kr/data/15012688/openapi.do 제공소스 자바부분을 참고하여 만들었습니다. 

//일출일몰 API사용하기
	@ResponseBody
	@RequestMapping(value = "/getLCRiseSetInfo", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
	public CommonData getLCRiseSetInfo(@RequestBody CommonData dto) throws Exception {
		smsp.print_String("/ajxAgent/get_cal_month_data");
		CommonData result_map = new CommonData();
		smsp.print_CommonData(dto);
		Calendar cal = Calendar.getInstance();
		String locdate = dto.get("locdate", "20240311");		
		StringBuilder sb = new StringBuilder();
		try {
		
		StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/B090041/openapi/service/RiseSetInfoService/getLCRiseSetInfo"); /*URL*/
	    urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "서비스 키"); /*Service Key*/
        urlBuilder.append("&" + URLEncoder.encode("locdate","UTF-8") + "=" + URLEncoder.encode(locdate, "UTF-8")); /*날짜*/
        urlBuilder.append("&" + URLEncoder.encode("longitude","UTF-8") + "=" + URLEncoder.encode("XXX.3673", "UTF-8")); /*위도*/
        urlBuilder.append("&" + URLEncoder.encode("latitude","UTF-8") + "=" + URLEncoder.encode("XXX.50363", "UTF-8")); /*경도*/
        urlBuilder.append("&" + URLEncoder.encode("dnYn","UTF-8") + "=" + URLEncoder.encode("Y", "UTF-8")); /**/
        
        URL url = new URL(urlBuilder.toString());
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Content-type", "application/json");
        //System.out.println("Response code: " + conn.getResponseCode());
        BufferedReader rd;
        if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
            rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        } else {
            rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
        }
        
        String line;
        while ((line = rd.readLine()) != null) {
            sb.append(line);
        }
        rd.close();
        conn.disconnect();
        result_map.put("result", "ok"); 
        result_map.put("xml", sb.toString()); 
		} catch (Exception e) {
			// TODO: handle exception
			result_map.put("result", "fail");
		}
		return result_map;
	}

이상입니다. 수고하세요.

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

특정일 기준으로 작동하기 

JavaScript를 사용한 날짜 비교 함수 작성하기

날짜와 시간을 다루는 JavaScript의 기능을 활용하여 특정 날짜와 현재 날짜를 비교하는 함수를 만들어 보겠습니다. 이 함수는 웹 애플리케이션에서 유용하게 사용될 수 있으며, 예를 들어 특정 이벤트나 기한이 마감되었는지 확인하는 데 도움이 됩니다.

코드 예제:

function checkDate3() {
    // 목표 날짜 설정 (여기에서는 2023년 10월 31일 00:00:00)
    var targetDate = new Date("2023-10-31T00:00:00");
    var currentDate = new Date();

    // 현재 날짜와 목표 날짜를 비교
    if (currentDate > targetDate) {
        alert("마감되었습니다.");
    } else {
        window.location.href = "${pageContext.request.contextPath}/1234/1111.do"; // 페이지 이동할 URL을 입력하세요.
    }
}

코드 설명:

targetDate 변수에는 목표 날짜 및 시간이 설정됩니다. 이 날짜는 "YYYY-MM-DDTHH:MM:SS" 형식으로 지정됩니다. 이 코드에서는 2023년 10월 31일 00:00:00을 목표 날짜로 설정했습니다.

currentDate 변수에는 현재 날짜와 시간이 저장됩니다.

if 문을 사용하여 현재 날짜와 목표 날짜를 비교합니다. 현재 날짜가 목표 날짜보다 크면 "마감되었습니다."라는 경고 메시지가 표시됩니다.

그렇지 않은 경우, 특정 페이지로 이동하도록 지정된 URL로 리디렉션됩니다.

이 함수는 현재 날짜와 목표 날짜를 비교하여 원하는 작업을 수행하는 데 사용할 수 있으며, 웹 애플리케이션에서 기한을 추적하거나 이벤트를 관리하는 데 유용합니다. JavaScript를 사용하여 날짜 및 시간을 처리하는 방법을 익혔으므로 이를 다양한 상황에 적용할 수 있을 것입니다.

이제 이 함수를 웹 애플리케이션 프로젝트에 통합하여 날짜 기반 작업을 자동화하실 수 있습니다.

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

CHART.JS 사용법 정리

CDN으로 가져오기 

<script src="https://cdn.jsdelivr.net/npm/chart.js@3.0.0/dist/chart.min.js"></script>    <script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2.0.0"></script>

<canvas id="myChart"></canvas>

차트 ID 부여하기

const ctx = document.getElementById('myChartex').getContext('2d');

data 랑 options를 만드세요. 하나로 해도 되지만 {} 너무 많아서 눈이 어지러운 것 같아요. 

const _data = 
{
        labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
        datasets: [{
            label: '# of Votes',
            data: [12, 19, 3, 5, 2, 3],
            backgroundColor: [
                'rgba(255, 99, 132, 0.2)',
                'rgba(54, 162, 235, 0.2)',
                'rgba(255, 206, 86, 0.2)',
                'rgba(75, 192, 192, 0.2)',
                'rgba(153, 102, 255, 0.2)',
                'rgba(255, 159, 64, 0.2)'
            ],
            borderColor: [
                'rgba(255, 99, 132, 1)',
                'rgba(54, 162, 235, 1)',
                'rgba(255, 206, 86, 1)',
                'rgba(75, 192, 192, 1)',
                'rgba(153, 102, 255, 1)',
                'rgba(255, 159, 64, 1)'
            ],
            borderWidth: 1
        }]
    };
const _options=
{
    	    indexAxis: 'y',
    	    // Elements options apply to all of the options unless overridden in a dataset
    	    // In this case, we are setting the border of each horizontal bar to be 2px wide
    	    elements: {
    	      bar: {
    	        borderWidth: 2,
    	      }
    	    },
    	    responsive: true,
    	    plugins: {
    	      legend: {
    	        position: 'right',
    	      },
    	      title: {
    	        display: true,
    	        text: 'Chart.js Horizontal Bar Chart'
    	      }
    	    }
    	};

차트를 생성한다. 차트의 형태에 따라 options값을 달리하면 된다.

chart = new Chart(ctx, {
          type: 'bar', // 차트의 형태
          data : lineChartData,
          options : options
         });

차트데이터

차트를 표시해 보았네요.

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,
<html>
<head>
	<meta charset="utf-8">
	<title>javascript</title>
	<style>
	/* Style the buttons that are used to open and close the accordion panel */
	.accordion {
	  background-color: #eee;
	  color: #444;
	  cursor: pointer;
	  padding: 18px;
	  width: 100%;
	  text-align: left;
	  border: none;
	  outline: none;
	  transition: 0.4s;
	}
	
	/* Add a background color to the button if it is clicked on (add the .active class with JS), and when you move the mouse over it (hover) */
	.active, .accordion:hover {
	  background-color: #ccc;
	}
	
	/* Style the accordion panel. Note: hidden by default */
	.panel {
	  padding: 0 18px;
	  background-color: white;
	  display: none;
	  overflow: hidden;
	}
	</style>	
	
</head>
<body>
		<button class="accordion">Section 1</button>
		<div class="panel">
		  <p>Lorem ipsum...</p>
		</div>
		
		<button class="accordion">Section 2</button>
		<div class="panel">
		  <p>Lorem ipsum...</p>
		</div>
		
		<button class="accordion">Section 3</button>
		<div class="panel">
		  <p>Lorem ipsum...</p>
		</div>
</body>
<script>
		var acc = document.getElementsByClassName("accordion"); //아코디언클래스리스트를 가져온다.
		var i;
		
		for (i = 0; i < acc.length; i++) {
		  acc[i].addEventListener("click", function() { //클릭이벤트를 추가한다. 
		    /* Toggle between adding and removing the "active" class,
		    to highlight the button that controls the panel */
		    this.classList.toggle("active"); //클래스를 추가하거나 삭제함. 
		
		    /* Toggle between hiding and showing the active panel */
		    var panel = this.nextElementSibling; //현재 아코디언의 다음노트를 가져온다. panel이 옴 
		    if (panel.style.display === "block") { //출력모드가 블럭인지 none인지 체크한다.
		      panel.style.display = "none";
		    } else {
		      panel.style.display = "block";
		    }
		  });
		}
	</script>
</html>

이번소스는 아코디언이에요. 

아코디언

var acc = document.getElementsByClassName("accordion"); //아코디언클래스리스트를 가져온다.

acc갯수 만큼 for문을 돌려요. 

클릭이벤트를 추가해주면 되요.

 acc[i].addEventListener("click", function() { //클릭이벤트를 추가한다. 
		    /* Toggle between adding and removing the "active" class,
		    to highlight the button that controls the panel */
		    this.classList.toggle("active"); //클래스를 추가하거나 삭제함. 
		
		    /* Toggle between hiding and showing the active panel */
		    var panel = this.nextElementSibling; //현재 아코디언의 다음노트를 가져온다. panel이 옴 
		    if (panel.style.display === "block") { //출력모드가 블럭인지 none인지 체크한다.
		      panel.style.display = "none";
		    } else {
		      panel.style.display = "block";
		    }
		  });

https://www.w3schools.com/ 여기사이트 소스를 참고했어요.

 

 

W3Schools Online Web Tutorials

HTML Example:

This is a heading

This is a paragraph.

Try it Yourself » CSS Example: body {   background-color: lightblue; } h1 {   color: white;   text-align: ce

 

www.w3schools.com

 

 

W3Schools Online Web Tutorials

HTML Example:

This is a heading

This is a paragraph.

Try it Yourself » CSS Example: body {   background-color: lightblue; } h1 {   color: white;   text-align: ce

 

www.w3schools.com

 

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

자바스크립트를 이용한 상단으로 이동하는 코드에요.

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<html>
<head>
	<meta charset="utf-8">
	<title>css</title>
	<style>
	[align] {
		background-color: black;
		color: white;
	}
	div[align="right"] {
		background-color: green;
		color: white;
	}
	</style>	
	
</head>
<body>
	<div align="left" id="one">
		HELLO.
	</div>
	<button id ="target" type="button">PUSH</button>
	<div id ="two">
		HELLO.
	</div>
	<pre>
Sample blog post
January 1, 2014 by Mark

This blog post shows a few different types of content that’s supported and styled with Bootstrap. Basic typography, images, and code are all supported.

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Heading
Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Example code block
Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.

Vestibulum id ligula porta felis euismod semper.
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Maecenas sed diam eget risus varius blandit sit amet non magna.
Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis.

Another blog post
December 23, 2013 by Jacob

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

New feature
December 14, 2013 by Chris

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.
	</pre>
		<pre>
Sample blog post
January 1, 2014 by Mark

This blog post shows a few different types of content that’s supported and styled with Bootstrap. Basic typography, images, and code are all supported.

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Heading
Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Example code block
Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.

Vestibulum id ligula porta felis euismod semper.
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Maecenas sed diam eget risus varius blandit sit amet non magna.
Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis.

Another blog post
December 23, 2013 by Jacob

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

New feature
December 14, 2013 by Chris

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.
	</pre>
	<pre>
Sample blog post
January 1, 2014 by Mark

This blog post shows a few different types of content that’s supported and styled with Bootstrap. Basic typography, images, and code are all supported.

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Heading
Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Example code block
Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.

Vestibulum id ligula porta felis euismod semper.
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Maecenas sed diam eget risus varius blandit sit amet non magna.
Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis.

Another blog post
December 23, 2013 by Jacob

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

New feature
December 14, 2013 by Chris

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.
	</pre>
	<pre>
Sample blog post
January 1, 2014 by Mark

This blog post shows a few different types of content that’s supported and styled with Bootstrap. Basic typography, images, and code are all supported.

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Heading
Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Example code block
Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.

Vestibulum id ligula porta felis euismod semper.
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Maecenas sed diam eget risus varius blandit sit amet non magna.
Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis.

Another blog post
December 23, 2013 by Jacob

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

New feature
December 14, 2013 by Chris

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.
	</pre>
	
	<a id="GOTO_TOP" href="#">GOTO_TOP</a>
</body>
<script>
		var back_top = document.getElementById('GOTO_TOP');
		var docElem = document.documentElement,
		offset,
		scrollPos,
		docHeight;
		
		docHeight = Math.max(docElem.offsetHeight, docElem.scrollHeight); //페이지 길이
		console.log(docHeight);
		//scrollPos = docElem.scrollTop; //스크린 탑의 위치 
		//console.log(scrollPos);
		if(docHeight != 'undefined')
		{
			offset = window.innerHeight; //웹브라우저 창의 뷰창의 높이 
			console.log(offset); 
		}
		window.addEventListener('scroll',function(event){
			scrollPos =event.srcElement.scrollingElement.scrollTop; //현재위치.
			// document.documentElement.scrollTop; //스크린 탑의 위치 
			console.log(scrollPos); //현재 위치. 
			console.log('출력 현재 위치.');
			
			if(offset< scrollPos)
			{
			 	back_top.className= 'visible';
			}
			else
			{
				back_top.className= '';
			}
			
				},false);
		back_top.addEventListener('click',function(e){
			e.preventDefault(); //이전이벤트를 초기화;
			scrollToTop();
			// document.body.scrollTop = document.documentElement.scrollTop = 0;
		},false);
		function scrollToTop()
		{
			//var scrollInterval = setInterval(할일,시간);		
			var scrollInterval = setInterval(function(){
			if(scrollPos>0)
			{
				window.scrollBy(0,-55);//스크롤이동 
			}
			else
			{
				clearInterval(scrollInterval); //인터발 멈춤
			}
															},15);
			//document.body.scrollTop = document.documentElement.scrollTop = 0;
		}
	</script>
</html>

본문내용을 길게 적었어요. 부트스트랩 샘플페이지 내용을 긁어와서 4-5번 붙여 넣었어요. 

아래쪽에 A태그로 버튼을 만들어줬어요. 

window.addEventListener('scroll',function(event){

윈도우에 스크롤이벤트시 리스너를 만들어 줬어요. 스크롤 이벤트 발생시 들어와요. 

back_top.addEventListener('click',function(e){

A태그 클릭시 이벤트 리스너도 만들어줬어요. 

scrollToTop() FUNCTION을 호출하는데 

여기선 인터벌로 시간마다 호출되게 해줬어요. 

특정조껀이 되면 인터발을 멈추었어요. 

			var scrollInterval = setInterval(function(){
			if(scrollPos>0)
			{
				window.scrollBy(0,-55);//스크롤이동 
			}
			else
			{
				clearInterval(scrollInterval); //인터발 멈춤
			}

한번에 탑으로 이동하고 싶다면 

document.body.scrollTop = document.documentElement.scrollTop = 0;

이렇게 적어주시면 되요. 

 IE에선 작동하지 않아요. 

JQUERY 코드를 추천드려요. 

function sms_goTop_Function()
{
   var delay = 0;
   $("html, body").animate({ scrollTop: 0 }, delay, scroll_menu_calibration);
   return false;
}
var scroll_menu_calibration = function ()
{
	
}

이상입니다.

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

1. HTML 이벤트 핸들러 사용

추천하진 않는다.

 

2.이벤트 리스너를 등록하여 사용하기

※스크립트가 실행될때 문서가 모두 로드된후 실행되어야 하기때문에 태그 아래쪽에 스크립트를 추가해요.

<html>
<head>
	<meta charset="utf-8">
	<title>css</title>
	<style>
	[align] {
		background-color: black;
		color: white;
	}
	div[align="right"] {
		background-color: green;
		color: white;
	}
	</style>	
	
</head>
<body>
	<div align="left" id="one">
		안녕하세요.
	</div>
	<button id ="target" type="button">누르기</button>
	<div id ="two">
		안녕하세요.
	</div>
</body>
<script>
	
		var one = document.getElementById('one');
		var two1 = document.getElementById('two');
		var t = document.getElementById('target');
		one.addEventListener('click',function(){one.style.color='blue';},false );
		one.addEventListener('mouseover',function(){one.style.background='yellow';},false );//마우스가 올라왔을때
		one.addEventListener('mouseout',function(){one.style.background='#ff0000';},false );//마우스가 나갔을때
		
		two1.addEventListener('mousedown',function(){one.style.background='0000ff';},false ); //마우스 다운업이 안되네 
		two1.addEventListener('mouseup',function(){one.style.background='000fff';},false );  
		two1.addEventListener('mouseover',function(){two1.innerHTML='마우스올라옴'},false );
		two1.addEventListener('mouseout',function(){two1.innerHTML='마우스나감';},false ); 
		
		//two1.addEventListener('click',function(){two1.style.color='red';},false);
	    //t.addEventListener('click', function(event){alert('Hello world, '+event.target.value);});
	    t.addEventListener('mousedown',function(){one.style.background='0000ff';},false ); //마우스 다운업이 안되네 
		t.addEventListener('mouseup',function(){one.style.background='000fff';},false );  
	</script>
</html>

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

웹페이지에 이벤트가 종류가 있어요. 

UI 이벤트 , 키보드 이벤트 , 마우스 이벤트, 포커스 이벤트, 폼이벤트 , 변형이벤트 에요. 

UI이벤트종류

LOAD -> 페이지가 로드되었을때

UNLOAD -> 페이지가 언로드될때 (새로운페이지로 이동시)

ERROR -> 스크립트 오류발생시

RESIZE -> 브라우저 창 크기 조절시

SCROLL -> 페이지 스크롤 이동시 

키보드 이벤트 

keydown -> 키 보드 다운시

keyup -> 키보드 땔때

keypress -> 키보드 누르고 있을때 

마우스이벤트 

click -> 클릭시

dbclick-> 더블 클릭시

mousedown -> 마우스 버튼을 누를때

mouseup-> 마우스 버튼을 땔때

mousemove -> 마우스가 움직일때

mouseover->마우스가 요소위로 움직였을때

mouseout -> 요소 밖으로 마우스가 이동시. 

포커스 이벤트

focus/focusin -> 요소가 포커스를 얻었을때

blur/focusout->요소가 포커스를 잃었을때

폼이벤트

input -> 값이 변경될때

change -> 상태가 변경될때

submit -> 폼을 제출시

reset -> 리셋버튼 클릭시

cut -> 컨텐츠 잘라내기를 했을때

copy -> 복사했을때

paste -> 붙여넣기했을때

select -> 텍스트를 선택시

변형이벤트

dom구조 변경시

 

 

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

window.innerHeight -> 창의 높이

window.innerWidth -> 창의 너비

window.pageXOffset -> 문서의 가로 스크롤 크기

window.pageYOffset -> 문서의 세로 스크롤 크기

window.screenX -> 화면 좌측상단으로부터 현재 마우스  X

window.screenY -> 화면 좌측 상단으로부터 현재 마우스 Y

window.location -> 현재 URL 

window.document -> 현재 페이지 로드된 document

window.history -> 현재 창이나 탭을 통해 로드 되었던 상세정보를 제공

window.history.length -> history객체에 보관된 페이지 개수

window.screen -> screen객체에 대한 참조

window.screen.width -> width 값

window.screen.height -> height 값

메서드 

 window.alert() ->대화상자 표시

window.open -> 새로운 브라우저 창 생성 

window.print() -> 인쇄 명령 

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

document 문서 객체 모델

document문서 객체 모델

document눈 문서 객체 모델인데요. 

객체를 탐색하거나 수정할때 document를 이용해 접근할수 있어요. 

1. ID값으로 접근하기 

document.getElementById ('아디');

2. name 값으로 접근하기

document.getElementsByName('네임값')

※ 잘보면 Element가 name값의 경우 복수형으로 들어가있죠? id는 고유한값이라 한개만 찾고 네임은 다수를 찾아서 그래요. 

3. class 값으로 접근하기

document.getElementsByClassName('클래스값')

4. 태그로 접근하기

document.getElementsByTagName ( "html태그");

5. css로 접근하기. 

document.querySelector ( ".myclass");

※ html 에 클래스를 접근할땐 .을 찍고 이름을 적는다 제이쿼리나 css나 공통사항이니 기억해두자!

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

자바스크립트 브라우저객체모델 window

window -> 현재브라우저 창이나 탭

document -> 현재 로드된 웹 페이지

history -> 브라우저 히스토리에 기록된 웹페이지

location -> 현재 페이지의 url

navigator -> 브라우저와 관련된 정보

screen  -> 장치의 디스플레이 정보 

내장객체 관계도

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,