PATH
SAMPLE
SCRIPT
기본 설정
- 공통사용 /resource/js/ui.vendor.js /resource/js/ui.js
- ui.reInit($jq(#ID)); 페이지 로드 후 콘텐츠 변경 시, 변경 콘텐츠 내 슬라이드, 아코디언, 탭 등 공통 실행 함수가 포함되어 있을 때 공통실행 함수 재실행.
title 접근성
텍스트변경1
텍스트변경3
텍스트변경2
텍스트변경1
document.title += ' > title 접근성' <!-- document.title에 텍스트 추가 -->
<h2 data-addtitle='this'>title 접근성</h2>
<h2 data-addtitle='title 접근성'></h2>
텍스트 변경시,
<button type="button" data-blind-title='title-test '>텍스트변경1</button>
<button type="button" data-blind-title='title-test'>텍스트변경3</button>
<button type="button" data-blind-title='title-test'>텍스트변경2</button>
<h2 id="title-test ">텍스트변경1</h2> <!-- 클릭 이벤트 발생시, data-blind-title에 지정된 id를 찾아 텍스트 변경 -->
- 페이지의 제목이 될 탭이나 상세 제목의 경우 data-addtitle 로 document.title에 텍스트를 추가한다.
- data-addtitle='this' or "String" 값이 this일 경우 해당엘리먼트.text()가 추가 텍스트가 된다.
이미지 반응형
<span data-picture='' data-alt='알트1'>
<span data-src='s1.png'></span>
<span data-src='s2.png' data-media='(min-width: 641px)'></span>
<span data-src='s3.png' data-media='(min-width: 841px)' data-alt='알트2'></span> <!-- 이미지별로 다른 alt 속성을 가져야 할 경우. -->
</span>
탭
overlap1
overlap2
overlap1
overlap1-1
overlap1-2
overlap1-3
overlap2
overlap2-1
overlap2-2
overlap2-3
Tab 1
Content 1
Tab 3
Content 3
<ul data-tab='{"activeidx" : "0"}'>
<li data-act='tab'><a href="#tabCont1">Tab 1</a></li>
<li data-act='tab'><a href="#tabCont2" data-callback='{"callback" : "alert(2)"}'>Tab 2</a></li>
<li data-act='tab'><a href="#tabCont3">Tab 3</a></li>
</ul>
<!-- Case 2 // -->
<ul data-tab='{"acttit":".tab", "callback" : "alert(\"Tab callback이 다 같은 경우\")"}'>
<li class="tab"><button type="button" data-url='#tabCont1, #tabCont1-1'>Tab 1</button></li>
<li class="tab"><button type="button" data-url='#tabCont2, #tabCont2-1'>Tab 2</button></li>
</ul>
- data-tab='' 일 경우 공통 스크립트 실행
- activeidx : false 페이지 로딩시 활성화 시킬 목록이 있을때 해당 목록 index번호를 지정
- actbtn : null 탭 버튼이 별도로 있을 경우. 생략 시, acttit 값을 가져감
- acttit : '[data-act="tab"]' 탭 목록의 주제영역
- actcssname : "active" 활성화 시 클래스명
- callback : null 탭 이동 후 실행되어질 Function
- <button data-callback=""> 탭 버튼마다 다르게 실행 될 js가 있는 경우, 탭 이동 후 실행되어질 Function
- 기본 설정 변경 시 data-tab='{"activeidx" : "0", "actbtn" : ".btn", "acttit" : ".tabitem"}'
- a,button 태그의 href="#ID" or data-url="#ID" 데이터값으로 엘리먼트를 찾음
- 탭 클릭시 두개 이상의 콘텐츠가 보여져야 할 경우.
<a href ="#ID" data-url ='#ID, #ID2'>
<button type="button" data-url ='#ID, #ID2'>
CLICK EVENT
data-toggleclass
<!-- 클릭할 때마다 클래스명이 추가/삭제 -->
<button type="button" data-toggleclass="active" class="guide-btn">class toggle</button>
branch-cdi
branch-april
branch-ig
branch-ig toggle
<!-- 원래 클래스명(정규식 가능)과 변경할 클래스명 받아 치환 -->
<button type="button" onclick='$jq("#areabranch").replaceClass("branch-[^ ]*","branch-cdi")'>
<button type="button" onclick='$jq("#areabranch").replaceClass("branch-[^ ]*","branch-april")'>
<button type="button" onclick='$jq("#areabranch").replaceClass("branch-[^ ]*","branch-ig")'>
<button type="button" onclick='$jq("#areabranch").replaceClass("branch-[^ ]*","branch-ig","branch-default")'> <!-- 인자가 세개일 경우 세번째는 디폴트 클래스임. -->
<!-- 데이터로 넘길 경우 이스케이프 처리 참고. -->
data-callback='{"callback" : "$jq(\"#areabranch\").replaceClass(\"branch-[^ ]*\",\"branch-cdi\")"}'
<!-- 라디오/체크박스의 경우 토글로 내용을 보이고 숨길때 사용 -->
<div>
<input type="radio" id="f-chk-all-2" class="fm-rad" name="f-chk-all" onclick="ui.checkedToggle(this, {view:['case1'], hide:['case2'], closest:'div'});">
<input type="radio" id="f-chk-all-3" class="fm-rad" name="f-chk-all" onclick="ui.checkedToggle(this, {view:['case2'], hide:['case1'], closest:'div'});" checked>
<input type="checkbox" id="f-chk-all" class="fm-chk" onchange="ui.checkedToggle(this, {view:['case1'], hide:['case2'], closest:'div'});">
<div data-chkarea="case1" class="guide-tab-cont" style="display: none;">Content 1</div>
<div data-chkarea="case2" class="guide-tab-cont" style="display: block;">Content 2</div>
</div>
<!-- 체크박스의 경우 체크해제일때 view,hide가 반대로 동작 -->
BY NAME내림차순
BY UNIVERSITY오름차순
<!-- 내림차순일 경우 -->
<button type="button" class="btn-sort sort-desc" onclick="ui.sort(this, {'cname':'sort-desc','desc':'내림차순','asc':'오름차순'})">BY NAME<span class="ir i-sort">내림차순</span></button>
<!-- 오름차순일 경우 -->
<button type="button" class="btn-sort" onclick="ui.sort(this, {'cname':'sort-desc','desc':'내림차순','asc':'오름차순'})">BY UNIVERSITY<span class="ir i-sort">오름차순</span></button>
내부링크
href="#guideClickEvent"
data-url='#guideClickEvent'
"add" : 20
"isfocus" : false
"callback" : "alert(1)"
<a href="#guideClickEvent" class="guide-btn" data-anchor=''>href="#guideClickEvent"</a>
<button type="button" class="guide-btn" data-url='#guideClickEvent' data-anchor=''>data-url='#guideClickEvent'</button>
<button type="button" class="guide-btn" data-url='#guideClickEvent' data-anchor='{"add" : 20}'>"add" : 20</button>
<button type="button" class="guide-btn" data-url='#guideClickEvent' data-anchor='{"isfocus" : false}'>"isfocus" : false</button>
<button type="button" class="guide-btn" data-url='#guideClickEvent' data-anchor='{"callback" : "alert(1)"}'>"callback" : "alert(1)"</button>
- data-anchor='' 일 경우 공통 스크립트 실행
- add:0 : 스크롤 이동시 이동값에 수치를 더하는 경우
- isfocus:true : 스크롤 이동 후 포커스를 이동하지 않을 경우 false
- isscroll:true : 스크롤 이동하지 않을 경우 false
- callback:null : 포커스나 스크롤 실행 후 실행되어질 Function
- 기본 설정 변경 시 data-anchor='{"add" : 20, "isfocus" : false, "callback" : "alert(1)"}'
- a,button 태그의 href="#ID" or data-url="#ID" 데이터값으로 엘리먼트를 찾음
- data-anchorfocus : 스크롤 이동의 기준이 되는 엘리먼트내에 특정 엘리먼트로 포커스 이동시킬 경우 엘리면트에 추가.
- data-anchorwrap : 스크롤 값을 이동시킬 엘리먼트가 body가 아닌 경우 해당 엘리먼트에 추가.
popup
팝업 영역
레이어팝업 dim
닫기
팝업 영역2
닫기
<button type="button" class="guide-btn" data-uipop ='1' data-url='#popsample'>레이어팝업 no-dim</button>
<button type="button" class="guide-btn" data-uipop ='1' data-url='#popsample2'>레이어팝업 dim</button>
<a href="popup.html" class="guide-btn" data-uipop ='["이름", "width=422, height=637, left=0, top=0"]'>window popup</a>
<button type="button" class="guide-btn" data-uipop ='0' data-url ='#popsample2'>닫기</button>
<div id="popsample" class="layerpop" data-uipopset =''>
<div class="layerpop-sc">
<div class="layerpop-wrap">
팝업내용
<button type="button" class="guide-btn" data-uipop ='0'>닫기</button>
</div>
</div>
</div>
<div id="popsample2" class="layerpop" data-uipopset='{"isDim" : true}' > <!-- isDim:true일 경우 열리면 dim클래스가 붙음. class="layerpop dim" -->
<div class="layerpop-sc">
<div class="layerpop-wrap">
팝업내용
<button type="button" class="guide-btn" data-uipop ='0'>닫기</button>
</div>
</div>
</div>
<!-- 스크립트에서 레이어 열리고 닫힐때 callback 예) -->
$jq("#popsample").data("uipopset ",{callbackOpen : function(){ alert("열림") }});
$jq("#popsample2").data("uipopset ",{callbackClose : function(){ alert("닫힘") }});
<!-- 옵션 재설정 예) -->
$jq("#popsample").uipop("setoption",{"callbackOpen":function(){ alert("열림2");} });
$jq("#popsample").uipop("setoption",{"callbackOpen":function(){ alert("열림3");}, "callbackClose":function(){ alert("닫힘3");} });
<!-- 옵션값 참조 예) -->
$jq("#popsample").uipop("getoption","callbackOpen");
<!-- js내에서 팝업열때 예) -->
$jq("#popsample").uipop("open");
<!-- js내에서 팝업닫을때 예) -->
$jq("#popsample").uipop("close");
- a,button 태그의 href="#ID" or data-url="#ID" 데이터값으로 엘리먼트를 찾음
- data-uipop='["이름", "width=300, height=400, left=0, top=0"]' window 팝업 열기
- data-uipop='1' 팝업 열기
- data-uipop='0' 팝업 닫기
- callbackOpen: null 팝업 열린 후, callback
- callbackClose: null 팝업 닫힌 후, callback
- isDim : false dim일 경우, 클래스 추가(.dim) isDim:true일 경우 css로 위치 잡음
- addClass : String .uipop-container에 클래스 추가시 사용.
- isRepos : true isDim:true가 아닐 경우, 위치 계산을 할 것인지 여부
- isFixed : true position:fixed 일 경우
- 기본 설정 변경 시 data-uipop='{isRepos : false}'
dropdown
카테고리 선택
- data-dropdown='' 일 경우 공통 스크립트 실행
- hover : false 마우스 오버 이벤트 일 경우 true
- selected : false <select> 처럼 선택시 주제가 변경될 경우 true
- focusout : true 포커스 아웃 시, 닫히는 이벤트 발생 여부
- anitime : 250 애니메이션 지속 시간
- effect : "fade" 애니메이션 type. slide or fade
- acttit : '[data-act="title"]' dropdown의 주제영역
- actcont : '[data-act="cont"]' dropdown의 컨텐츠영역
- actclose : '[data-act="close"]' 닫기 버튼이 별도로 존재할 경우
- actcssname : "active" 활성화 시 클래스명
- media : null 해상도에 따라 실행될때 사용. ex) "media":"(max-width: 767px)"
- 기본 설정 변경 시 data-dropdown='{"hover" : true, "acttit" : ".title"}'
첨부파일 customizing / 삭제 버튼
파일 찾기
삭제
<div class="guide-fm">
<input type="file" id="f-attach" data-fakefile="file" data-delete=".fm-del" />
<label for="f-attach" class="fm-btn">파일 찾기</label>
<span class="guide-del-wrap">
<input type="text" title="첨부파일" placeholder="첨부파일 + 삭제" data-fakefile="text" readonly="readonly" />
<button type="button" class="fm-del ">삭제</button>
</span>
</div>
삭제
<div class="guide-fm">
<input type="text" title="첨부파일" class="guide-fm-ipt" placeholder="삭제버튼" data-delete=".fm-del" />
<button type="button" class="fm-del ">삭제</button>
</div>
select placeholder
선택
옵션1
옵션2
<select class="guide-fm-sel" data-placeholder='전체' style="width:100%;">
<option>전체</option> <!-- selected일 경우 "placeholder" 클래스 추가 -->
<option>옵션1</option>
<option>옵션2</option>
</select>
- data-placeholder='string' 일 경우 공통 스크립트 실행
- selected된 텍스트와 data-placeholder='string'이 동일 한경우 placeholder 클래스 추가.
캘린더
상담 가능 날짜 선택
<!-- 스크립트 적용전 코드 -->
<input type="text" data-calendar='' />
<!-- 스크립트 적용후 코드 (.flatpickr-wrapper 추가됨) -->
<div class="flatpickr-wrapper">
<label for="f-time" class="blind">상담 가능 날짜 선택</label>
<input type="text" id="f-time" data-calendar='' />
</div>
아코디언
<div data-accordion='' class="guide-accordion">
<div class="guide-accordion-item">
<a href="#none" data-act='title' class="guide-accordion-title">1. Logistics<span class="arr">view</span></a>
<div data-act='cont' class="guide-accordion-cont">
콘텐츠 내용 영역 1
</div>
</div>
<div class="guide-accordion-item">
<a href="#none" data-act='title' class="guide-accordion-title">2. Grading<span class="arr">view</span></a>
<div data-act='cont' class="guide-accordion-cont">
콘텐츠 내용 영역 2<br /><button type="button" class="guide-btn" data-act='close'>닫기</button>
</div>
</div>
</div>
- data-accordion='' 일 경우 공통 스크립트 실행
- type : "normal" 일반적인 아코디언 "normal", 항상 한개는 열린 상태 "single", 토글 개별로 작동 "multi"
- notslide : false 컨텐츠 block/hidden 없이 class만 변경 시킬때 true
- reset : false hover 값이 false일 경우 blur/true일 경우 mouseleave 이벤트 발생 시 초기 상태로 돌아가야 할 경우 true or "class"
- effoverlap : false 열려있는 컨텐츠가 있을 경우 애니메이션 효과 없앨 경우 true
- effect : "slide" 애니메이션 type. slide or fade
- hover : false 마우스 hover/leave로 열리고 닫힐 경우 true
- activeidx : false 페이지 로딩시 활성화 시킬 목록이 있을때 해당 목록 index번호를 지정
- anitime : 300 애니메이션 지속 시간
- acttit : '[data-act="title"]' 아코디언 목록의 주제영역
- actbtn : '[data-act="btn"]' 아코디언 토글 버튼이 별도로 있을 경우. 생략 시, acttit 값을 가져감
- actcont : '[data-act="cont"]' 아코디언 목록의 컨텐츠영역
- actclose : '[data-act="close"]' 닫기 버튼이 별도로 존재할 경우
- actcssname : "active" 활성화 시 클래스명
- media : null 해상도에 따라 실행될때 사용. ex) "media":"(max-width: 767px)"
- 기본 설정 변경 시 data-accordion='{"type" : "single", "acttit" : ".title"}'
grid.case1
btn1-1
btn1-2
cont1-1
cont1-2
btn2-1
btn2-2
cont2-1
cont2-2
<div class="guide-grid" data-grid='{"name":"case1","cssname":"active","item":".item","btn":".btn","cont":".cont"}'>
<div class="item">
<button type="button" class="btn active">btn1-1</button>
<button type="button" class="btn">btn1-2</button>
<div class="cont">cont1-1</div>
<div class="cont">cont1-2</div>
</div>
<div class="item">
<button type="button" class="btn">btn2-1</button>
<button type="button" class="btn">btn2-2</button>
<div class="cont">cont2-1</div>
<div class="cont">cont2-2</div>
</div>
</div>
- data-grid='{"name":"case1"}' 일 경우 공통 스크립트 실행
- "btn" 클릭시, 버튼이 포함된 "item"이 활성화 되고, "btn"에 해당하는 "cont" 활성화될때 사용. 활성화된 영역에 클래스를 추가시키고, 비활성화된 영역의 클래스를 삭제.
- "name" grid 케이스명
- "cssname" 활성화된 영역에 추가될 클래스명
- "item" "btn", "cont" 그룹핑 영역
- "btn" 클릭 이벤트 발생시킬 버튼
- "cont" 이벤트 발생시, 버튼과 매칭되는 컨텐츠
슬라이드
- data-slide='-중략-' 일 경우 공통 스크립트 실행
- "option":{기본설정}
dots: true, slidesToShow: 1, slidesToScroll: 1, variableWidth: false, infinite: false, fade: false, autoplay: false, speed:600, autoplaySpeed: 3000
- "option":{"arrows":false} slick에 없는 속성으로 이전/다음 버튼 한번에 노출 안시킬때 사용.
- "option":{"dots":"custom"} slick에 없는 속성값으로 페이징 버튼에 텍스트(data-title 값을 가져감)를 변경할때 사용.
- "option":{"pagecount":true} slick에 없는 속성으로 현재 페이지 번호 표시여부 예) 1/10
- option은 slick settings 를 참조
<div class="guide-slide-list" data-slide='{"case":"case1","option":{"autoplay":true, "dots":"custom"}}'>
<div class="slide" data-title='slide title 1'><a href="#none" class="inner">1</a></div>
<div class="slide" data-title='slide title 2'><a href="#none" class="inner">2</a></div>
<div class="slide" data-title='slide title 3'><a href="#none" class="inner">3</a></div>
</div>
<div class="guide-slide-list" data-slide='{"case":"case2","option":{"arrows":false, "pagecount":true}}'>
<div class="slide"><a href="#none" class="inner">1</a></div>
<div class="slide"><a href="#none" class="inner">2</a></div>
<div class="slide"><a href="#none" class="inner">3</a></div>
<div class="slide"><a href="#none" class="inner">4</a></div>
<div class="slide"><a href="#none" class="inner">5</a></div>
</div>
스크롤바
Swipe
일이삼사오육칠팔구십. 일이삼사오육칠팔구십. 일이삼사오육칠팔구십. 일이삼사오육칠팔구십. 일이삼사오육칠팔구십. 일이삼사오육칠팔구십 . 일이삼사오육칠팔구십.
<div class="guide-swipe-wrap" data-swipe='{"type":"case1","breakel":".guide-swipe-item"}'> <!-- js 실행 후 css 추가 : swipe-off swipe-guide swipe-initialized -->
<div class="guide-swipe-child"> <!-- js 실행 후 css 추가 : swipe-cont -->
<div class="guide-swipe-item">1</div>
<div class="guide-swipe-item">2</div>
<div class="guide-swipe-item">3</div>
</div>
</div>
- data-swipe='' 일 경우 공통 스크립트 실행
- .swipe-initialized 스크립트 실행 후 클래스 추가
- .swipe-off 스와이프 안될 경우 클래스 추가
- .swipe-guide 스와이프 될 경우 클래스 추가. 사용자 액션 후 클래스 삭제.
- .swipe-cont 스크립트 실행 후 [data-swipe] 첫번째 자식노드에 클래스 추가. 실제로 left가 이동되는 노드임.
- 기본속성 : {type:"case1", guide:true, arrow:false, start:null, breakel:null}
- guide : 터치 가능할때 안내 아이콘 노출여부
- arrow : 이전/다음 버튼 노출여부
- start : 초기 실행시, 특정 위치로 보낸다면 ".active"처럼 셀렉터 넣어줌
- breakel : 자식 노드별로 움직일 경우 ".guide-swipe-item"처럼 셀렉터 넣어줌