jQuery에서 Ready 메소드를 시뮬레이션하고 CSS 및 JS 예제 code_jquery의 주문형 로딩을 구현합니다.
저는 jQuery 클래스 라이브러리나 다른 클래스 라이브러리에서 Ready 메소드를 자주 사용하는데, 어떻게 구현하는지 생각해 볼 때가 있습니다. 살펴보기 jQuery의 소스 코드에는 많은 모듈이 포함되어 있으며 코드(제한된 수준)는 이해하기 어렵습니다. 요약하기 위해 일부 책 내용을 결합했습니다.
먼저 Ready 함수의 구현 아이디어에 대해 이야기해 보겠습니다.
변수 Ready는 표현식에 의해 할당됩니다. 오른쪽은 자체 실행되는 익명 함수입니다. 이 익명 함수에서는 먼저 처리 함수를 바인딩합니다. 각 브라우저의 이벤트에 isReady(이벤트 비동기 핸들러에 따라 결정)에 값을 할당한 다음 클로저에서 isReady 값을 주로 판단하여 작업을 수행합니다. dom 구조가 준비되면(isReady === true) 콜백이 실행됩니다. 그렇지 않으면 실행할 큐(funs)에 콜백을 추가합니다. 이벤트 핸들러가 실행되면 큐(funs)를 반복하고 함수를 실행합니다. 대기열에 있는 함수를 실행한 후에는 대기열을 지워야 합니다(funs = null).
var Ready = (function(){
var isReady = false,
funs = [];
함수 핸들 (e) {
if ( isReady ) {
return;
}
if ( e.type = == 'readystatechange' && (document.readyState !== 'interactive' && document.readyState !== 'complete') ) {
length; i ) {
funs[i].call(document);
document.addEventListener( 'DOMContentLoaded', 핸들, false );
document.addEventListener( 'readystatechange', 핸들, false );
document.addEventListener( 'load', 핸들, false );
}
else if ( document.attachEvent ) {
document.attachEvent( 'onreadystatechange', 핸들 );
document.attachEvent( 'onload', 핸들 );
}
반환 함수 준비(콜백) {
if ( isReady ) {
callback.call(document);
}
else {
funs.push(callback);
}
} ;
}());
PS:
이 함수 코드는 권위 있는 가이드북을 참조합니다. 유일한 차이점은 추가 판단 document.readyState !== 'interactive'입니다.
코드는 다음과 같습니다.다양한 상호작용 및 완료 상태 브라우저 표시 순서는 일관성이 보장되지 않습니다. 이는 브라우저 및 페이지 내용에 따라 다릅니다. document.readyState !== 'interactive'가 추가되면 어떤 단계가 먼저 나타나든 코드가 표시될 수 있습니다. 더 일찍 실행됩니다.
2. 요청 시 CSS 로드, js
코드 복사
코드는 다음과 같습니다.
/**
*
* 매개변수 유형 결정
* createTime: 2013/9/18
*
*/
함수 유형(obj) {
var classTypes, objectTypes;
if ( obj == null ) {
return String(obj) ;
}
classTypes = {};
objectTypes = ('부울 숫자 문자열 함수 배열 날짜 RegExp 개체 오류').split(' ');
for ( var i = 0, len = objectTypes.length; i < len i ) {
classTypes[ '[object ' objectTypes[i] ']' ] = objectTypes[i].toLowerCase();
}
if ( obj === '객체' || typeof obj === '함수' ) {
var key = Object.prototype.toString.call(obj);
return classTypes[key];
}
obj 반환 유형;
}
// css按需加载
function loadCss(cssUrl, 콜백) {
var elem, bl,
isExecuted = false; // 防止재ie9中,콜백执行两次
if ( cssUrl == null ) {
return String(cssUrl);
}
elem = document.createElement('link'),
elem.rel = 'stylesheet';
if ( type(callback) === 'function' ) {
bl = true;
}
// for ie
함수 핸들 () {
if ( elem.readyState === 'loaded' || elem.readyState === 'complete' ) {
if (bl && !isExecuted) {
callback();
>> // nonie
의 경우 if (bl && !isExecuted) {
elem.onload = callback;
isExecuted = true;
}
elem.href = cssUrl;
document.getElementsByTagName('head')[0].appendChild( elem);
}
// js按需加载
function loadScript(scriptUrl, callback) {
var elem, bl,
isExecuted = false; // 防止재ie9中,콜백执行两次
if (scriptUrl == null) {
return String(fn);
}
elem = document.createElement('script');
if ( type(callback) === 'function' ) {
bl = true;
}
// for ie
function handler(){
var status = elem. ReadyState;
if (상태 === '로드됨' || 상태 === '완료') {
if (bl && !isExecuted) {
callback();
isExecuted = true;
}
elem.onreadystatechange = null;
}
}
elem.onreadystatechange = handler;
// 不ie
의 경우 if (bl && ! 실행됨) {
elem.onload = callback;
isExecuted = true;
}
elem.src = scriptUrl;
document.getElementsByTagName('head')[0].appendChild(elem);
}
PS: 링크 및 스크립트 요소가 로드되었는지 판단할 때 IE9 이하의 브라우저에서는 주로 로드 이벤트에 의존합니다. IE는
요소.readyState 상태는 요소가 로드되었는지 여부를 결정하며, 이상하게도 ie9(및 다른 브라우저 버전)에서는 요소에 로드 이벤트와 Readystatechange 이벤트가 모두 있으므로 변수 isExecuted가 코드에 추가됩니다. 콜백이 실행되면 콜백이 두 번 실행되는 것을 피하기 위해 더 이상 실행되지 않습니다.
3. 호출 방법
loadCss('http://www.jb51.net/apps/tbtx/miiee/css/base.css', function(){
console.log('css 로드됨 ') ;
});
loadScript('http://www.jb51.net/apps/tbtx/miiee/js/jQuery.js', function(){
console.log(' js 로딩 완료');
});
ready(function(){
console.log('dom is Ready!');
});

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











1. 먼저 왼쪽 하단에 있는 설정 아이콘을 열고 설정 옵션을 클릭합니다. 2. 그런 다음 점프된 창에서 CSS 열을 찾습니다. 3. 마지막으로 알 수 없는 속성 메뉴의 드롭다운 옵션을 오류 버튼으로 변경합니다. .

1. Visual Studio 2019를 열고 옵션 설정을 찾은 다음 CSS를 클릭합니다. 2. 여기서는 다음 속성의 기술 설정을 볼 수 있습니다. 3. 이제 여기에서 텍스트를 설정하고 테두리를 채울 수 있습니다. 4. 이때 여기에서 부동 위치 설정도 설정할 수 있습니다. 5. 이때 여기에서 테두리와 배경을 설정하여 작업을 완료할 수도 있습니다. 6. 마지막으로 여기에서 확인 버튼을 클릭하여 CSS 기본 속성을 설정합니다.

Vue 구성 요소의 스타일 격리는 네 가지 방법으로 달성할 수 있습니다. 범위가 지정된 스타일을 사용하여 격리된 범위를 만듭니다. CSS 모듈을 사용하여 고유한 클래스 이름을 가진 CSS 파일을 생성합니다. 모듈성과 재사용성을 유지하기 위해 BEM 규칙을 사용하여 클래스 이름을 구성합니다. 드문 경우지만 스타일을 구성 요소에 직접 삽입할 수 있지만 이는 권장되지 않습니다.

Vue에서 v-show와 v-if의 주요 차이점은 다음과 같습니다. v-show: 표시 스타일 속성을 변경하여 요소 표시를 제어합니다. 표시/숨기기로 자주 전환하는 요소에 대해 가볍고 성능 친화적입니다. 요소가 차지하는 공간을 유지하므로 깜박거림이 발생할 수 있습니다. v-if: 조건을 통해 요소를 삽입하거나 삭제하여 레이아웃 흐름에 영향을 주고 깜박임을 방지합니다. 그러나 요소를 파괴하고 다시 만드는 데 드는 비용이 높으며 표시/숨겨진 요소를 자주 전환하는 데 적합하지 않습니다.

BitstampPro를 등록하는 방법은 무엇입니까? BitstampPro 웹사이트를 방문하세요. 개인 정보와 이메일 주소를 입력하세요. 비밀번호를 만들고 약관에 동의하세요. 이메일 주소를 확인하세요. BitstampPro는 안전한가요? 인증이 필요합니다. 이중 인증 사용을 시행합니다. 대부분의 자산은 콜드 스토리지에 저장됩니다. HTTPS를 사용하여 통신을 암호화합니다. 정기적인 보안 감사를 실시합니다. BitstampPro는 합법적인가요? 룩셈부르크에 등록되었습니다. 룩셈부르크 금융감독위원회의 규제를 받습니다. 자금세탁 방지 및 고객 파악 규정을 준수합니다.

DCAT를 사용할 때 DCATADMIN (LARAVEL-ADMIN)에서 데이터를 추가하려면 사용자 정의의 테이블 기능을 구현하는 방법 ...

이 기사에는 OKX, Binance, Gate.io, Huobi, Kraken, Coinbase, Kucoin, Crypto.com, Bitfinex 및 Bitstamp를 포함하여 전 세계 10 대 크립토 화폐 거래소가 나와 있습니다. 강력한 기술 강점, 풍부한 제품 라인, 엄격한 규정 준수 운영 및 혁신적인 생태 구성으로 인해 이러한 거래소는 글로벌 Cryptocurrency 시장에서 주도권을 잡았습니다. 이 기사는 특별한 기능, 기술 아키텍처, 보안 조치, 규정 준수 자격 및 생태계 건설을 각각 소개하여 투자자가 적절한 거래 플랫폼을 선택할 수 있도록 참조 할 것입니다.

소스 파일은 원본 코드나 데이터가 포함된 컴파일되지 않은 파일이며 해당 형식은 프로그래밍 언어와 응용 프로그램에 따라 다릅니다. 일반적인 형식에는 텍스트 파일(.txt, .csv), 프로그래밍 언어(예: .py, .java), 마크업 언어(예: .html, .css), 이미지 파일(예: .png, . jpg), 비디오 파일(예: .mp4, .avi) 및 JSON(.json), PDF(.pdf), Word 문서(.doc) 등과 같은 기타 형식입니다.
