পৃষ্ঠাটি লোড করা শেষ হয়েছে কিনা তা সনাক্ত করুন


93

কোনও পৃষ্ঠা যখন এর সমস্ত সামগ্রী, জাভাস্ক্রিপ্ট এবং CSS এবং চিত্রের মতো সম্পদগুলি লোড করা শেষ করে ফেলেছে তখন কি কোনও উপায় সনাক্ত করার উপায় আছে?

তাই মত:

if(PAGE HAS FINISHED LOADING)
{
// do something amazing
}

এবং অতিরিক্ত হিসাবে পৃষ্ঠাটি যদি 1 মিনিটেরও বেশি সময় ধরে লোড হয়ে থাকে তবে অন্য কিছু করুন যেমন:

if(PAGE HAS BEEN LOADING FOR 1 MIN)
{
// do something else amazing
}

আমি অ্যাপলের মোবাইলমির মতো ওয়েবসাইটগুলিও একই রকম চেক করতে দেখেছি তবে তাদের বিশাল কোড লাইব্রেরিতে এটি বের করতে সক্ষম হইনি।

কেউ সাহায্য করতে পারেন?

ধন্যবাদ

সম্পাদনা: এটি মূলত আমি যা করতে চাই তা হল:

// hide content
$("#hide").hide();

// hide loading
$("#loading").hide();

// fade in loading animation
setTimeout($('#loading').fadeIn(), 200);

jQuery(window).load(function() {
  $("#hide").fadeIn();

  $("#loading").fadeOut(function() {
    $(this).remove();
    clearInterval(loadingAnim);
  });

  setTimeout(function() {
    $("#error").fadeIn();
  }, 60000);
});

4
window.onload(বা $(window).load()) কাজ করবে না এমন কোনও কারণ আছে ?
sdleihssirhc

হাই @ ক্যামেরন পৃষ্ঠাটি লোডিং শেষ হওয়ার পরে কোন কোডটি লোডারটিকে আড়াল করতে কাজ করে?
tnkh

@TonyNg দেখুন আমার উত্তর: stackoverflow.com/questions/7083693/...
ক্যামেরন

উত্তর:


130
jQuery(window).load(function () {
    alert('page is loaded');

    setTimeout(function () {
        alert('page is loaded and 1 minute has passed');   
    }, 60000);

});

অথবা http://jsfiddle.net/tangibleJ/fLLrs/1/

JQuery (উইন্ডো) .লোড সম্পর্কে ব্যাখ্যার জন্য http://api.jquery.com/load-event/ দেখুন ।

হালনাগাদ

জাভাস্ক্রিপ্ট লোড কাজ করে এবং দুটি ঘটনার উপর একটি বিস্তারিত ব্যাখ্যা DOMContentLoaded এবং onload পাওয়া যাবে এই পৃষ্ঠার

ডোমকন্টেন্টলয়েড : যখন ডিওএম হেরফের হতে প্রস্তুত । jQuery এর এই ইভেন্টটি ক্যাপচার করার উপায়টি রয়েছে jQuery(document).ready(function () {});

অন্লোড : যখন ডিওএম প্রস্তুত থাকে এবং সমস্ত সম্পদ - এতে চিত্রগুলি, আইফ্রেমে, ফন্ট ইত্যাদি অন্তর্ভুক্ত থাকে - লোড করা হয়েছে এবং স্পিনিং হুইল / ঘন্টা ক্লাস অদৃশ্য হয়ে যায়। jQuery এর এই ইভেন্টটি ক্যাপচার করার পদ্ধতিটি উপরে বর্ণিত jQuery(window).load


আপনি যদি আমার ওপিটির দিকে তাকান তবে আমি এটি সংশোধন করেছি যাতে এটি দেখায় যে আমার উদ্দেশ্যগুলি কী। সুতরাং সমস্ত সম্পদ কোনও লোডার লোড এবং বিবর্ণ হয়ে যাওয়ার পরে এবং সামগ্রীতে বিবর্ণ হওয়ার পরে পৃষ্ঠাটি দেখাতে চাই। আমার কোডটি সঠিকভাবে কাজ করবে? চিয়ার্স
ক্যামেরন

আপনার কোডটি ঠিকঠাক দেখাচ্ছে তবে নিশ্চিত হওয়ার জন্য আমাকে এটিকে ক্রিয়াতে দেখতে হবে।
টি। জাংহানস

@ জিমার হ্যাঁ: এমডিএন : "যখন কোনও সংস্থান এবং এর নির্ভরশীল সংস্থানগুলি লোড করা শেষ করে তখন লোড ইভেন্টটি বরখাস্ত করা হয়।"
টি। জাংহানস

