구글 폰트 적용시키기

 

1. 구글 폰트 사이트 접속 

https://fonts.google.com/?subset=korean

 

2. filter에 korean 검색후 원하는 폰트 클릭

 

3. 클릭한 페이지에서 Get Font 클릭 (이미 받은 폰트가 적용했을경우 Remove라 나올텐데 클릭하면 다시 Get Font가 나온다)

4. 다운형식, import형식 택1 

5-1.embed code  (@import 형식)

Style.css

@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100..900&display=swap');
body {
    font-family: 'Noto Sans KR', sans-serif; /* 폰트 적용 */
}

하단과 같은 형태로 진행하면 되나 import할때까지 대기시간이 발생하며 페이지가 로딩된 시점에서 어긋나는 느낌을 주기에 별로 추천되지 않는다.

 

5-2. Download 방식

zip을 압축 해제한뒤 ttf파일을 resourecs에 위치시킨뒤 url에 해당 파일위치 지정

참고용 depth

Style.css

@font-face {
    font-family: 'Noto Sans KR';
    src: url('/FONT/NotoSansKR-VariableFont_wght.ttf') format('truetype'); /* TTF 폰트 사용 */
    font-weight: 100 900;
    font-style: normal;
}body {
    font-family: 'Noto Sans KR', sans-serif; /* 폰트 적용 */
}

 

 

'기타' 카테고리의 다른 글

카카오맵 api 활용하기  (0) 2024.07.21
FileZila 사용법  (0) 2024.06.27
이미지 배치하기  (0) 2024.02.23

해당 포스팅에 기록

초기 설정은 해당 페이지 참고할것 https://sadfsdf.tistory.com/137

1. 로드뷰, 기본 뷰 설정하기

2. 현재 내 위치 가져오기

3. marker에 따른 위치 변경 및 로드뷰 연동하기

 

초기 코드는 다음과 같다.

카카오 링크 : https://apis.map.kakao.com/web/sample/basicRoadview/


카카오 맵 가져오기 (로드뷰, 기본 뷰)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>로드뷰와 지도 토글하기</title>
    <style>
#container {overflow:hidden;height:300px;position:relative;}
#btnRoadview,  #btnMap {position:absolute;top:5px;left:5px;padding:7px 12px;font-size:14px;border: 1px solid #dbdbdb;background-color: #fff;border-radius: 2px;box-shadow: 0 1px 1px rgba(0,0,0,.04);z-index:1;cursor:pointer;}
#btnRoadview:hover,  #btnMap:hover{background-color: #fcfcfc;border: 1px solid #c1c1c1;}
#container.view_map #mapWrapper {z-index: 10;}
#container.view_map #btnMap {display: none;}
#container.view_roadview #mapWrapper {z-index: 0;}
#container.view_roadview #btnRoadview {display: none;}
</style>
</head>
<body>
<p style="margin-top:-12px">
    로드뷰의 파노라마 ID와 시점(ViewPoint)은 Wizard를 사용하면 쉽게 확인할 수 있습니다.
    <em class="link">
        <a href="/web/wizard" target="_blank">Wizard를 사용해보세요!</a>
    </em>
</p>
<div id="container" class="view_map">
    <div id="mapWrapper" style="width:100%;height:300px;position:relative;">
        <div id="map" style="width:100%;height:100%"></div> <!-- 지도를 표시할 div 입니다 -->
        <input type="button" id="btnRoadview" onclick="toggleMap(false)" title="로드뷰 보기" value="로드뷰">
    </div>
    <div id="rvWrapper" style="width:100%;height:300px;position:absolute;top:0;left:0;">
        <div id="roadview" style="height:100%"></div> <!-- 로드뷰를 표시할 div 입니다 -->
        <input type="button" id="btnMap" onclick="toggleMap(true)" title="지도 보기" value="지도">
    </div>
</div>

