미디어위키:Gadget-Vector.js: 두 판 사이의 차이
둘러보기로 이동
검색으로 이동
문서를 비움 태그: 비우기 |
편집 요약 없음 |
||
| 1번째 줄: | 1번째 줄: | ||
(function () { | |||
'use strict'; | |||
var animationDuration = 360; | |||
var animationEndTime = 0; | |||
var observer = null; | |||
function getWatchButton() { | |||
return document.querySelector('#ca-watch, #ca-unwatch'); | |||
} | |||
function startWatchAnimation() { | |||
var button = getWatchButton(); | |||
animationEndTime = Date.now() + animationDuration; | |||
if (button) { | |||
button.classList.remove('pvz-watch-spinning'); | |||
/* 같은 클래스를 연속으로 적용해도 애니메이션이 다시 시작되게 한다. */ | |||
void button.offsetWidth; | |||
button.classList.add('pvz-watch-spinning'); | |||
} | |||
} | |||
function continueAnimationAfterStateChange() { | |||
var button; | |||
var remaining; | |||
if (Date.now() >= animationEndTime) { | |||
return; | |||
} | |||
button = getWatchButton(); | |||
remaining = animationEndTime - Date.now(); | |||
if (!button || button.classList.contains('pvz-watch-spinning')) { | |||
return; | |||
} | |||
button.classList.add('pvz-watch-spinning'); | |||
window.setTimeout(function () { | |||
button.classList.remove('pvz-watch-spinning'); | |||
}, remaining); | |||
} | |||
function handleClick(event) { | |||
var link = event.target.closest('#ca-watch > a, #ca-unwatch > a'); | |||
if (!link) { | |||
return; | |||
} | |||
startWatchAnimation(); | |||
} | |||
function init() { | |||
document.addEventListener('click', handleClick, true); | |||
observer = new MutationObserver(function () { | |||
continueAnimationAfterStateChange(); | |||
}); | |||
observer.observe(document.body, { | |||
childList: true, | |||
subtree: true, | |||
attributes: true, | |||
attributeFilter: ['id'] | |||
}); | |||
} | |||
if (document.readyState === 'loading') { | |||
document.addEventListener('DOMContentLoaded', init, { once: true }); | |||
} else { | |||
init(); | |||
} | |||
}()); | |||
2026년 7월 27일 (월) 21:40 판
(function () {
'use strict';
var animationDuration = 360;
var animationEndTime = 0;
var observer = null;
function getWatchButton() {
return document.querySelector('#ca-watch, #ca-unwatch');
}
function startWatchAnimation() {
var button = getWatchButton();
animationEndTime = Date.now() + animationDuration;
if (button) {
button.classList.remove('pvz-watch-spinning');
/* 같은 클래스를 연속으로 적용해도 애니메이션이 다시 시작되게 한다. */
void button.offsetWidth;
button.classList.add('pvz-watch-spinning');
}
}
function continueAnimationAfterStateChange() {
var button;
var remaining;
if (Date.now() >= animationEndTime) {
return;
}
button = getWatchButton();
remaining = animationEndTime - Date.now();
if (!button || button.classList.contains('pvz-watch-spinning')) {
return;
}
button.classList.add('pvz-watch-spinning');
window.setTimeout(function () {
button.classList.remove('pvz-watch-spinning');
}, remaining);
}
function handleClick(event) {
var link = event.target.closest('#ca-watch > a, #ca-unwatch > a');
if (!link) {
return;
}
startWatchAnimation();
}
function init() {
document.addEventListener('click', handleClick, true);
observer = new MutationObserver(function () {
continueAnimationAfterStateChange();
});
observer.observe(document.body, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ['id']
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init, { once: true });
} else {
init();
}
}());