WEB

Vue.js 카카오맵 지도 위에 커스텀 오버레이 표시하기

dotol 2021. 12. 11. 20:14

https://apis.map.kakao.com/web/sample/

카카오 맵에 기능을 적용시킬때는 대부분 이 Developers 문서를 사용하면 해결됩니다.

하지만 저 같은 경우 적용되지 않는 부분이 있었고, 이 방법을 사용하여 해결 할 수 있었습니다.

 

원래 이런식으로 백틱을 사용하여 하는 것이지만 이 방법이 잘 안된다면 아래 코드를 참고해 보세요

(*아래 코드는 위의 코드를 바꾼 코드가 아닙니다! 아래가 전체코드)

var content = `
		<div class="overlaybox">
			<div class="boxtitle">${title}</div>
			<div class="first"><img src="${root}/그림 경로"></div>
			<ul>
				<li class="up">
					<span class="title">년도</span>
					<span class="count">${place.year}</span>
				</li>
				<li>
					<span class="title">주소</span>
					<span class="count">${place.city} </span>
				</li>
				<li>
					<span class="title">금액</span>
					<span class="count">${place.price}</span>
				</li>
                                                  .
                                                  .
                                                  .
			</ul>
		</div>
	`;

 

수정한 전체 코드

var content = document.createElement("div");
        content.className = "overlaybox";

        var title = document.createElement("div");
        title.className = "map-popup-title";

        var aptname = document.createElement("span");
        aptname.className = "boxtitle";
        aptname.appendChild(document.createTextNode(pos.name));
        title.appendChild(name);
        content.appendChild(title);

        var ulinfo = document.createElement("ul");

        var liinfo1 = document.createElement("li");
        var addrtitle = document.createElement("span");
        addrtitle.className = "title";
        liinfo1.appendChild(addrtitle);
        var addr = document.createElement("span");
        addr.className = "count";
        addr.appendChild(
          document.createTextNode(pos.city)
        );
        liinfo1.appendChild(addr);
        ulinfo.appendChild(liinfo1);

        var liinfo2 = document.createElement("li");
        var yeartitle = document.createElement("span");
        yeartitle.className = "title";
        yeartitle.appendChild(document.createTextNode("년도:"));
        liinfo2.appendChild(yeartitle);
        var year = document.createElement("span");
        year.className = "year";
        year.appendChild(document.createTextNode(pos.year + "년"));
        liinfo2.appendChild(year);
        ulinfo.appendChild(liinfo2);

        var liinfo3 = document.createElement("li");
        var pricetitle = document.createElement("span");
        pricetitle.className = "title";
        pricetitle.appendChild(document.createTextNode("금액:"));
        liinfo3.appendChild(pricetitle);
        var price = document.createElement("span");
        price.className = "price";
        price.appendChild(document.createTextNode(pos.price + "(만원)"));
        liinfo3.appendChild(price);
        ulinfo.appendChild(liinfo3);

        content.appendChild(ulinfo);

        var buttonContainer = document.createElement("div");
        buttonContainer.className = "popup-buttons";

	// 더하기 버튼(이미지 버튼)
        var addBtn = document.createElement("button");
        addBtn.className = "popup-button";
        var add = document.createElement("img");
        add.className = "btn";
        add.src =
          "그림 주소";
        add.appendChild(add);
        add.onclick = () => {
          if (!isMember) {
            alert("회원만 사용가능한 기능입니다.");
          } else {
            console.log(memberid, pos.code);
            const params = {
              userId: memberid,
              aptCode: pos.code,
            };
            add(
              params,
              ({ data }) => {
                let msg = "실패!";
                if (data === "success") {
                  msg = "성공";
                }
                alert(msg);
              },
              (error) => {
                console.log(error);
              }
            );
          }
        };

	// 닫기 버튼(이미지 버튼)
        var closeBtn = document.createElement("button");
        closeBtn.className = "popup-button";
        var ximg = document.createElement("img");
        ximg.className = "btn";
        ximg.src =
          "그림 주소";
        closeBtn.appendChild(ximg);
        closeBtn.onclick = function () {
          overlay.setMap(null);
        };

        buttonContainer.appendChild(closeBtn);
        buttonContainer.appendChild(addBtn);

        content.appendChild(buttonContainer);

        kakao.maps.event.addListener(marker, "click", function () {
          overlay.setMap(map);
        });

        overlay.setContent(content);