<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=발급받은 APP KEY를 사용하세요"></script>
<script>
var container = document.getElementById('container'), // 지도와 로드뷰를 감싸고 있는 div 입니다
    mapWrapper = document.getElementById('mapWrapper'), // 지도를 감싸고 있는 div 입니다
    btnRoadview = document.getElementById('btnRoadview'), // 지도 위의 로드뷰 버튼, 클릭하면 지도는 감춰지고 로드뷰가 보입니다 
    btnMap = document.getElementById('btnMap'), // 로드뷰 위의 지도 버튼, 클릭하면 로드뷰는 감춰지고 지도가 보입니다 
    rvContainer = document.getElementById('roadview'), // 로드뷰를 표시할 div 입니다
    mapContainer = document.getElementById('map'); // 지도를 표시할 div 입니다

// 지도와 로드뷰 위에 마커로 표시할 특정 장소의 좌표입니다 
var placePosition = new kakao.maps.LatLng(33.450701, 126.570667);

// 지도 옵션입니다 
var mapOption = {
    center: placePosition, // 지도의 중심좌표 
    level: 3 // 지도의 확대 레벨
};

// 지도를 표시할 div와 지도 옵션으로 지도를 생성합니다
var map = new kakao.maps.Map(mapContainer, mapOption);

// 로드뷰 객체를 생성합니다 
var roadview = new kakao.maps.Roadview(rvContainer);

// 로드뷰의 위치를 특정 장소를 포함하는 파노라마 ID로 설정합니다
// 로드뷰의 파노라마 ID는 Wizard를 사용하면 쉽게 얻을수 있습니다 
roadview.setPanoId(1023434522, placePosition);

// 특정 장소가 잘보이도록 로드뷰의 적절한 시점(ViewPoint)을 설정합니다 
// Wizard를 사용하면 적절한 로드뷰 시점(ViewPoint)값을 쉽게 확인할 수 있습니다
roadview.setViewpoint({
    pan: 321,
    tilt: 0,
    zoom: 0
});

// 지도 중심을 표시할 마커를 생성하고 특정 장소 위에 표시합니다 
var mapMarker = new kakao.maps.Marker({
    position: placePosition,
    map: map
});

// 로드뷰 초기화가 완료되면 
kakao.maps.event.addListener(roadview, 'init', function() {

    // 로드뷰에 특정 장소를 표시할 마커를 생성하고 로드뷰 위에 표시합니다 
    var rvMarker = new kakao.maps.Marker({
        position: placePosition,
        map: roadview
    });
});

// 지도와 로드뷰를 감싸고 있는 div의 class를 변경하여 지도를 숨기거나 보이게 하는 함수입니다 
function toggleMap(active) {
    if (active) {

        // 지도가 보이도록 지도와 로드뷰를 감싸고 있는 div의 class를 변경합니다
        container.className = "view_map"
    } else {

        // 지도가 숨겨지도록 지도와 로드뷰를 감싸고 있는 div의 class를 변경합니다
        container.className = "view_roadview"   
    }
}
</script>
</body>
</html>

 

현재 코드는 기본적으로 카카오의 위치가 설저되어있기에 본인의 실시간 위치를 얻어오기 위해선 추가적인 설정이 필요하다.


사용자의 실시간 위치 가져오기

해당 방식을 위해선 브라우저의 실시간 위치기능 + Geolocation API 를 사용하였습니다.

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        lat = position.coords.latitude;
        lon = position.coords.longitude;
        locPosition = new kakao.maps.LatLng(lat, lon);
        map.setCenter(locPosition);

        marker = new kakao.maps.Marker({
            position: locPosition
        });
        marker.setMap(map);
    }, function(error) {
        console.error('Error occurred. Error code: ' + error.code);
        placePosition = new kakao.maps.LatLng(33.450701, 126.570667);
        map.setCenter(placePosition);
        marker = new kakao.maps.Marker({
            position: placePosition
        });
        marker.setMap(map);
    });
},
    {
        enableHighAccuracy: true, // 고정밀 모드 요청
        timeout: 5000, // 위치 요청 타임아웃 설정
        maximumAge: 0 // 캐시된 위치 정보 사용 안함
    });
    else {
    console.error('Geolocation is not supported by this browser.');
    placePosition = new kakao.maps.LatLng(33.450701, 126.570667);
    map.setCenter(placePosition);
    marker = new kakao.maps.Marker({
        position: placePosition
    });
    marker.setMap(map);
}

 

현재 위치를 가져오되 만약 위치값을 가져오는데 실패했을경우 카카오 데이터센터(33.450... ,126.570..)가 초기 값으로 지정됩니다.

