찾다
웹 프론트엔드JS 튜토리얼Jquery1.9.1 애니메이션 처리 이후의 소스코드 분석 시리즈(15)_jquery

a. Tween.propHooks와 호환되는 애니메이션

Tween.propHooks는 특수한 상황에서 CSS 기능 값을 설정하고 가져오는 방법을 제공합니다.

Tween.propHooks = {
  _default: {
    get: function(){...},
    set: function(){...}
  },
  scrollTop: {
    set: function(){...}
  }
  scrollLeft: {
    set: function(){...}
  }
} 

Tween.propHooks.scrollTop 및 Tween.propHooks.scrollLeft는 주로 IE8이 오프라인이고 CSS 기능 값이 노드에 저장될 때 혼동으로 인해 발생합니다

set: function( tween ) {
  if ( tween.elem.nodeType && tween.elem.parentNode ) {
    tween.elem[ tween.prop ] = tween.now;
  }
} 

Tween.propHooks._default의 get 메서드는 CSS의 tween.prop 기능 값을 노드에서 직접 가져오려고 시도합니다. 가져올 수 없는 경우 jQuery.css() 메서드를 사용하여 가져옵니다. 이 메서드 처리 중에 "10px"와 같은 간단한 값은 부동 소수점 숫자로 구문 분석되고 "회전(1rad)"과 같은 복잡한 값은 그대로 반환됩니다. 그런 다음 반환된 결과를 처리합니다. 빈 문자열, null, 정의되지 않음 및 "auto"는 0으로 변환되며 다른 조건은 변경되지 않습니다.

get: function( tween ) {
  var result;
  if ( tween.elem[ tween.prop ] != null &&
    (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
    return tween.elem[ tween.prop ];
  }
  //传递一个空字符串作为第三个参数的.css会自动尝试parseFloat,
  //并返回到一个字符串,如果解析失败的话。
  //所以,简单的值,如“10px”会被被解析为浮点数。复杂的值,如“旋转(1rad)”返回原样。
  result = jQuery.css( tween.elem, tween.prop, "" );
  // 空字符串, null, undefined 和 "auto"都转化为0
  return !result || result === "auto" ? 0 : result;
} 

Tween.propHooks._default의 set 메서드는 먼저 jQuery.fx.step[ tween.prop ]을 시도하여 이전 버전과의 호환성을 설정합니다. 그렇지 않으면 jQuery.style을 사용하여 가장 극단적인 CSS 기능 값을 설정합니다. 경우에는 특성값이 설정됩니다. 노드에 직접 저장하세요

set: function( tween ) {
  //使用step hook向下兼容 - 使用cssHook如果他存在 - 使用.style如果可用的话
  //使用直接的特征值如果可用可用的话
  if ( jQuery.fx.step[ tween.prop ] ) {
    jQuery.fx.step[ tween.prop ]( tween );
  } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
    jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
  } else {
    tween.elem[ tween.prop ] = tween.now;
  }
} 

b. 애니메이션 전용 객체 jQuery.fx

jQuery.fx는 애니메이션 작업을 수행하는 데 사용되는 일부 기능을 캡슐화합니다.

jQuery.fx = {
  tick = function () {...},//每个时间点都会执行的函数外壳,会取出jQuery.timers中的函数执行
  timer = function ( timer ) {...},//执行参数中的函数并启动计时
  interval = 13, //计时步长
  start = function () {...},//启动计时
  stop = function () {...},//停止计时
  speeds = {slow: 600,fast: 200,_default: 400},//动画速度(完整动画执行时间)
  step = {}//向下兼容<1.8扩展点
} 

자세한 소스코드 분석은 다음과 같습니다

jQuery.fx = Tween.prototype.init;
//每个时间点都会执行的函数外壳,会取出jQuery.timers中的函数执行
jQuery.fx.tick = function() {
  var timer,
  timers = jQuery.timers,
  i = 0;
  fxNow = jQuery.now();
  for ( ; i < timers.length; i++ ) {
    timer = timers[ i ];
    // Checks the timer has not already been removed
    if ( !timer() && timers[ i ] === timer ) {
      timers.splice( i--, 1 );
    }
  }
  if ( !timers.length ) {
    jQuery.fx.stop();
  }
  fxNow = undefined;
};
//执行参数中的函数并启动计时
jQuery.fx.timer = function( timer ) {
  if ( timer() && jQuery.timers.push( timer ) ) {
    jQuery.fx.start();
  }
};
//计时步长
jQuery.fx.interval = 13;
//启动计时
jQuery.fx.start = function() {
  if ( !timerId ) {
    timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
  }
};
//停止计时
jQuery.fx.stop = function() {
  clearInterval( timerId );
  timerId = null;
};
//动画速度(完整动画执行时间)
jQuery.fx.speeds = {
  slow: 600,
  fast: 200,
  // Default speed
  _default: 400
};
//向下兼容<1.8扩展点
jQuery.fx.step = {}; 
  这里其中执行动画的关键源码是
