1/** I. 기본 ì ë³´ 2 * ========================================== 3 * <Skeleton Shimmer - Main Entry Point> 4 * 5 * Author: Innobaebae Co. 6 * Created: 2025-01-27 7 * Version: 1.0.0 8 * Dependency: skeleton-shimmer.css.js, skeleton-shimmer.config.js 9 * Cross browser: Chrome 55+, Firefox 52+, Safari 13+, Edge 79+ 10 * 11 * ========================================== 12 * 13 * 1. 목ì : 14 * ì´ë¯¸ì§/ì»´í¬ëí¸ ë¡ë© ì¤ Shimmer í¨ê³¼ë¥¼ ì ê³µíë ë²ì© Atom ì»´í¬ëí¸ 15 * 16 * 2. í¹ì§: 17 * - ìì í¨ì ê¸°ë° (React ì í ì©ì´) 18 * - ë°ì´í° ìì± ê¸°ë° ìë ì´ê¸°í 19 * - ìë ìì±/ì ê±° API ì ê³µ 20 * - 커ì¤í°ë§ì´ì§ ê°ë¥ 21 * 22 * 3. ì¬ì©ë²: 23 * // HTMLì ë°ì´í° ìì± ì¶ê° 24 * <div style="position: relative;"> 25 * <img src="image.jpg"> 26 * <div data-skeleton-shimmer></div> 27 * </div> 28 * 29 * // JavaScript ìë ì´ê¸°í 30 * import { SkeletonShimmer } from './index.js'; 31 * SkeletonShimmer.init(); 32 * 33 * // ëë ìë ìì± 34 * const shimmer = SkeletonShimmer.create(parentElement); 35 * SkeletonShimmer.remove(shimmer); 36 */ 37 38// @ts-check 39 40import { SKELETON_SHIMMER_CONFIG } from './constants/skeleton-shimmer.config.js'; 41import { injectShimmerStyles, applyShimmerStyles, hideShimmer, showShimmer } from './skeleton-shimmer.css.js'; 42 43/** 44 * Skeleton Shimmer ì»´í¬ëí¸ 45 */ 46export const SkeletonShimmer = { 47 /** 48 * ì ì ì´ê¸°í - 모ë [data-skeleton-shimmer] ììì ìë ì ì© 49 * @param {Object} options - ì ì ìµì 50 */ 51 init(options = {}) { 52 injectShimmerStyles(); 53 54 const shimmerElements = document.querySelectorAll(`[${SKELETON_SHIMMER_CONFIG.ATTRIBUTES.SHIMMER}]`); 55 shimmerElements.forEach(element => { 56 this.apply(element, options); 57 }); 58 }, 59 60 /** 61 * í¹ì ììì shimmer ì¤íì¼ ì ì© 62 * @param {HTMLElement} element - ëì ìì 63 * @param {Object} options - 커ì¤í°ë§ì´ì§ ìµì 64 */ 65 apply(element, options = {}) {
66 element.classList.add(SKELETON_SHIMMER_CONFIG.CLASSES.SHIMMER); 67 68 // ë°ì´í° ìì±ìì ìµì ì½ê¸° 69 const dataBaseColor = element.getAttribute(SKELETON_SHIMMER_CONFIG.ATTRIBUTES.BASE_COLOR); 70 const dataHighlightColor = element.getAttribute(SKELETON_SHIMMER_CONFIG.ATTRIBUTES.HIGHLIGHT_COLOR); 71 const dataSpeed = element.getAttribute(SKELETON_SHIMMER_CONFIG.ATTRIBUTES.SPEED); 72 const dataDirection = element.getAttribute(SKELETON_SHIMMER_CONFIG.ATTRIBUTES.DIRECTION); 73 74 const finalOptions = { 75 baseColor: dataBaseColor || options.baseColor, 76 highlightColor: dataHighlightColor || options.highlightColor, 77 duration: dataSpeed ? parseFloat(dataSpeed) : options.duration, 78 direction: dataDirection || options.direction, 79 }; 80 81 if (finalOptions.baseColor || finalOptions.highlightColor || finalOptions.duration) { 82 applyShimmerStyles(element, finalOptions); 83 } 84 }, 85 86 /** 87 * ìë¡ì´ shimmer ìì ìì± 88 * @param {HTMLElement} parentElement - ë¶ëª¨ ìì (position: relative íì) 89 * @param {Object} options - 커ì¤í°ë§ì´ì§ ìµì 90 * @returns {HTMLElement} ìì±ë shimmer ìì 91 */ 92 create(parentElement, options = {}) { 93 injectShimmerStyles(); 94 95 const shimmer = document.createElement('div'); 96 shimmer.setAttribute(SKELETON_SHIMMER_CONFIG.ATTRIBUTES.SHIMMER, '');
97 shimmer.classList.add(SKELETON_SHIMMER_CONFIG.CLASSES.SHIMMER); 98 99 this.apply(shimmer, options); 100 101 parentElement.appendChild(shimmer); 102 return shimmer; 103 }, 104 105 /** 106 * Shimmer ìì ì ê±° 107 * @param {HTMLElement} shimmerElement - shimmer ìì 108 * @param {boolean} animate - íì´ëìì ì ëë©ì´ì ì¬ë¶ 109 */ 110 remove(shimmerElement, animate = true) { 111 if (!shimmerElement) return; 112 113 if (animate) { 114 hideShimmer(shimmerElement); 115 setTimeout(() => { 116 shimmerElement.remove(); 117 }, 300); 118 } else { 119 shimmerElement.remove(); 120 } 121 }, 122 123 /** 124 * Shimmer ì¨ê¸°ê¸° (DOM ì ì§) 125 * @param {HTMLElement} shimmerElement - shimmer ìì 126 */ 127 hide(shimmerElement) { 128 hideShimmer(shimmerElement); 129 }, 130 131 /** 132 * Shimmer íì 133 * @param {HTMLElement} shimmerElement - shimmer ìì 134 */ 135 show(shimmerElement) { 136 showShimmer(shimmerElement); 137 }, 138 139 /** 140 * 모ë shimmer ì ê±° 141 */ 142 removeAll() { 143 const shimmerElements = document.querySelectorAll(`[${SKELETON_SHIMMER_CONFIG.ATTRIBUTES.SHIMMER}]`); 144 shimmerElements.forEach(element => { 145 this.remove(element, false); 146 }); 147 }, 148}; 149 150// Barrel export 151export { SKELETON_SHIMMER_CONFIG } from './constants/skeleton-shimmer.config.js'; 152export { injectShimmerStyles, applyShimmerStyles, hideShimmer, showShimmer } from './skeleton-shimmer.css.js';
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.