4
দয়া করে নোট করুন যে jQuery.load()jQuery / 1.8 সাল থেকে অবহেলা করা হয়েছে এবং jQuery / 3 এ সরানো হয়েছে। বর্তমান সিনট্যাক্স হয় jQuery(window).on("load", function(){/*...*/});
vlvaro González

59

আপনি যা খুঁজছেন তার উপর নির্ভর করে জিকুরিতে এটি করার দুটি উপায় আছে ..

jquery ব্যবহার করে আপনি করতে পারেন

  • // এটি কল করার আগে পাঠ্য সম্পদগুলি লোড হওয়ার জন্য অপেক্ষা করবে (ডোম .. সিএসএস .. জেএস)

    $(document).ready(function(){...});
    
  • // এটি কার্যকর করার আগে সমস্ত চিত্র এবং পাঠ্য সম্পদ লোডিং শেষ করার জন্য অপেক্ষা করবে

    $(window).load(function(){...});
    

এই পদ্ধতিতে, পৃষ্ঠাটি কয়েক মিনিট ধরে লোড হচ্ছে তবে এখনও সম্পূর্ণ না হলে আপনি কীভাবে বলতে পারবেন?
yoozer8

4
এটি একটি সেটটাইমআউট (ফাংশন () load! লোডড && foo ();}, 20000) দিয়ে সম্পন্ন হতে পারে; এবং ডক রেডি বা উইন্ডো লোড
সত্যে

4
jquery 3.0 এর জন্য $ (উইন্ডো) ব্যবহার করুন। ("লোড", ফাংশন (ই) {});
শূন্য 8

13

এটিকে ওভারলোড বলা হয়। ডিওএম প্রস্তুতটি সঠিক কারণেই তৈরি হয়েছিল যা চিত্রের উপর ওভারলোড অপেক্ষা করেছিল। (উত্তর থেকে নেওয়া Matchu একটি সময় আগে একটি simmilar প্রশ্নে।)

window.onload = function () { alert("It's loaded!") }

অনলোডটি দস্তাবেজের অংশ হিসাবে থাকা সমস্ত সংস্থানগুলির জন্য অপেক্ষা করে।

এমন একটি প্রশ্নের লিঙ্ক যেখানে তিনি এটি সমস্ত ব্যাখ্যা করেছেন:

আমাকে ক্লিক করুন, আপনি জানেন যে আপনি চান!


10

আমি মনে করি সবচেয়ে সহজ উপায় হবে

var items = $('img, style, ...'), itemslen = items.length;

items.bind('load', function(){ 
    itemslen--;
    if (!itemlen) // Do stuff here
});

সম্পাদনা করুন, কিছুটা পাগল হওয়ার জন্য:

var items = $('a, abbr, acronym, address, applet, area, audio, b, base, ' + 
    'basefont, bdo, bgsound, big, body, blockquote, br, button, canvas, ' + 
    'caption, center, cite, code, col, colgroup, comment, custom, dd, del, ' +
    'dfn, dir, div, dl, document, dt, em, embed, fieldset, font, form, frame, ' +
    'frameset, head, hn, hr, html, i, iframe, img, input, ins, isindex, kbd, ' +
    'label, legend, li, link, listing, map, marquee, media, menu, meta, ' +
    'nextid, nobr, noframes, noscript, object, ol, optgroup, option, p, ' +
    'param, plaintext, pre, q, rt, ruby, s, samp, script, select, small, ' + 
    'source, span, strike, strong, style, sub, sup, table, tbody, td, ' + 
    'textarea, tfoot, th, thead, title, tr, tt, u, ul, var, wbr, video, ' + 
    'window, xmp'), itemslen = items.length;

items.bind('load', function(){ 
    itemslen--;
    if (!itemlen) // Do stuff here
});

আমি এই ধারণাটি পছন্দ করি না কেন আইটেমসল কখনই 0 এর নিচে গণনা করা হয় না
নিষিদ্ধ

4
এই পদ্ধতির বিষয়ে সতর্ক থাকুন - এটি ধরে নিচ্ছে যে সমস্ত তালিকাভুক্ত উপাদানগুলির একটি 'লোড' ইভেন্ট রয়েছে, যা তাদের উদাহরণের মধ্যে অনেকেই করেন না।
জন ওয়েডবারি

6

আপনি না পরীক্ষা করতে আরেকটি বিকল্প document.readyState মত,

var chkReadyState = setInterval(function() {
    if (document.readyState == "complete") {
        // clear the interval
        clearInterval(chkReadyState);
        // finally your page is loaded.
    }
}, 100);

রেডিস্টেট পৃষ্ঠার ডকুমেন্টেশন থেকে সম্পূর্ণ রাষ্ট্রের সারাংশ

