등 속 운동 의 인 스 턴 스 설명(사 이 드 바,페이드아웃)
기본 적 인 스타일 을 설정 하려 면 div 에 포 지 셔 닝 을 해 야 합 니 다(물론 margin 의 변화 로 도 요소 가 운동 효 과 를 낼 수 있 습 니 다).
<style>
div {
width: 100px;
height: 100px;
background: red;
position: absolute;
left: 0px;
}
</style>
기본 적 인 구조:
<input type="button" value=" "/>
<div id="box"></div>
우리 가 이 버튼 을 눌 렀 을 때 div 를 운동 시 켜 야 한다.사실은 div 의 left 값 을 지속 적 으로 변화 시 키 는 것 이다.그러면 div 는 운동 효 과 를 낼 것 이다.우 리 는 먼저 left 를 변화 시 킨 다음 에 그 를 지속 적 으로 변화 시 킬 것 이다.
window.onload = function(){
var oBtn = document.querySelector( "input" ),
oBox = document.querySelector( '#box' );
oBtn.onclick = function(){
oBox.style.left = oBox.offsetLeft + 10 + 'px';
}
}
그러면 내 가 버튼 을 누 를 때마다 div 의 left 값 은 원래 의 기초 위 에 10px 를 추가 합 니 다.여기 서도 비 행 간 스타일 을 얻 는 방법 으로 left 의 값 을 얻 을 수 있 고 10px 를 더 하면 효 과 를 얻 을 수 있 습 니 다.
function css(obj, attr) {
if (obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj, false)[attr];
}
}
window.onload = function () {
var oBtn = document.querySelector("input"),
oBox = document.querySelector('#box');
oBtn.onclick = function () {
oBox.style.left = parseInt( css( oBox, 'left' ) ) + 10 + 'px';
}
}
offsetLeft 와 비 줄 스타일 left 를 가 져 오 는 값 은 어떤 차이 가 있 습 니까?offsetLeft 는 px 단위 가 없고 left 는 px 단위 가 있 습 니 다.
oBtn.onclick = function () {
// alert( css( oBox, 'left' ) ); //0px
alert( oBox.offsetLeft ); //0
}
지금 div 는 클릭 해서 움 직 이 는 거 예요.계속 움 직 이게 할 게 요.어떻게 해요?타이머
oBtn.onclick = function () {
setInterval( function(){
oBox.style.left = oBox.offsetLeft + 10 + 'px';
}, 1000 / 16 );
}
우리 가 버튼 을 누 르 면 div 는 끊임없이 왼쪽으로 운동 하 는데 어떻게 그 를 멈 추 게 합 니까?멈 춰 라,틀림없이 조건 이 필요 할 것 이다.예 를 들 어,우리 가 그 를 500 px 까지 달 려 갈 때 멈 추 게 하 는 것 이다.
var timer = null;
oBtn.onclick = function () {
timer = setInterval( function(){
if ( oBox.offsetLeft == 500 ) {
clearInterval( timer );
}else {
oBox.style.left = oBox.offsetLeft + 10 + 'px';
}
}, 1000 / 16 );
}
이렇게 하면 우 리 는 div 를 500 px 의 위치 에 멈 추 게 할 수 있 습 니 다.여기 서 만약 에 우리 가 보폭 10 을 7 또는 8 로 바 꾸 면 멈 출 수 없다 는 것 을 알 게 될 것 입 니 다.왜 일 까요?500 px 라 는 판단 조건 을 뛰 어 넘 으 니까.0,7,14,21...280,287,294,301,...490,497,504.497 에서 504 로 500 px 를 뛰 어 넘 었 기 때문에 div 가 멈 추 지 않 습 니 다.어떻게 하 죠?판단 조건 을 수정 하면 됩 니 다.
oBtn.onclick = function () {
timer = setInterval( function(){
if ( oBox.offsetLeft >= 500 ) {
oBox.style.left = 500 + 'px';
clearInterval( timer );
}else {
oBox.style.left = oBox.offsetLeft + 7 + 'px';
}
}, 1000 / 16 );
}
조건 을>=500 타이머 제거 와 함께 이 코드 oBox.style.left=500+'px'로 바 꾸 어 500 px 에 강제로 멈 추 게 합 니 다.그렇지 않 으 면 div 는 500 px 에 멈 추 지 않 고 504 px 입 니 다.또 하나의 문제 가 있 습 니 다.div 운동 을 하 는 과정 에서 버튼 을 계속 누 르 면 div 가 10px 를 추가 하 는 것 이 아니 라 가속 운동 을 시작 합 니 다.이 건 또 왜 일 까?이것 은 버튼 을 누 를 때마다 타 이 머 를 켰 기 때 문 입 니 다.버튼 을 누 를 때마다 타 이 머 를 켰 습 니 다.그러면 여러 개의 타 이 머 가 중첩 되 고 속도 도 중첩 되 기 때문에 div 가 속 도 를 내기 시 작 했 습 니 다.그러면 우 리 는 그 에 게 10px 의 속 도 를 유지 하 게 해 야 합 니 다.타 이 머 를 중첩 하지 말 라 는 뜻 입 니 다.더 쉽게 말 하면 타이머 가 켜 져 있 는 지 확인 하 는 것 이다.어떻게 해 야 되 지?
oBtn.onclick = function () {
clearInterval( timer );
timer = setInterval( function(){
if ( oBox.offsetLeft >= 500 ) {
oBox.style.left = 500 + 'px';
clearInterval( timer );
}else {
oBox.style.left = oBox.offsetLeft + 7 + 'px';
}
}, 1000 / 16 );
}
버튼 을 누 를 때마다 이전의 타 이 머 를 제거 하면 됩 니 다.그러면 항상 타 이 머 를 켜 놓 을 수 있 습 니 다.이로써 가장 기본 적 인 등 속 운동 구조 가 완성 되 었 습 니 다.그러면 우 리 는 그 를 함수 로 포장 할 수 있 습 니 다.
function animate(obj, target, speed) {
clearInterval(timer);
timer = setInterval(function () {
if (obj.offsetLeft == target) {
clearInterval(timer);
} else {
obj.style.left = obj.offsetLeft + speed + 'px';
}
}, 30);
}
이 함수 가 생 긴 후에 우 리 는 작은 응용 을 해 보 자.http://www.jiathis.com/getcode
이 사 이 트 를 열 면 오른쪽 에 사 이 드 바 효과(공유)가 있 는 것 을 주의해 서 보 세 요.이런 효 과 는 사이트 에서 매우 보편적 입 니 다.
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title> - by ghostwu</title>
<style>
#box {
width: 150px;
height: 300px;
background: red;
position: absolute;
left: -150px;
top: 50px;
}
#box div {
width: 28px;
height: 100px;
position: absolute;
right: -28px;
top: 100px;
background: green;
}
</style>
<script>
window.onload = function () {
var timer = null;
var oBox = document.getElementById("box");
oBox.onmouseover = function () {
animate(this, 0, 10);
}
oBox.onmouseout = function () {
animate(this, -150, -10);
}
function animate(obj, target, speed) {
clearInterval(timer);
timer = setInterval(function () {
if (obj.offsetLeft == target) {
clearInterval(timer);
} else {
obj.style.left = obj.offsetLeft + speed + 'px';
}
}, 30);
}
}
</script>
</head>
<body>
<div id="box">
<div> </div>
</div>
</body>
</html>
페 이 드 아웃 효과 추가:마우스 가 올 라 가면 투명도 가 1 이 됩 니 다.
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> - by ghostwu</title>
<style>
img {
border: none;
opacity: 0.3;
filter: alpha(opacity:30);
}
</style>
<script>
window.onload = function () {
var timer = null;
var oImg = document.getElementById("img");
oImg.onmouseover = function(){
animate( this, 100, 10 );
}
oImg.onmouseout = function(){
animate( this, 30, -10 );
}
//alpha=30 --> 100
function animate(obj, target, speed) {
clearInterval(timer);
var cur = 0;
timer = setInterval(function () {
cur = css( obj, 'opacity') * 100;
if( cur == target ){
clearInterval( timer );
}else {
cur += speed;
obj.style.opacity = cur / 100;
obj.style.filter = "alpha(opacity:" + cur + ")";
}
}, 30);
}
function css(obj, attr) {
if (obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj, false)[attr];
}
}
}
</script>
</head>
<body>
<img src="./img/h4.jpg" alt="" id="img"/>
</body>
</html>
이상 의 이 등 속 운동 을 바탕 으로 하 는 실례 설명(사 이 드 바,페 이 드 아웃)은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 할 수 있 고 여러분 들 이 저 희 를 많이 응원 해 주시 기 바 랍 니 다.