Showing
3 changed files
with
105 additions
and
13 deletions
| ... | @@ -32,6 +32,22 @@ height: 100%; | ... | @@ -32,6 +32,22 @@ height: 100%; |
| 32 | <style> | 32 | <style> |
| 33 | #root, .modalClass{font-family: 'Do Hyeon', sans-serif;} | 33 | #root, .modalClass{font-family: 'Do Hyeon', sans-serif;} |
| 34 | </style> | 34 | </style> |
| 35 | + <style> | ||
| 36 | + body::-webkit-scrollbar { | ||
| 37 | + width: 10px; | ||
| 38 | + background: transparent; | ||
| 39 | + } | ||
| 40 | + body::-webkit-scrollbar-thumb { | ||
| 41 | + background-color: #940f0f; | ||
| 42 | + border-radius: 10px; | ||
| 43 | + } | ||
| 44 | + html, | ||
| 45 | + body { | ||
| 46 | + /* width:100vw; or % */ | ||
| 47 | + /* height:100vh; or % */ | ||
| 48 | + overflow-x: hidden; | ||
| 49 | + } | ||
| 50 | + </style> | ||
| 35 | </head> | 51 | </head> |
| 36 | <body class="pt-5" style="width : 100%; height:100%; margin: 0;"> | 52 | <body class="pt-5" style="width : 100%; height:100%; margin: 0;"> |
| 37 | <noscript>You need to enable JavaScript to run this app.</noscript> | 53 | <noscript>You need to enable JavaScript to run this app.</noscript> | ... | ... |
client/src/components/LandingMap.js
0 → 100644
| 1 | +/*global kakao*/ | ||
| 2 | +import React, { useEffect, useState } from 'react' | ||
| 3 | +import appKey from '../config/appKey.json'; | ||
| 4 | + | ||
| 5 | +const LandingMap = (props) => { | ||
| 6 | + | ||
| 7 | + useEffect(()=>{ | ||
| 8 | + | ||
| 9 | + const script = document.createElement("script"); | ||
| 10 | + script.async = true; | ||
| 11 | + script.src = | ||
| 12 | + `https://dapi.kakao.com/v2/maps/sdk.js?appkey=${appKey.value}&autoload=false`; | ||
| 13 | + document.head.appendChild(script); | ||
| 14 | + | ||
| 15 | + script.onload = () => { | ||
| 16 | + kakao.maps.load(() => { | ||
| 17 | + let container = document.getElementById("map"); | ||
| 18 | + let options = { | ||
| 19 | + center: new kakao.maps.LatLng(37.2464876, 127.0768072), | ||
| 20 | + level: 3 | ||
| 21 | + }; | ||
| 22 | + let map = new window.kakao.maps.Map(container, options); | ||
| 23 | + let positions = []; | ||
| 24 | + // 마커 이미지를 생성합니다 | ||
| 25 | + // 마커 이미지의 이미지 크기 입니다 | ||
| 26 | + let imageSize = new kakao.maps.Size(40, 40); | ||
| 27 | + // let imageSrc = "https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png"; | ||
| 28 | + let imageSrc_cafe = "https://cdn.icon-icons.com/icons2/882/PNG/512/1-68_icon-icons.com_68826.png"; | ||
| 29 | + let imageSrc_meal = "https://cdn.icon-icons.com/icons2/882/PNG/512/1-63_icon-icons.com_68800.png"; | ||
| 30 | + let imageSrc_pub = "https://cdn.icon-icons.com/icons2/882/PNG/512/1-71_icon-icons.com_68803.png"; | ||
| 31 | + | ||
| 32 | + const CreateMarkerImage = (type) => { | ||
| 33 | + if(type === '술집' || type === '호프') return new kakao.maps.MarkerImage(imageSrc_pub, imageSize); | ||
| 34 | + else if(type === '카페' || type === '디저트') return new kakao.maps.MarkerImage(imageSrc_cafe, imageSize); | ||
| 35 | + else return new kakao.maps.MarkerImage(imageSrc_meal, imageSize); | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + for(let i=0; i<props.datas.length; i++) { | ||
| 39 | + const temp = props.datas[i]; | ||
| 40 | + positions.push({ | ||
| 41 | + title: temp.name, | ||
| 42 | + latlng: new kakao.maps.LatLng(temp.latitude, temp.longitude), | ||
| 43 | + image : CreateMarkerImage(temp.type) | ||
| 44 | + }); | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + | ||
| 48 | + for (let i = 0; i < positions.length; i ++) { | ||
| 49 | + | ||
| 50 | + | ||
| 51 | + | ||
| 52 | + | ||
| 53 | + | ||
| 54 | + // 마커를 생성합니다 | ||
| 55 | + let marker = new kakao.maps.Marker({ | ||
| 56 | + map: map, // 마커를 표시할 지도 | ||
| 57 | + position: positions[i].latlng, // 마커를 표시할 위치 | ||
| 58 | + title : positions[i].title, // 마커의 타이틀, 마커에 마우스를 올리면 타이틀이 표시됩니다 | ||
| 59 | + image : positions[i].image // 마커 이미지 | ||
| 60 | + }); | ||
| 61 | + } | ||
| 62 | + }); | ||
| 63 | + | ||
| 64 | + | ||
| 65 | + }; | ||
| 66 | + }); | ||
| 67 | + | ||
| 68 | + | ||
| 69 | + return ( | ||
| 70 | + <> | ||
| 71 | + <h1 className="text-center"> | ||
| 72 | + <span className="font-weight-bold">MEALKHU MAP</span> | ||
| 73 | + </h1> | ||
| 74 | + <div id='map' style={{ | ||
| 75 | + 'width':'100%', | ||
| 76 | + 'height':'30rem' | ||
| 77 | + }}></div> | ||
| 78 | + </> | ||
| 79 | + ) | ||
| 80 | +} | ||
| 81 | + | ||
| 82 | +export default LandingMap; | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | import React, { useState, useEffect } from 'react'; | 1 | import React, { useState, useEffect } from 'react'; |
| 2 | import NavBar from '../components/NavBar'; | 2 | import NavBar from '../components/NavBar'; |
| 3 | -import MealCard from '../components/MealCard'; | 3 | +import LandingMap from '../components/LandingMap'; |
| 4 | import { CustomInput } from 'reactstrap'; | 4 | import { CustomInput } from 'reactstrap'; |
| 5 | import { Container, Row, Col } from "reactstrap"; | 5 | import { Container, Row, Col } from "reactstrap"; |
| 6 | import axios from 'axios'; | 6 | import axios from 'axios'; |
| 7 | -import Loading from '../components/Loading'; | 7 | + |
| 8 | 8 | ||
| 9 | const LandingPage = (props) => { | 9 | const LandingPage = (props) => { |
| 10 | const [datas, setDatas] = useState([]); | 10 | const [datas, setDatas] = useState([]); |
| ... | @@ -21,6 +21,7 @@ const LandingPage = (props) => { | ... | @@ -21,6 +21,7 @@ const LandingPage = (props) => { |
| 21 | const [cafe, setCafe] = useState(false); | 21 | const [cafe, setCafe] = useState(false); |
| 22 | const [etc, setEtc] = useState(false); | 22 | const [etc, setEtc] = useState(false); |
| 23 | 23 | ||
| 24 | + | ||
| 24 | useEffect(() => { | 25 | useEffect(() => { |
| 25 | const fetchData = async () => { | 26 | const fetchData = async () => { |
| 26 | const result = await axios( | 27 | const result = await axios( |
| ... | @@ -152,21 +153,14 @@ const LandingPage = (props) => { | ... | @@ -152,21 +153,14 @@ const LandingPage = (props) => { |
| 152 | onChange={()=>setEtc(!etc)} | 153 | onChange={()=>setEtc(!etc)} |
| 153 | /> | 154 | /> |
| 154 | </Col> | 155 | </Col> |
| 155 | - | 156 | + |
| 156 | </Row> | 157 | </Row> |
| 158 | + {datas ? <LandingMap | ||
| 159 | + datas = {datas} | ||
| 160 | + /> : 'loading...'} | ||
| 157 | </Container> | 161 | </Container> |
| 158 | 162 | ||
| 159 | 163 | ||
| 160 | - <Container> | ||
| 161 | - {/* ???????? ???? */} | ||
| 162 | - {/* <FormGroup> | ||
| 163 | - <Label for="exampleCheckbox">??</Label> | ||
| 164 | - <div> | ||
| 165 | - <CustomInput type="checkbox" id="exampleCustomInline" label="??" inline /> | ||
| 166 | - | ||
| 167 | - </div> | ||
| 168 | - </FormGroup> */} | ||
| 169 | - </Container> | ||
| 170 | 164 | ||
| 171 | 165 | ||
| 172 | 166 | ... | ... |
-
Please register or login to post a comment