Photo by Mike Dierken on Unsplash
<!-- ==============날씨위젯================== -->
<script>
(function(d, s, id) {
if (d.getElementById(id)) {
if (window.__TOMORROW__) {
window.__TOMORROW__.renderWidget();
}
return;
}
const fjs = d.getElementsByTagName(s)[0];
const js = d.createElement(s);
js.id = id;
js.src = "https://www.tomorrow.io/v1/widget/sdk/sdk.bundle.min.js";
fjs.parentNode.insertBefore(js, fjs);
})(document, 'script', 'tomorrow-sdk');
</script>
<div class="tomorrow" data-location-id="065554" data-language="KO" data-unit-system="METRIC" data-skin="light" data-widget-type="aqiMini" style="padding-bottom:22px;position:relative;width: 300px;">
<a href="https://www.tomorrow.io/weather/" rel="nofollow noopener noreferrer" target="_blank" style="position: absolute; bottom: 0; transform: translateX(-50%); left: 50%;">
<img alt="Powered by Tomorrow.io" src="https://weather-website-client.tomorrow.io/img/powered-by-tomorrow.svg" width="140" height="0" />
</a>
</div>
<!-- ==============날씨위젯================== -->
prepend()
, append()
요소의 순서에 관한 문법 리마인드/** 해결전/
function back(){ /* !!! stop()이 적용되지 않는다. */
$(".main_slide li:last-child").stop().prependTo($(".main_slide ul")).css({"opacity":0}).animate({"opacity":1},300,function(){
ms_no--;
if(ms_no <= 0){ ms_no = 6}
$(".main_slide .list_no").text(ms_no + "/" + (ms_last + 1));
});
}
function go(){
/* !!! 연속 클릭시 순서 번호가 안맞는다. 콜백함수에 있는데 왜 안맞지?*/
/* finish() 를 사용하면 뒤에 있는 animate가 진행되지 않는다.*/
$(".main_slide li:first-child")/*.finish()*/.animate({"opacity":0},300,function(){
$(this).appendTo($(".main_slide ul")).css({"opacity":1});
ms_no++;
if(ms_no >=7){ ms_no = 1}
$(".main_slide .list_no").text(ms_no + "/" + (ms_last + 1));
})
}
stop()과 finish() 기존의 동작을 제어하는데 back() 에서 애니메이션을 제외한 정적 매소드가 먼저 재생되어 stop이 적용되지 않았습니다
?
go() 에서 animatiom의 콜백으로 연산자가 있는데 연속클릭시 숫자만 적용될까? → stop()과 finish는 남아있는 큐에 대한 매소드이기 때문에 콜백함수는 동일하게 적용된다.
finish() 의 콜백함수로 적용하면 뒤에 중복 적용했을 때 opacity가 바로 복귀된 상태에서 동적이 반복되니깐 해결되지 않을까? → 안된다..
stop 대신 off(”click”) off 이벤트를 제거하는 메소드 사용해보기 → off도 결국 stop과 같은 방식으로 적용된다
/* 해결 */
function back(){
$(".main_slide li:last-child").prependTo($(".main_slide ul")).css({"opacity":0});
$(".main_slide li:first-child").finish().animate({"opacity":1},300);
ms_no--;
if(ms_no <= 0){ ms_no = 6}
$(".main_slide .list_no").text(ms_no + "/" + (ms_last));
}
function go(){
$(".main_slide li:first-child").finish()
ms_no++;
if(ms_no >=7){ ms_no = 1}
$(".main_slide .list_no").text(ms_no + "/" + (ms_last));
$(".main_slide li:first-child").animate({"opacity":0},300,function(){
$(this).appendTo($(".main_slide ul")).css({"opacity":1});
})
}
finish()
의 위치를 조절하여 문제를 해결하였습니다.background-position
값으로 조절되고 있었다.