JavaScript/jQuery

【jQuery/Selector #2】:animated Selector

1Q74 2023. 2. 20. 11:29

1. Description

jQuery(":animated")
현재 움직이고 있는 요소를 선택한다.

2. Example

[Exchange Position]버튼을 클릭하면 두 개의 박스가 서로 자리를 교환하기 시작하고, 버튼은 disabled된다.

[Change Border]를 클릭하면 박스의 border가 변경된다.

[Initialize Border]를 클릭하면 박스의 border가 초기화된다.

※ 박스가 움직이지 않는 상태에서는 [Change Border], [Initialize Border]버튼을 클릭해도 박스가 선택되지 않는다.


[1q74.tistory.com] javascript/jquery/selector/animated

This is a box in yellow

box1













This is a box in green

box2












3. Code

더보기
<!-- ---------------------------------------------------------
  --
  -- Author: 1q74.tistory.com
  --
  --------------------------------------------------------- -->
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>[1q74.tistory.com] javascript/jquery/selector/animated</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
<style>
.box, .box1, .box2 {
	width: 200px;
	height: 200px;
	position: absolute;
	float: left;
}

.box1 {
	z-index: 2;
	background-color: yellow;
}

.box2 {
	background-color: green;
	text-align: right;
}
</style>
</head>
<body>
	<p>This is a box in yellow</p>
	<div class="box1">box1</div>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<p>This is a box in green</p>
	<div class="box2">box2</div>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<div name="_1q74-example-bottom">
		<button id="btn-exchange-position">Exchange Position</button>
		<button id="btn-change-border">Change Border</button>
		<button id="btn-init-border">Initialize Border</button>
	</div>
<script>
var box1 = $(".box1");
var box2 = $(".box2");

const btnExchange = $("#btn-exchange-position");
const btnChangeBorder = $("#btn-change-border");
const btnInitBorder = $("#btn-init-border");

btnExchange.click(function() {
	const pos = {
		box1: box1.position(),
		box2: box2.position()
	};

	const repeat = function() {
		box1.animate({
			opacity: 0.25,
			top: pos.box2.top
		},
		{
			duration: 8000,
			complete: function() {
				box1.css("opacity", 1);

				// 움직임을 동기화시키기 위해서 box2의 이동이
				// 종료되는 것을 opacity의 설정값으로 확인한 다음,
				// box2의 이동이 완료되었다면 다시 서로의 위치를 맞바꾼다.
				const timer = setInterval(function() {
					if(box2.css("opacity") == 1) {
						clearInterval(timer);

						var tmpBox = box1;
						box1 = box2;
						box2 = tmpBox;

						repeat();
					}
				}, 100);
			}
		});

		box2.animate({
			opacity: 0.25,
			top: pos.box1.top
		},
		{
			duration: 8000,
			complete: function() {
				box2.css("opacity", 1);
			}
		});
	}

	$(this).prop("disabled", true);
	repeat();
});

// jQuery(":animated") Selector 예제
btnChangeBorder.click(function() {
	$("div:animated").css("border-style", "dotted");
});

btnInitBorder.click(function() {
	box1.css("border-style", "");	
	box2.css("border-style", "");	
});
</script>

<style>
[name|="_1q74-example"] button
,[name="_1q74-source"] button {
	background: lightgray;
	border: 5px outset;
	min-width: 160px;
	min-height: 40px;
}

[name|="_1q74-example"] button:active
,[name="_1q74-source"] button:active {
	border: 2px inset;
	min-width: 160px;
	min-height: 40px;
}
</style>

</body>
</html>

4. File

animated.html
0.00MB


5. See also

pseudo-class, useversal-selector, jquery-extensions


6. Reference

https://api.jquery.com/animated-selector/