반응형

 

[javascript] 팝업창 열고 지정 영역 제외 인쇄하기

 

영수증 팝업을 만들고 팝업 안에 프린트하기 버튼을 만든 후에, 버튼을 누르면 버튼을 제외한 영역이 인쇄되게끔 만드는 작업을 진행하였습니다.

필요한 화면은 총 두가지로,
영수증을 띄워야 하는 버튼이 있는 화면과
영수증과 프린트하기 버튼이 있는 화면이 필요합니다.

영수증을 띄워야 하는 버튼이 있는 화면부터 보겠습니다.
button 태그와 script를 만들어줍니다.

 

<button onclick="pop();">Pop</button>
<script type="text/javascript">
let POP;
function pop() {
POP = window.open('pri.html', 'thePopup', 'width=722,height=480')
};
</script>

 

그 다음 영수증과 프린트하기 버튼이 있는 화면을 만들어줍니다.

 

*HTML

 

<div id="wrap">
	<div class="order">[영 수 증]</div><br>
	<div class="container">
		<div class="info">
			[매 장 명] <br><br>
			<span class="adress">[주 소]</span><br><br>
		[대 표 자] 최종일 [TEL] <br><br>
		</div>
		============================
		<div class="info2">
			<ul class="title">
				<li>메 뉴 명</li>
				<li>단 가</li>
				<li>수 량</li>
				<li>금 액</li>
			</ul>
		</div>
		------------------------------------------------
		<div class="info2">
			<div class="pay">음식명</div>
			<ul class="orders">
				<li>000046</li>
				<li>9,900</li>
				<li>1</li>
				<li>9,900</li>
			</ul>
		</div>
		------------------------------------------------
		<div class="info2">합 계 금 액
			<div class="price">9,900</div>
		</div>
		------------------------------------------------
		<div class="info2">
			<ul class="vat">
				<li>부가세 과세물품가액</li>
				<li>부가세</li>
			</ul>
			<ul class="vat">
				<li>------</li>
				<li>------</li>
			</ul>
		</div>
		------------------------------------------------
		<div class="info2">받 을 금 액
			<div class="price">9,900</div>
		</div>
	</div>
	<button id="noprint" onclick="pops();">프린트하기</button>
</div>
<script>
function pops(){
	window.print();
	return false;
}
</script>

 

*CSS

 

html,body {
	margin:0px;
	padding:0px;
}
body, h1, h2, h3, h5, h6, li, p { 
	font-family: sans-serif, '맑은고딕', 'MalgunGothic' !important;
}
ul,li {
	margin:0px;
	padding:0px;
	list-style:none;
}
#wrap {
	margin:0 auto;
	text-align:center;
}
.container {
	overflow:hidden;
	margin:0 auto;
	width:220px;
	text-align:left;
	font-size:11px;
}
.order {
	padding-top:20px;
	font-weight:900;
	font-size:13px
}
.adress {
	letter-spacing:2.8px;
}
.info {
	margin-bottom:2px;
}
.info2 {
	line-height:2;
}
.info2:last-child {
	font-size:13px;
	font-weight:700
}
.pay {
	margin-bottom:-7px
}
.price {
	display:inline-block;
	float:right;
	padding-right:4px;
}
.title > li{
	display:inline-block;
	padding-right:25px;
}
.orders > li {
	display:inline-block;
	padding-right:23px;
}
.title > li:last-child, .orders > li:last-child {
	float:right;
	padding-right:4px;
}
.vat {
	display:inline-block;
	margin:3px 0px;
	line-height:1.5;
}
.vat:first-child {
	padding-left:30px;
}
.vat:last-child {
	float:right;
	padding-right:4px;
	text-align:right;
}
#noprint {
	margin-top:20px;
	padding:12px 20px;
	border:0px;
	background-color:#44a8ff;
	color:#fff;
	font-size:20px;
	font-weight:bold
}

 

여기까지 하면 전부 완료된 것처럼 보이겠지만 아직 하나가 더 남았습니다. 

영수증만 인쇄를 해야하는데 보시는 것처럼 화면에는 프린트하기 버튼이 남아있는 상태입니다. 

버튼을 제외하고 프린트가 되게끔 해야되는데요, 

해당 작업은 스크립트 작업이 아닌 css에서 추가 작업이 들어갑니다. 

코드는 아래와 같이 지정하면 해당 내용을 제외한 채로 인쇄가 가능하게 되죠.

 

@media print {
  #noprint { 
	display:none;
	}
}

반응형
반응형

 

[javascript] 모바일SMS 문자 보내기

 

해당 기능은 문자를 보내는 방법이라기보다는 사용자가 내가 지정한 번호와 문구로 문자를 보낼 수 있도록 
문자 화면으로 이동시켜주는 기능에 가깝습니다.

단순하게 공유하기 기능으로 작업하면 되겠다고 생각하고 작업을 했었는데,
세상의 모든 핸드폰은 안드로이드와 아이폰으로 나뉘어있다는 사실을 잠시 망각했었죠. (...)
내 폰(안드로이드)에서는 잘만 되는데 아이폰에서는 왜 그렇게 안 되던지.

