ইমেজ লোড করা jQuery ইভেন্ট


96

সমস্ত চিত্র যখন jQuery ইভেন্টের মাধ্যমে লোড হয় তখন এটি সনাক্ত করা সম্ভব?

আদর্শভাবে, একটি হওয়া উচিত

$(document).idle(function()
{
}

বা

$(document).contentLoaded(function()
{
}

তবে আমি এরকম জিনিস পাই না।

আমি এরকম একটি ইভেন্ট সংযুক্ত করার কথা ভেবেছিলাম:

$(document).ready(function()
{
    var imageTotal = $('img').length;
    var imageCount = 0;        
    $('img').load(function(){if(++imageCount == imageTotal) doStuff();});
}

তবে কোনও চিত্র লোড করতে ব্যর্থ হলে এই ব্রেক কি হবে? পদ্ধতিটি কল করার জন্য এবং সঠিক সময়ে এটি সমালোচনামূলকভাবে গুরুত্বপূর্ণ।


9
আপনি কেন লোড ইভেন্টটি ব্যবহার করবেন না: $ (উইন্ডো) .লোড (doStuff)? অন্লোড, তবে, অন্যান্য সংস্থানগুলির জন্যও অপেক্ষা করবে (উদাহরণস্বরূপ স্ক্রিপ্টস, স্টাইলশিট এবং ফ্ল্যাশ) এবং কেবল চিত্র নয়, যা আপনার কাছে ঠিক আছে বা নাও হতে পারে।
মোফ

আপনার কোডের নমুনায় যেমন রয়েছে তেমনি আপনার সমস্ত img ট্যাগগুলিতে একটি লোড ইভেন্ট সংযুক্ত করা কার্যকর হবে। যদি কোনও চিত্র ডো স্টাফ () লোড করতে ব্যর্থ হয় তবে কল করা হবে না, তবে এটি আপনার প্রয়োজনের ভিত্তিতে যুক্তিযুক্ত বলে মনে হচ্ছে যে সমস্ত চিত্র অবশ্যই লোড করা উচিত।
স্টিভ গুডম্যান

4
। লোড () পদ্ধতিটি jQuery 1.8 থেকে অবহেলা করা হয়েছে। : এই পরীক্ষা করে দেখুন stackoverflow.com/questions/3877027/...
fiorix

উত্তর:


116

প্রতি jQuery এর ডকুমেন্টেশন , ইমেজ সহ লোড ইভেন্ট ব্যবহার করার জন্য বেশ কয়েকটি ক্যাভেট রয়েছে। অন্য উত্তরে উল্লিখিত হিসাবে, ahpi.imgload.js প্লাগইনটি নষ্ট হয়ে গেছে, তবে লিঙ্কযুক্ত পল আইরিশ টুকরোটি আর রক্ষণাবেক্ষণ করা হয় না।

প্রতি পল আইরিশ, চিত্র লোড সম্পূর্ণ ইভেন্টগুলি সনাক্ত করার জন্য ক্যানোনিকাল প্লাগইন এখন এখানে:

https://github.com/desandro/imagesলোড হয়েছে


4
এটি উত্তর- একাধিক চিত্র, ক্যাশেড চিত্র, ব্রাউজার কুইর্কস, ভাঙা চিত্রগুলি পরিচালনা করে এবং এটি বর্তমান। সুন্দর।
ইয়ারিন

7
আজ এটি পরীক্ষা। আপ ছিল এবং 2 মিনিটের মধ্যে চলমান।
কোডটিড

@ ইয়্যারিন, ভাল ডকুমেন্টেশন, ব্যবহারে সহজ, একাধিক, ক্যাশেড, ভাঙ্গা এবং বর্তমানের সাথে একমত হন। এটা ভাল।
জনহিতুর

নেতিবাচক দিকগুলিতে , যাইহোক, চিত্রগুলি লোড করা আইই 7 সমর্থন করে না যদি তা আপনার কাছে গুরুত্বপূর্ণ।
জনহিত

4
আইলি 7 এ কাজ করা চিত্রগুলি পেতে একটি দ্রুত এবং সাধারণ 2-লাইন ফিক্স ।
উদ্যোক্তা

63

আপনি যদি সমস্ত চিত্রের জন্য না পরীক্ষা করতে চান তবে একটি নির্দিষ্ট চিত্র (উদাহরণস্বরূপ, ডম ইতিমধ্যে সম্পূর্ণ হওয়ার পরে আপনি গতিশীলভাবে প্রতিস্থাপন করেছেন এমন চিত্র) আপনি এটি ব্যবহার করতে পারেন:

$('#myImage').attr('src', 'image.jpg').on("load", function() {  
  alert('Image Loaded');  
});  

70
সাবধান, কারণ load()কোনও চিত্র ইতিমধ্যে লোড হওয়ার পরে ট্রিগার হবে না। এটি সহজেই ঘটতে পারে যখন কোনও চিত্র ব্যবহারকারীর ব্রাউজার ক্যাশে থাকে। ইতিমধ্যে ব্যবহার করে কোনও চিত্র লোড হয়েছে কিনা তা আপনি পরীক্ষা করতে পারেন $('#myImage').prop('complete'), যা কোনও চিত্র লোড হওয়ার পরে সত্য ফিরে আসে।
ব্লেইস

6
কেন এটি এত বেশি ভোট দেয় যখন ক) তার প্রশ্নের উত্তর দেয় না এবং খ) এর বাইরেও একটি খারাপ সমাধান দেয়? (সঠিক উত্তরটির অর্থ @ জনপোলাসেকের এবং এর 1 টি ভোট রয়েছে)
ইয়ারিন

5
সতর্কতা !!!!!!!!!!!!!!! এটি সঠিক উত্তর নয়। জনপোলাসেকের সঠিক উত্তর রয়েছে। তার উত্তর আপ দয়া করে।
mrbinky3000

4
এই আপত্তিগুলি খুব নির্দিষ্ট পরিস্থিতিতে ব্যতীত আর প্রাসঙ্গিক বলে মনে হয় না: আপনি যখন কোনও চিত্রের এসসিআরটিকে ঠিক আগের মতোই একই সিআরসি তে পরিবর্তন করেন তখন ওয়েবকিট। চিত্রগুলির জন্য আপনি সবেমাত্র ডিওমে যুক্ত করেছেন, $ (...) লোড () যথেষ্ট হওয়া উচিত। বর্তমান এফএফ এবং ক্রোমে পরীক্ষিত, এবং আই 6-9: jsfiddle.net/b9chris/tXVCe/2
ক্রিস মোসচিনি

4
যখন আপনার ব্রাউজার ক্যাশে নেই তখন চিত্রটি কাজ করে (আপনি জানেন।
লোড

28

আপনি এটি পরিচালনা করতে আমার প্লাগইন ওয়েটফরমাজগুলি ব্যবহার করতে পারেন ...

$(document).waitForImages(function() {
   // Loaded.
});

এর সুবিধাটি হ'ল আপনি এটিকে কোনও পূর্বপুরুষের উপাদানে স্থানীয়করণ করতে পারেন এবং এটি সিএসএসে উল্লিখিত চিত্রগুলি option চ্ছিকভাবে সনাক্ত করতে পারে।

এটি আইসবার্গের কেবলমাত্র টিপ, আরও কার্যকারিতার জন্য ডকুমেন্টেশন চেক করুন ।


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

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

20

আইএমজি ইভেন্ট হ্যান্ডলার হিসাবে jQuery $ ()। লোড () ব্যবহারের গ্যারান্টি নেই। যদি চিত্রটি ক্যাশে থেকে লোড হয় তবে কিছু ব্রাউজার ইভেন্টটি বন্ধ করে দিতে পারে না। সাফারির (পুরানো?) সংস্করণগুলির ক্ষেত্রে, আপনি যদি কোনও আইএমজি উপাদানটির এসআরসি বৈশিষ্ট্যটিকে একই মানতে পরিবর্তন করেন , তবে ওভারলোড ইভেন্টটি চালিত হবে না।

দেখা যাচ্ছে যে এটি সর্বশেষ jQuery (1.4.x) - http://api.jquery.com/load-event - - এ উদ্ধৃতিতে স্বীকৃত :

এটা সম্ভব যে চিত্রটি ব্রাউজারের ক্যাশে থেকে লোড করা হলে লোড ইভেন্টটি ট্রিগার করা হবে না। এই সম্ভাবনার জন্য অ্যাকাউন্টে, আমরা একটি বিশেষ লোড ইভেন্ট ব্যবহার করতে পারি যা চিত্রটি প্রস্তুত থাকলে অবিলম্বে আগুন লাগবে fire ইভেন্ট.স্পেশাল.লোড বর্তমানে প্লাগইন হিসাবে উপলব্ধ।

আছে: একটি প্লাগ ইন এখন এই কেস এবং ইন্টারনেট এর "সম্পূর্ণ" IMG উপাদান লোড রাজ্যের জন্য সম্পত্তি চিনতে হয় http://github.com/peol/jquery.imgloaded/raw/master/ahpi.imgload.js


16

অনুযায়ী এই উত্তর , আপনি ব্যবহার করতে পারেন , jQuery লোড ঘটনা উপর windowপরিবর্তে বস্তুর document:

jQuery(window).load(function() {
    console.log("page finished loading now.");
});

পৃষ্ঠার সমস্ত সামগ্রী লোড হওয়ার পরে এটি ট্রিগার করা হবে। এটি থেকে পৃথক হয় jQuery(document).load(...)যা থেকে ডিওএম লোডিং শেষ হওয়ার পরে ট্রিগার হয়।


আমি ঠিক এটিই খুঁজছিলাম!
এরিক কে

4

চিত্রসলোডড প্লাগইন হ'ল উপায়, আপনার যদি ক্রসব্রোজার সমাধান প্রয়োজন হয়

 $("<img>", {src: 'image.jpg'}).imagesLoaded( function( $images, $proper, $broken ){
 if($broken.length > 0){
 //Error CallBack
 console.log('Error');
 }
 else{
 // Load CallBack
 console.log('Load');
 }
 });

আপনার যদি কেবলমাত্র একটি ওয়ার্কআউডের প্রয়োজন হয়, এটি করবে

 var img = $("<img>", {
    error: function() {console.log('error'); },
    load: function() {console.log('load');}
    });
  img.attr('src','image.jpg');


2

একই-উত্সের চিত্রগুলির জন্য, আপনি ব্যবহার করতে পারেন:

$.get('http://www.your_domain.com/image.jpg', imgLoaded);

function imgLoaded(){
    console.log(this, 'loaded');
}


0
  function CheckImageLoadingState()
  {
     var counter = 0;
     var length = 0;

     jQuery('#siteContent img').each(function() 
     {
        if(jQuery(this).attr('src').match(/(gif|png|jpg|jpeg)$/))
          length++;
     });

     jQuery('#siteContent img').each(function() 
     {  
        if(jQuery(this).attr('src').match(/(gif|png|jpg|jpeg)$/))
        {
           jQuery(this).load(function() 
           {
           }).each(function() {
              if(this.complete) jQuery(this).load();
            });
        }
        jQuery(this).load(function()
        {
           counter++;
           if(counter === length) 
           {  
              //function to call when all the images have been loaded
              DisplaySiteContent();
           }
        });
     });
  }


0

আমি আমার নিজস্ব স্ক্রিপ্ট তৈরি করেছি, কারণ অনেকগুলি প্লাগইন বেশ স্ফীত হয়ে গেছে বলে আমি খুঁজে পেয়েছি এবং এটি কেবল আমার ইচ্ছা মতো কাজ করতে চেয়েছিল। প্রতিটি চিত্রের উচ্চতা (নেটিভ চিত্রের উচ্চতা) আছে কিনা তা খনির পরীক্ষা করে। ক্যাচিংয়ের সমস্যাগুলি ঘটার জন্য আমি এটি $ (উইন্ডো)। লোড () ফাংশনটির সাথে একত্রিত করেছি।

আমি কোডটি এটি বেশ ভারীভাবে মন্তব্য করেছি, সুতরাং এটি ব্যবহার করা আপনার পক্ষে আগ্রহী হওয়া উচিত। এটি আমার পক্ষে পুরোপুরি কাজ করে।

আরও অ্যাডো না করে, এটি এখানে:

imgLoad.js স্ক্রিপ্ট


0

সমস্ত চিত্র লোড হওয়ার জন্য অপেক্ষা করা হচ্ছে ...
আমি এখানে আমার j j0000 এর সমস্যাটির নোঙ্গর পেয়েছি jquery: একটি ধারক ডিভের চিত্র লোড হওয়া ইভেন্টটি কীভাবে শুনব? .. এবং "যদি (এই.কমপ্লিট)"
সমস্ত জিনিস লোড হওয়ার জন্য অপেক্ষা করা হচ্ছে এবং কিছু সম্ভবত ক্যাশে রয়েছে! .. এবং আমি "ত্রুটি" ইভেন্টটি যুক্ত করেছি ... এটি সমস্ত ব্রাউজার জুড়েই শক্তিশালী

$(function() { // Wait dom ready
    var $img = $('img'), // images collection
        totalImg = $img.length,
        waitImgDone = function() {
            totalImg--;
            if (!totalImg) {
                console.log($img.length+" image(s) chargée(s) !");
            }
        };
    $img.each(function() {
        if (this.complete) waitImgDone(); // already here..
        else $(this).load(waitImgDone).error(waitImgDone); // completed...
    });
});

ডেমো: http://jsfiddle.net/molokoloco/NWjDb/


0

window.load = function(){}

এটি সম্পূর্ণরূপে সমস্ত ব্রাউজার দ্বারা সমর্থিত এবং সমস্ত চিত্র পুরোপুরি লোড হয়ে গেলে এটি কোনও ইভেন্টে আগুন ধরিয়ে দেবে।

https://developer.mozilla.org/en-US/docs/Web/API/ গ্লোবালEventHandlers/onload


অবশ্যই উইন্ডো.নলোড = ফাংশন () {}
টেকনোপল ২৪
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.