//动画入口函数function Animation( elem, properties, options ){
  ...
  jQuery.fx.timer(
    jQuery.extend( tick, {
      elem: elem,
      anim: animation,
      queue: animation.opts.queue
    })
  );
  ...
}
//执行参数中的函数并启动计时
jQuery.fx.timer = function( timer ) {
  if ( timer() && jQuery.timers.push( timer ) ) {
    jQuery.fx.start();
  }
};
//计时步长
jQuery.fx.interval = 13;
//启动计时
jQuery.fx.start = function() {
  if ( !timerId ) {
    timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
  }
}; 

변수 jQuery.timers = [];는 각 틱마다 실행해야 하는 함수 목록을 저장하는 데 사용됩니다. 일반적으로 말하면 Animation 함수에 정의된 Tick 함수라는 함수 하나만 있습니다. jQuery.fx.interval을 사용하여 애니메이션의 두 프레임마다 시간 간격을 설정할 수 있습니다. 기본값은 13밀리초입니다.

애니메이션 분석은 여기까지입니다. 아래는 애니메이션 관련 API 목록입니다

jQuery.fn.show([ 기간 ] [, 완화 ] [, 완료 ] | 옵션 ) (일치하는 모든 요소를 ​​표시합니다. 또한 요소 표시의 전환 애니메이션 효과를 지정할 수도 있습니다. 요소 자체가 visible, 요소가 숨겨져 있으면 표시되도록 합니다. 이 함수의 반대는 일치하는 모든 요소를 ​​숨기는 데 사용되는 hide() 함수입니다.

jQuery.fn.hide([ 기간 ] [, 완화 ] [, 완료 ] | 옵션) (일치하는 모든 요소를 ​​숨깁니다. 또한 요소 숨기기에 대한 전환 애니메이션 효과를 지정할 수도 있습니다. 요소 자체가 보이지 않는 경우 , 요소가 표시되는 경우 요소가 변경되지 않습니다. )
.

jQuery.fn.toggle([ 기간 ] [, 완화 ] [, 완료 ] | 옵션) (일치하는 모든 요소를 ​​토글합니다. 또한 요소 전환의 전환 애니메이션 효과를 지정할 수도 있습니다. 소위 "토글" " 즉, 요소가 현재 표시되어 있으면 숨기고, 요소가 현재 숨겨져 있으면 표시(visible) )
.

여기서 소개하는 토글() 함수는 요소의 표시/숨기기를 전환하는 데 사용됩니다. jQuery에는 또한 클릭 이벤트를 바인딩하고 트리거될 때 다른 이벤트 처리 기능을 차례로 실행하도록 전환하는 데 사용되는 동일한 이름의 이벤트 함수인 전환()이 있습니다.

jQuery.fn.slideDown([ 기간 ] [, 완화 ] [, 완료 ] | 옵션) (아래로 슬라이딩 전환 애니메이션 효과로 일치하는 모든 요소를 ​​표시합니다. 아래로 슬라이딩 애니메이션 효과, 즉 요소의 높이 표시 영역은 0에서 원래 높이까지 점진적으로 증가합니다(점차적으로 아래쪽으로 확장). 요소 자체가 표시되면 변경 사항이 적용되지 않습니다. 요소가 숨겨져 있으면 표시됩니다.

이 함수의 반대는 위쪽 슬라이딩 전환 애니메이션 효과로 일치하는 모든 요소를 ​​숨기는 데 사용되는 SlideUp() 함수입니다.


jQuery.fn.slideUp([ 기간 ] [, 완화 ] [, 완료 ] | 옵션) (상향 슬라이딩 전환 애니메이션 효과로 일치하는 모든 요소를 ​​숨깁니다. 상향 슬라이딩 애니메이션 효과는 요소의 가시 영역입니다. 높이는 원래 높이에서 0으로 점차 감소합니다(점진적으로 위쪽으로 축소). 요소 자체가 숨겨져 있으면 변경 사항이 적용되지 않습니다. 요소가 표시되면 숨겨집니다.


jQuery.fn.slideToggle([ 기간 ] [, 완화 ] [, 완료 ] | 옵션) (슬라이딩 전환 애니메이션 효과로 일치하는 모든 요소를 ​​전환합니다. 소위 "스위치"는 요소가 현재 If 요소가 표시되면 숨기세요(위로 슬라이드). 요소가 현재 숨겨져 있으면 표시되도록 설정하세요(아래로 슬라이드)


jQuery.fn.fadeIn([ 기간 ] [, 완화 ] [, 완료 ] | 옵션) (페이드 인 전환 애니메이션 효과로 일치하는 모든 요소를 ​​표시합니다. 페이드 인 애니메이션 효과는 요소의 불투명도입니다. 배율은 0%에서 100%까지 점차 증가합니다. 요소 자체가 표시되면 변경 사항이 적용되지 않습니다. 요소가 숨겨지면 표시됩니다. 이 함수의 반대는 fadeOut() 함수입니다. 페이드 아웃 전환 애니메이션 효과로 모든 요소를 ​​숨깁니다.


jQuery.fn.fadeOut([ 기간 ] [, 완화 ] [, 완료 ] | 옵션) (페이드 아웃 전환 애니메이션 효과를 사용하여 일치하는 모든 요소를 ​​숨깁니다. 소위 "페이드 아웃" 애니메이션 효과는 요소의 불투명도 비율은 100%에서 0%로 점차 감소합니다. 요소 자체가 숨겨져 있으면 변경 사항이 적용되지 않습니다. 요소가 표시되면 숨겨집니다.


jQuery.fn.fadeToggle([ 기간 ] [, 완화 ] [, 완료 ] | 옵션) (페이드 인/페이드 아웃 전환 애니메이션 효과를 사용하여 일치하는 모든 요소를 ​​토글합니다. 소위 "스위치"는 다음을 의미합니다. 요소가 현재 표시되어 있으면 숨깁니다(페이드 아웃). 요소가 현재 숨겨져 있으면 표시되도록 합니다(페이드 인).

jQuery.fn.delay(duration [, queueName]) (큐의 다음 항목 실행을 지연합니다. Delay()는 큐에서 실행을 기다리는 다음 애니메이션을 실행하기 전에 지정된 시간 동안 지연시킬 수 있습니다. 두 개의 jQuery 효과 함수 사이의 대기열에서 흔히 사용되므로 이전 애니메이션 효과가 실행된 후 다음 애니메이션 효과의 실행 시간이 지연됩니다. 다음 항목이 효과 애니메이션이 아닌 경우 효과 대기열에 추가되지 않습니다. 따라서 이 기능은 지연 호출을 하지 않습니다.)

jQuery.fn.stop([ queueName ] [, clearQueue [, JumpToEnd ] ]) (一致する要素で現在実行中のアニメーションを停止します。デフォルトでは、stop() 関数は現在実行中のアニメーションのみを停止します。 animate() 関数を使用して、現在の要素に 3 つのアニメーション A、B、C を設定します。現在実行中のアニメーションが A の場合、アニメーション A の実行のみが停止され、アニメーション B と C の実行は妨げられません。もちろん、オプションのオプション パラメータを指定してすべてのアニメーションを停止することもできます。アニメーションを停止すると、アニメーションが実行される前の状態は復元されません。たとえば、現在のアニメーションの実行状態がそのまま残ります。要素の高さの 100 ピクセルから 200 ピクセルへの遷移アニメーション。高さが 150 ピクセルのときにアニメーションが停止した場合、アニメーションの実行後にコールバック関数が設定されている場合、そのコールバック関数は実行されません。 )

jQuery.fn.finish([ queueName ]) (キュー内のすべてのアニメーションを即座に完了します。finish() は現在実行中のアニメーションを停止し、キュー内のすべてのアニメーションを削除し、一致する要素のすべてのアニメーションを完了します)

jQuery.fn.fadeTo([speed,]opacity[,callback]) (選択した要素の不透明度を指定された値に徐々に変更します)

jQuery.fx.off (このプロパティは、すべてのアニメーションがグローバルに無効になっているかどうかを設定または返すために使用されます。このプロパティが設定されていない場合は、アニメーション効果がグローバルに無効になっているかどうかを示すブール値が返されます。このプロパティが次のように設定されている場合true を指定すると、すべてのアニメーションがグローバルに無効になります。まだ実行されていないアニメーション キューは、アニメーション効果なしですぐに完了します。 false を指定すると、アニメーション効果がグローバルに有効になります

次の状況が発生した場合は、アニメーション効果を無効にすることができます。低構成のコンピューターで jQuery を使用している場合、一部のユーザーはアニメーション効果が原因でアクセシビリティの問題が発生する可能性があります。 )

jQuery.fx.interval (このプロパティは、アニメーションのフレーム レート (ミリ秒値) を設定または返すために使用されます。jQuery.fx.interval プロパティは、jQuery アニメーションが画像のフレームを描画するミリ秒数を設定するために使用されます(スタイルの変更をトリガーし、ブラウザーは現在のページを再描画する可能性があります)。値が小さいほど、アニメーションがトリガーされる回数が多くなり、値を変更するときに実行されるアニメーション キューがより明白になり、よりスムーズになります。このプロパティはより多くのパフォーマンスを消費しますが、まだ実行されていないアニメーション キューは変更されたフレーム レートで描画されます)

上記の内容は、スクリプトハウス編集者が紹介するJQuery 1.9.1のソースコード解析シリーズ(第15回)のアニメーション処理を除いたものですjQuery 1.9.1のソースコード解析シリーズ(第15回) 、クリックして詳細をご覧ください。

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
JavaScript의 역할 : 웹 대화식 및 역동적 인 웹JavaScript의 역할 : 웹 대화식 및 역동적 인 웹Apr 24, 2025 am 12:12 AM

JavaScript는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.

C 및 JavaScript : 연결이 설명되었습니다C 및 JavaScript : 연결이 설명되었습니다Apr 23, 2025 am 12:07 AM

C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.

웹 사이트에서 앱으로 : 다양한 JavaScript 애플리케이션웹 사이트에서 앱으로 : 다양한 JavaScript 애플리케이션Apr 22, 2025 am 12:02 AM

JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.

Python vs. JavaScript : 사용 사례 및 응용 프로그램 비교Python vs. JavaScript : 사용 사례 및 응용 프로그램 비교Apr 21, 2025 am 12:01 AM

Python은 데이터 과학 및 자동화에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 데이터 처리 및 모델링을 위해 Numpy 및 Pandas와 같은 라이브러리를 사용하여 데이터 과학 및 기계 학습에서 잘 수행됩니다. 2. 파이썬은 간결하고 자동화 및 스크립팅이 효율적입니다. 3. JavaScript는 프론트 엔드 개발에 없어서는 안될 것이며 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축하는 데 사용됩니다. 4. JavaScript는 Node.js를 통해 백엔드 개발에 역할을하며 전체 스택 개발을 지원합니다.

JavaScript 통역사 및 컴파일러에서 C/C의 역할JavaScript 통역사 및 컴파일러에서 C/C의 역할Apr 20, 2025 am 12:01 AM

C와 C는 주로 통역사와 JIT 컴파일러를 구현하는 데 사용되는 JavaScript 엔진에서 중요한 역할을합니다. 1) C는 JavaScript 소스 코드를 구문 분석하고 추상 구문 트리를 생성하는 데 사용됩니다. 2) C는 바이트 코드 생성 및 실행을 담당합니다. 3) C는 JIT 컴파일러를 구현하고 런타임에 핫스팟 코드를 최적화하고 컴파일하며 JavaScript의 실행 효율을 크게 향상시킵니다.

자바 스크립트 행동 : 실제 예제 및 프로젝트자바 스크립트 행동 : 실제 예제 및 프로젝트Apr 19, 2025 am 12:13 AM

실제 세계에서 JavaScript의 응용 프로그램에는 프론트 엔드 및 백엔드 개발이 포함됩니다. 1) DOM 운영 및 이벤트 처리와 관련된 TODO 목록 응용 프로그램을 구축하여 프론트 엔드 애플리케이션을 표시합니다. 2) Node.js를 통해 RESTFULAPI를 구축하고 Express를 통해 백엔드 응용 프로그램을 시연하십시오.

JavaScript 및 웹 : 핵심 기능 및 사용 사례JavaScript 및 웹 : 핵심 기능 및 사용 사례Apr 18, 2025 am 12:19 AM

웹 개발에서 JavaScript의 주요 용도에는 클라이언트 상호 작용, 양식 검증 및 비동기 통신이 포함됩니다. 1) DOM 운영을 통한 동적 컨텐츠 업데이트 및 사용자 상호 작용; 2) 사용자가 사용자 경험을 향상시키기 위해 데이터를 제출하기 전에 클라이언트 확인이 수행됩니다. 3) 서버와의 진실한 통신은 Ajax 기술을 통해 달성됩니다.

JavaScript 엔진 이해 : 구현 세부 사항JavaScript 엔진 이해 : 구현 세부 사항Apr 17, 2025 am 12:05 AM

보다 효율적인 코드를 작성하고 성능 병목 현상 및 최적화 전략을 이해하는 데 도움이되기 때문에 JavaScript 엔진이 내부적으로 작동하는 방식을 이해하는 것은 개발자에게 중요합니다. 1) 엔진의 워크 플로에는 구문 분석, 컴파일 및 실행; 2) 실행 프로세스 중에 엔진은 인라인 캐시 및 숨겨진 클래스와 같은 동적 최적화를 수행합니다. 3) 모범 사례에는 글로벌 변수를 피하고 루프 최적화, Const 및 Lets 사용 및 과도한 폐쇄 사용을 피하는 것이 포함됩니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음