보내는 기능에 앞서, 접속해오는 유저가 아이폰 유저인지 안드로이드 유저인지 확인부터 하는 작업을 거쳐야 합니다.

 

function checkMobile(){
	var varUA = navigator.userAgent.toLowerCase(); //userAgent 값 얻기
	if ( varUA.indexOf('android') > -1) {
		//안드로이드
		return "android";
	} else if ( varUA.indexOf("iphone") > -1||varUA.indexOf("ipad") > -1||varUA.indexOf("ipod") > -1 ) {
		//IOS
		return "ios";
	} else {
		//아이폰, 안드로이드 외
		return "other";
	}
}

 

해당 스크립트로 유저를 구분 짓는 것까지 완료되었다면 문자 보내는 기능부터 만들어야겠죠.
html 안에 class명이 btn이란 버튼이 있다 가정하고 아래 스크립트를 추가해줍니다.

 

const btn = document.querySelector('.btn');
btn.addEventListener('click', function() {
	checkM(checkMobile());
});

function checkM(m){
	location.href = 'sms:' +'전화번호'+(m == 'ios' ? '&' : '?') + 'body='+ encodeURIComponent("보낼 내용");
}

 

해당 스크립트를 적어주면 안드로이드에서도 아이폰에서도 사용되는 기능이 적용됩니다.

안드로이드와 아이폰이 location.href에서 각각 어떻게 다른지는 아래 내용에서 참고 부탁드립니다.

 

// 안드로이드
location.href = sms:받을번호?body=보낼메세지;

// 아이폰
location.href = sms:받을번호&body=보낼메세지;

 

* 참고 사이트 : https://justbobby.tistory.com/20 , https://justbobby.tistory.com/21

반응형
반응형

예전 블랙 프라이데이 때, 어도비 클라우드 서비스를 구매하게 되고 1년간 잘 쓰다가 서비스 연장을 해야될 시기가 와서 하는 수 없이 자주 쓰는 포토샵과 일러스트 두 개를 각각 사용료를 내고서 사용하고 있던 중, 어도비 블랙 프라이데이가 다시 시작되서 차라리 가격이 같다면 블랙 프라이데이로 갈아타자는 생각이 들었다. 

 

(포토샵, 일러스트까지 합쳐서 4만 8천원쯤이었고 블랙프라이데이로 어도비 클라우드 서비스가 4만 7천원 정도였으니까)

 

무작정 아무 생각 없이 일러스트를 어도비 클라우드 서비스로 플랜을 바꾸고 포토샵을 플랜 해지를 하려고 보니 위약금이 12만원인가 나오는게 아닌가.

 

당황해서 우선 중단하고 뭐 이렇게 많이 나오는가 싶어서 서치를 해보니, 어도비에서 위약금으로 악명이 어마어마하다는 사실을 그 때서야 알았다. 아니 아무리 그래도 십얼마는 너무 하잖아. 클라우드 서비스를 구매한 마당에 포토샵을 이미 쓸 수 있는 나로써는 포토샵을 또 돈을 내야한다는 게 납득이 안 되서 어도비 코리아 고객센터에 자초지종이라도 설명해볼까 싶었지만.. 어도비 코리아에 대한 서치들을 읽어보니, 위약금은 무조건 내야한다는 식으로만 답이 온다는 내용들에 문의해봤자 소용이 없겠구나 하는 생각부터 들었다. (망했네) 

 

어쩌지, 어쩌지 하면서 애꿎은 발만 동동 구르다가 우선 클라우드 서비스부터 취소하자라는 생각에 취소버튼을 눌렀는데... 어라? 위약금이 나오지 않았다. 뭐지, 싶어서 확인해보니 내가 당일에 플랜을 바꾸고 당일에 취소를 한 것이, 바뀐 플랜은 신규건으로 등록 되어 취소하는 것이기 때문에 위약금이 나오지 않는 것이었다. (유레카)

 

우선 침착하게 클라우드 서비스를 취소했고 (어차피 위약금 안 나오니까) 재빠르게 포토샵을 클라우드 서비스로 플랜을 변경하니 위약금 없이 클라우드 서비스로 갈아탈 수 있었다. 

 

신용카드로 결제했기 때문에 취소처리는 이틀 뒤에나 확인해볼 수 있어서 마음을 내려놓고 기다려보니 다행히 위약금에 대한 내용은 없었다. 천몇백원 내라는 내역이 2건 남아있긴 했는데 이게 취소했을 때 내는 취소금? 인 것 같았다. (2번 플랜 취소를 했으니까.) 위약금 12만원을 봤던 나로써는 이정도 취소금도 그렇게 아깝진 않았다. 그래, 차라리 취소금이 낫지, 가져가라. 가져가.

 

어쨌든 어도비를 계속 써야하는 내 입장에서는 앞으로 클라우드 서비스는 공부하는데 필요하기도 하고 디스카운트가 1년까지니까 그 이후에는 다시 포토샵과 일러스트로 재등록을 해야 될 테니, 어찌보면 쫄려가며 몸으로 부딪힌 꿀팁을 얻은 셈이었다. 

반응형