고정밀 모드로 사용 안할경우 종종 gps가 튀어버려 이상한곳을 가리키는 경우가 있습니다 (저는 개천으로 나옵니다..)


사용자의 마커 이동 및 로드뷰 위치 변경하기

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        lat = position.coords.latitude;
        ...
        marker.setMap(map);
        initializeRoadView(lat, lon, locPosition);	//new!!
    }, function(error) {
        console.error('Error occurred. Error code: ' + error.code);
        ...
        marker.setMap(map);
        initializeRoadView(33.450701, 126.570667, placePosition); //new!!
    });
} else {
    console.error('Geolocation is not supported by this browser.');
   ...
    marker.setMap(map);
    initializeRoadView(33.450701, 126.570667, placePosition); //new!!
}


//new!!
//로드뷰를 추출하기 위한 코드
function initializeRoadView(lat, lon, position) {
    var roadview = new kakao.maps.Roadview(rvContainer);
    var roadviewClient = new kakao.maps.RoadviewClient(); //좌표로부터 로드뷰 파노ID를 가져올 로드뷰 helper객체
    var roadviewContainer = document.getElementById('roadview'); // 로드뷰를 표시할 div

	roadviewClient.getNearestPanoId(position, 50, function(panoId) {
	    roadview.setPanoId(panoId, position); //panoId와 중심좌표를 통해 로드뷰 실행
	});

    roadview.setViewpoint({
        pan: 321,
        tilt: 0,
        zoom: 0
    });

    kakao.maps.event.addListener(roadview, 'init', function() {
        var rvMarker = new kakao.maps.Marker({
            position: position,
            map: roadview
        });
    });
}

 

marker가 이동될떄마다 실행되도록 함수를 작성하였습니다.


최종결과

 

 

'기타' 카테고리의 다른 글

구글 폰트 적용시키기  (0) 2024.09.17
FileZila 사용법  (0) 2024.06.27
이미지 배치하기  (0) 2024.02.23

Ec2에 올려놓은 파일을 확인하려 했으나 항상 ls를 치는것도 불편했고 일일이 cd를 입력해 파일을 이동하는게 불편했다

 

편하게 보는 방법을 찾다가 fileZila를 사용하였고 해당 툴에 대한 설명을 올린다

(사용한지 한참 뒤에 올리는거다..)

 

ec2에서 발급받은 pem 또는 ppk 파일이 필요하다

 

설정방법

  1. https://filezilla-project.org/ 링크 접속후 다운

 

2.설치 완료 후 파일 - 사이트 관리자 - 새 사이트 클릭

다음과 같은 형태로 입력한다.

 

문제없이 입력했다면 다음과 같은 형태로 ec2에 연결된 PC파일을 삭제하거나 할수있다.

Ec2 device에 용량이 없다던가 할경우 해당 프로그램을 삭제가 가능하다!..

만일 삭제 또는 접근권한이 없다고 나타날경우 다음 명령어를 ec2에 입력시 문제없어 권한문제는 해결

# 해당 디렉토리의 권한 변경
 → chmod 777 /var/www/html

# 해당 디렉토리 + 하위 모든 파일의 권한 변경
 → chmod -R 777 /var/www/html

 

 

'기타' 카테고리의 다른 글

구글 폰트 적용시키기  (0) 2024.09.17
카카오맵 api 활용하기  (0) 2024.07.21
이미지 배치하기  (0) 2024.02.23

구글에 "고양이" 를 검색했을때 버튼이 나타나며 이것을 클릭했을때 현재 마우스 클릭위치를 기준으로 고양이 발바닥이 나타나는 이스터에그가 존재한다.

이것을 만들어볼거다...

기초 흐름

1. 사용할 img를 정한다

2. 클릭을 했을때 특정한 구역(box 등)에 나타난다

3. 랜덤하게 회전된 모습으로 출력한다.

 

조건

1. 이미지는 겹쳐지도록 만들어야한다.

2. 사이즈는 200,200으로 잡았다.

3. 구역의 사이즈는 동적페이지로 구성해야한다 (화면이 커져도 작아져도 그에 맞춰지도록)

 

enjoy.jsp

