UNPKG

triplexlab

Version:

프론트엔드 개발자가 프로젝트할때 흔하고 많이 하는 작업들을 나만의 플러그인으로 만들었습니다.\ ES6의 class기반으로 만들었고, 공부하는 차원으로 만들었습니다.🧑🏻‍💻🧑🏻‍💻

86 lines (75 loc) 2.54 kB
import { _tr } from '../Helpers/DomApi.js'; import Moreview from './basic.js'; export default class Item extends Moreview { constructor(el) { super(el); this.store = { idIdx: 0, startIdx: 0, endIdx: 0, totalNum: 0 }; this.initHandler(); } /** * 첫 렌더링 시점에 기본적으로 각 아이템에 클래스를 추가하고, 넘어온 template를 뿌려주는 메소드. */ defaultload() { const { startEl, endEl, eventEl } = this.el.targets; const { additems, addClassName, template } = this.el; const eles = _tr(startEl).find(endEl); const eventEls = _tr(eventEl)[0]; eles.forEach((ele, idx) => { if (idx + 1 > additems) { ele.classList.add(addClassName); } }); this.store.totalNum = eles.length; eventEls.innerHTML = template(0, additems, this.store.totalNum); } /** * 아이템 활성화 관한 메소드. * @type {object} * @param {eventcurrent} */ activeItem(item) { super.active(item); const { startEl, endEl } = this.el.targets; let { additems, addClassName, template } = this.el; const eles = _tr(startEl).find(endEl); const totalIdx = parseInt(item.querySelector('.total').innerHTML); let currentIdx = parseInt(item.querySelector('.current').innerHTML); if (currentIdx >= totalIdx) return false; if (currentIdx > additems) { this.store.startIdx = this.store.endIdx; } else { this.store.startIdx = additems; } this.store.endIdx = this.store.startIdx + additems; eles.forEach((ele, idx) => { if (idx + 1 >= this.store.startIdx && idx < this.store.endIdx) { ele.classList.remove(addClassName); } }); currentIdx += additems; this.store.idIdx += 1; if (currentIdx >= eles.length) { // currentIdx의 개수보다 아이템의 개수가 작을 경우 (연속 더보기 클릭후 맨 마지막인 경우) item.innerHTML = template(this.store.idIdx, totalIdx, totalIdx, addClassName); return false; } item.innerHTML = template(this.store.idIdx, currentIdx, totalIdx); } /** * 특정 조건에만 실행만하는 메소드. */ initHandler() { this.defaultload(); const { eventEl } = this.el.targets; const eventE = document.querySelector(eventEl); const handler = self => { this.activeItem(self); }; (() => { eventE.addEventListener('click', e => { e.preventDefault(); e.stopPropagation(); handler(e.currentTarget); }); })(); } }