দস্তাবেজটি লোড হওয়ার সময় "লোডিং", পার্সিং শেষ হয়ে গেলে "ইন্টারেক্টিভ" ফেরত দেয় তবে সাব-রিসোর্সগুলি লোড করা এবং এটি লোড হয়ে গেলে "সম্পূর্ণ" প্রত্যাবর্তন করে।


আমি ক্যাশেড ইমেজ নিয়ে সমস্যায় পড়েছি, এবং এটি পারফরম্যান্সে এটির জন্য আরও ভাল কোড বলে মনে হচ্ছে ... অনুশীলন সম্পর্কে ভাবছেন? JQuery চেয়ে ভাল বলে মনে হচ্ছে $(window).on("load" function () {//dostuff})...?
কিমি.কি.মি.কি.মি.

3

একটি বিকল্প পৃষ্ঠাটি ফাঁকা হওয়া, জাভাস্ক্রিপ্টের স্বল্প পরিমাণযুক্ত of আসল পৃষ্ঠাগুলি পেতে AJAX কল করতে স্ক্রিপ্টটি ব্যবহার করুন এবং সাফল্যের ফাংশনটি বর্তমান নথিতে ফলাফল লিখুন। সময়সীমা ফাংশনে আপনি "অন্য কিছু আশ্চর্যজনক কিছু করতে" পারেন

আনুমানিক সিউডোকোড:

$(document).ready(function(){
    $.ajax
      url of actual page
      success:do something amazing
      timeout: do something else
});

হ্যাঁ, তাই তবে যখন আমি নিজেকে জিজ্ঞাসা করলাম তখন এটি প্রথম উপায় মনে আসে "একটি পৃষ্ঠার জন্য কোনও অনুরোধ যদি সময় হয়ে যায় তবে কীভাবে তা বলতে পারবেন?"
yoozer8

ছবিগুলি লোড করা শেষ হয়েছে কিনা তা আপনাকে জানাতে হবে না .. বরং এটি কেবলমাত্র কাঁচা মার্কআপটি লোড করা হয়েছে কিনা তা বলবে
সামকোন

এইচএম আমাকে একটি আকর্ষণীয় প্রশ্নের দিকে নিয়ে যায়। আপনি যদি মাত্র $ (দস্তাবেজ) .html (প্রতিক্রিয়া) করেছেন, এবং প্রতিক্রিয়ায় একটি ডকুমেন্ট রয়েছে ready প্রস্তুতি বা একটি উইন্ডো.লোড, ডকুমেন্টটি লেখার পরে এটি কি কার্যকর হবে? অথবা ব্রাউজারটি পৃষ্ঠাটি ইতিমধ্যে লোড হওয়া হিসাবে দেখাবে এবং সামগ্রী পরিবর্তনে তাদের কল করবে না?
yoozer8

আমি মনে করি এটি দ্বিতীয়বারের মতো ডাকবে তবে 100% নয় ... চেষ্টা করে দেখুন
সামকোন

3

জনগণের এফওয়াইআই যাঁরা মন্তব্যে জিজ্ঞাসা করেছেন, প্রকল্পগুলিতে আমি আসলে এটি ব্যবহার করেছি:

function onLoad(loading, loaded) {
    if(document.readyState === 'complete'){
        return loaded();
    }
    loading();
    if (window.addEventListener) {
        window.addEventListener('load', loaded, false);
    }
    else if (window.attachEvent) {
        window.attachEvent('onload', loaded);
    }
};

onLoad(function(){
   console.log('I am waiting for the page to be loaded');
},
function(){
    console.log('The page is loaded');
});

2

এই আপনি মনের মধ্যে ছিল কি?

$("document").ready( function() {
    // do your stuff
}

4
ডোম প্রস্তুত হওয়ার পরে এটি চলবে, তবে চিত্রগুলির মতো লোড শেষ হওয়ার আগে এটি হতে পারে।
জেমস আলার্ডিস


2

জ্যুচুরি ছাড়া বা এমন কিছু নয় কেন?

var loaded=0;
var loaded1min=0;
document.addEventListener("DOMContentLoaded", function(event) {
   loaded=1;
    setTimeout(function () {
      loaded1min=1;
    }, 60000);
});

4
এটি সঠিক, তবে যা jqueryসম্পাদন করে তার থেকে কিছুটা আলাদা । DOMContentLoadedবাহ্যিক সামগ্রী লোড হওয়ার পরেই ট্রিগার করা হয় (উল্লেখযোগ্যভাবে চিত্রগুলি, যা নির্দিষ্ট পরিস্থিতিতে দীর্ঘ সময় নিতে পারে)। jqueryসঞ্চালিত .ready()ব্রাউজার নির্দিষ্ট ঘটনা, যা (অধিকাংশ ব্রাউজার দিকে) বাহ্যিক সামগ্রী লোড হয় সামনে ঘটতে ব্যবহার করে।
গ্রাচমাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.