<section name="form-section">
	<form id="fileUploadForm" enctype="multipart/form-data">
		<input type="file" name="file" id="file" onchange="previewImage(this);" />
		<img id="preview" style="max-width: 200px; max-height: 200px;">
		<button type="button" onclick="uploadFile()">Upload</button>
	</form>
</section>

//이미지가 나올 컨테이너
<figure id="img-section"></figure>
<button id="loadImage">버튼을 클릭하세요</button>
<button id="clear">삭제하기</button>

<script> 
let uploadedImageUrl = null;

//업로드 이미지 미리보기
    function previewImage(input) {
        if (input.files && input.files[0]) {
            var reader = new FileReader();  
            reader.onload = function (e) {
                uploadedImageUrl = e.target.result; // 업로드된 이미지의 URL 저장
                document.getElementById('preview').src = uploadedImageUrl;
            }
            reader.readAsDataURL(input.files[0]);
        }
    }
    
//이미지 랜덤 배치하기
    document.getElementById('loadImage').addEventListener('click', function() {
        if (uploadedImageUrl) {
            const imgSection = document.getElementById('img-section');
            const img = document.createElement('img');
            img.src = uploadedImageUrl;

            // 이미지의 크기를 200x200 픽셀로 설정
            img.style.width = '200px';
            img.style.height = '200px';
            img.style.position = 'absolute';
            //양 끝 위치에 배치시 잘릴 우려가 있어 이미지 크기만큼 제외 
            const maxTop = imgSection.clientHeight - 200; 
            const maxLeft = imgSection.clientWidth - 200; 
            img.style.top = Math.floor(Math.random() * maxTop) + 'px';
            img.style.left = Math.floor(Math.random() * maxLeft) + 'px';
            // 이미지에 랜덤한 회전 각도 적용
            const rotationDegree = Math.floor(Math.random() * 360); // 0도에서 359도 사이의 랜덤한 값
            //ES6 이전 버전이라 이렇게 작성
            //ES6 이후는 밑의 주석처리 코드로 작성
            //img.style.transform = `rotate(${rotationDegree}deg)`;
            
            img.style.transform = 'rotate(' + rotationDegree + 'deg)';
            let scale = 0;
            let opacity = 0;
            const scaleStep = 0.05;
            const opacityStep = 0.05;

            function animate() {
                scale += scaleStep;
                opacity += opacityStep;

                if (scale < 1) {
                    img.style.transform = `rotate(${rotationDegree}deg) scale(${scale})`;
                    img.style.opacity = opacity;
                    requestAnimationFrame(animate);
                } else {
                    img.style.transform = `rotate(${rotationDegree}deg) scale(1)`;
                    img.style.opacity = 1;
                }
            }

            requestAnimationFrame(animate);
            imgSection.appendChild(img);
        } else {
            alert('먼저 이미지를 업로드해주세요.');
        }
    });
    
    //삭제 애니메이션
    document.getElementById('clear').addEventListener('click', function() {
    	 var imgSection = document.getElementById('img-section');
 // 높이와 투명도를 0으로 변경
    imgSection.style.height = '0px';
    imgSection.style.opacity = '0';

    // 전환 효과가 완료되면 내용 삭제
    imgSection.addEventListener('transitionend', function() {
        imgSection.innerHTML = ''; 
        imgSection.style.height = ''; 
        imgSection.style.opacity = '1'; 
    }, { once: true }); 
    });
</script>

 

CSS

#img-section {
  width: 100vw;
  height: 100vh; /* 뷰포트 높이의 80%로 설정 */
  justify-content: center; /* 가로 중앙 정렬 */
  align-items: center;
  margin: 10px;
  position: relative; /* 이미지들이 이 요소 내에서 절대 위치를 가짐 */
    overflow: hidden; /* 내부 요소가 밖으로 넘치지 않도록 함 */
  transition: height 0.5s ease, opacity 0.5s ease; /* 높이와 투명도 변화에 대한 전환 효과 적용 */
  
}

 

결과화면

 

'기타' 카테고리의 다른 글

구글 폰트 적용시키기  (0) 2024.09.17
카카오맵 api 활용하기  (0) 2024.07.21
FileZila 사용법  (0) 2024.06.27

+ Recent posts