জাভাস্ক্রিপ্ট / jQuery ব্যবহার করে কোনও চিত্র লোড হয়েছে কিনা তা আমি কীভাবে নির্ধারণ করতে পারি?


84

আমি ব্যবহারকারীর ব্রাউজার উইন্ডোতে ফিট করার জন্য বৃহত চিত্রটির আকার পরিবর্তন করতে কিছু জাভাস্ক্রিপ্ট লিখছি। (দুর্ভাগ্যক্রমে আমি উত্স চিত্রগুলির আকার নিয়ন্ত্রণ করি না।)

এই জাতীয় কিছু HTML এ হবে:

<img id="photo"
     src="a_really_big_file.jpg"
     alt="this is some alt text"
     title="this is some title text" />

srcকোনও imgট্যাগের চিত্রটি ডাউনলোড হয়েছে কিনা তা নির্ধারণ করার জন্য কি আমার জন্য কোনও উপায় আছে ?

আমার এটি দরকার কারণ $(document).ready()ব্রাউজারটি চিত্রটি লোড করার আগেই যদি কার্যকর করা হয় তবে আমি কোনও সমস্যায় পড়ছি। $("#photo").width()এবং $("#photo").height()স্থানধারকের আকার (Alt পাঠ্য) ফিরিয়ে দেবে। আমার ক্ষেত্রে এটি 134 x 20 এর মতো।

এই মুহুর্তে আমি কেবল ফটোটির উচ্চতা ১৫০ এরও কম কিনা তা পরীক্ষা করে নিচ্ছি এবং ধরে নিচ্ছি যে এটি যদি কেবলমাত্র ALL পাঠ্য হয়। তবে এটি বেশ হ্যাক এবং কোনও ছবি যদি ১৫০ পিক্সেলের চেয়ে কম লম্বা হয় (তবে এটি আমার বিশেষ ক্ষেত্রে সম্ভবত না), বা যদি Alt পাঠ্যটি ১৫০ পিক্সেলের বেশি লম্বা হয় (সম্ভবত একটি ছোট ব্রাউজার উইন্ডোতে ঘটতে পারে) ।


সম্পাদনা: যে কেউ কোডটি দেখতে চাইছেন তাদের জন্য:

$(function()
{
  var REAL_WIDTH = $("#photo").width();
  var REAL_HEIGHT = $("#photo").height();

  $(window).resize(adjust_photo_size);
  adjust_photo_size();

  function adjust_photo_size()
  {
    if(REAL_HEIGHT < 150)
    {
      REAL_WIDTH = $("#photo").width();
      REAL_HEIGHT = $("#photo").height();
      if(REAL_HEIGHT < 150)
      {
        //image not loaded.. try again in a quarter-second
        setTimeout(adjust_photo_size, 250);
        return;
      }
    }

    var new_width = . . . ;
    var new_height = . . . ;

    $("#photo").width(Math.round(new_width));
    $("#photo").height(Math.round(new_height));
  }

});

আপডেট : পরামর্শের জন্য ধন্যবাদ। যদি $("#photo").loadইভেন্টটির জন্য আমি কলব্যাক সেট করে নিই তবে ইভেন্টটি বরখাস্ত না হওয়ার ঝুঁকি রয়েছে , তাই আমি ইমেজ ট্যাগে সরাসরি একটি অনলাইন ইভেন্ট সংজ্ঞায়িত করেছি। রেকর্ডের জন্য, এখানে কোডটি দিয়ে আমি শেষ করেছি:

<img id="photo"
     onload="photoLoaded();"
     src="a_really_big_file.jpg"
     alt="this is some alt text"
     title="this is some title text" />

তারপরে জাভাস্ক্রিপ্টে:

//This must be outside $() because it may get called first
var isPhotoLoaded = false;
function photoLoaded()
{
  isPhotoLoaded = true;
}

$(function()
{
  //Hides scrollbars, so we can resize properly.  Set with JS instead of
  //  CSS so that page doesn't break with JS disabled.
  $("body").css("overflow", "hidden");

  var REAL_WIDTH = -1;
  var REAL_HEIGHT = -1;

  $(window).resize(adjust_photo_size);
  adjust_photo_size();

  function adjust_photo_size()
  {
    if(!isPhotoLoaded)
    {
      //image not loaded.. try again in a quarter-second
      setTimeout(adjust_photo_size, 250);
      return;
    }
    else if(REAL_WIDTH < 0)
    {
      //first time in this function since photo loaded
      REAL_WIDTH = $("#photo").width();
      REAL_HEIGHT = $("#photo").height();
    }

    var new_width = . . . ;
    var new_height = . . . ;

    $("#photo").width(Math.round(new_width));
    $("#photo").height(Math.round(new_height));
  }

});

4
এটি এত পুরানো এবং আপনি ইতিমধ্যে একটি উত্তর গ্রহণ করেছেন, তাই আমি এখানে কেবল মন্তব্য করব। আপনি কেন jQuery প্লাগইন 'onImagesLoad' ব্যবহার করতে পারবেন না? এবং এছাড়াও, jQuery এর বা না, কি সেটিং সঙ্গে ভুল max-widthএবং max-heightজাভাস্ক্রিপ্ট সঙ্গে ইমেজ স্টাইলিং মধ্যে? তারপরে আপনি ভিউপোর্টের প্রস্থ / উচ্চতার আকারে সর্বোচ্চ প্রস্থ / উচ্চতা নির্ধারণ করে আপনার যে কোডটি লিখতে হবে সেগুলি সমস্ত এড়ানোর জন্য।

@ jon.wd7: আমি সেই প্লাগইনটির সাথে পরিচিত নই এবং এটি '08-এ ফিরে আসতে পারে নি। সর্বোচ্চ-প্রস্থ এবং সর্বোচ্চ-উচ্চতা হিসাবে, দুটি জিনিস: 1) এগুলি IE এ সমর্থিত নয় (ভাল আমি IE 8 সম্পর্কে নিশ্চিত নই); 2) যদি ভিউপোর্টের আকার পরিবর্তন হয় (উইন্ডোটি পুনরায় আকার দেওয়া হয়, ইত্যাদি) তবে সর্বাধিক প্রস্থ / সর্বাধিক উচ্চতা পরিবর্তনের জন্য আমার এখনও জাভাস্ক্রিপ্টের প্রয়োজন হবে (যদিও আমি পিক্সেল পরিমাপের পরিবর্তে "100%" ব্যবহার করি না তবে)
কিপ

এটি স্পষ্টতই আইই and এবং আইই ৮-তে সমর্থিত হয়েছে, কুইর্কসমোড.আরগ্রেশন অনুসারে। সুতরাং আমি আপনার সমস্যা সম্পর্কে নিশ্চিত নই। আমি ব্যক্তিগতভাবে এই জাতীয় ছোট জিনিসের জন্য আই 6 সমর্থন করি না, তাই তারা যা দেখবে তা জেএস সক্ষম না করেও একজন ব্যবহারকারী দেখতে পাবে। এবং অবশ্যই আপনি পুনরায় সেট করতে হবে max-widthএবং max-heightপুনরায় আকার দেওয়ার উপর। তবে এটি বেশ সহজ কাজ, .resize()বাস্তবে ব্যবহার করে একটি এক-লাইনার ।

4
সম্পূর্ণ সম্পত্তি বুদ্ধিমান কিনা চিত্র লোড করা হয়েছে অনুজ্ঞাসূচক উপায় দেয়।
বরিসকুনসকি

4
অ্যাড্রিয়েন, মোজিলা এখন অ্যান্ডয়েড (অজানা) বাদে সমস্ত বড় ব্রাউজার দ্বারা সমর্থিত হিসাবে সম্পূর্ণ দেখায়
অলিভার বাক

উত্তর:


33

হয় কোনও ইভেন্ট শ্রোতা যুক্ত করুন, অথবা চিত্রটি নিজেরাই লোড দিয়ে ঘোষণা করুন। তারপরে সেখান থেকে মাত্রাগুলি বের করুন।

<img id="photo"
     onload='loaded(this.id)'
     src="a_really_big_file.jpg"
     alt="this is some alt text"
     title="this is some title text" />

অনুমান অনুসারে, অ্যান্ডলোড কেবলমাত্র শরীর এবং ফ্রেমসেট উপাদানগুলির জন্য একটি ইভেন্ট; এটি বলেছিল, আমি মনে করি এটি আইআই-তে কাজ করে, তবে আমি জানি না যে এটি অন্য কোনও ব্রাউজারে কাজ করে বা এটি আপনি ধরে নিতে পারেন এমন কিছু বিষয় ... আমি কয়েক সপ্তাহ আগে এই বিষয়টি সন্ধান করছিলাম ...
জেসন নিশান বস্ত্রাদি

আমি এটি আই 6, আই 7, এফএফ 3, অপেরা 9, সাফায়ার (উইন্ডোজ বিটা), এবং ক্রোম (উইন্ডোজ বিটা) এ পরীক্ষা করেছি।
কিপ

9
জগাখিচুড়ি আচরণ এবং বিষয়বস্তু নিরুৎসাহিত করা হয়। ইভেন্টগুলি জাভাস্ক্রিপ্ট ব্যবহার করে প্রয়োগ করা উচিত, এইচটিএমএলে নয়।
dionyziz

10
তাঁর মন্তব্য প্রাসঙ্গিক যেহেতু আমরা ২০০৮ সালে আটকে নেই। লোকেরা এখনও এটি পড়ে এবং এমনকি 08 সালে এটি খারাপ অভ্যাস হিসাবে বিবেচিত হয়নি, আপনি চান না যে লোকেরা এখন এটির ভাল অনুশীলনটি ভাবেন।
স্পোকেন

4
ডকুমেন্ট.কোয়ারিসিলিটার ("img")। addEventListener ("লোড", ফাংশন () {সতর্কতা ('অনলোড!');});
ফ্রাঙ্ক শুইটারম্যান

14

Jquery ডেটা স্টোর ব্যবহার করে আপনি একটি 'বোঝাই' রাষ্ট্রের সংজ্ঞা দিতে পারেন।

<img id="myimage" onload="$(this).data('loaded', 'loaded');" src="lolcats.jpg" />

তারপরে অন্য কোথাও আপনি এটি করতে পারেন:

if ($('#myimage').data('loaded')) {
    // loaded, so do stuff
}

4
অন্যান্য লাইব্রেরির সাথে আরও ভাল সামঞ্জস্যের jQuery(this)পরিবর্তে ব্যবহার করুন $(this)(jquery এর মালিকানা $ নয়), বিশেষত যখন আপনার এইচটিএমএলে জাভাস্ক্রিপ্ট থাকে।
জন ম্যাগনোলিয়া

11

সঠিক উত্তরটি হ'ল ইভেন্ট.স্পেশাল.লোডটি ব্যবহার করা

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

.লোড () এ দস্তাবেজগুলি প্রতি


4
আমি এই জাতীয় পরামর্শ সহ একটি উত্তর যুক্ত করতে যাচ্ছিলাম, খুশি আমি উত্তরটি কোডিংয়ের আগে দেখেছি। মূলত, আপনার হ্যান্ডলারগুলি হ্যান্ডলারটি সেট করার আগে চিত্রটি লোড হয়েছে কিনা তা প্রথমে পরীক্ষা করা দরকার। যদি এটি ইতিমধ্যে লোড হয়, অবিলম্বে কলব্যাকটি ফায়ার করুন। এটা কি $.readyকরে। আমি কেবল প্রস্থটি যাচাই করার পরামর্শ দিচ্ছি, তবে এর সমস্যা রয়েছে, আমি সত্যিই সমাধানটি পছন্দ করি।
হুয়ান মেন্ডেস

5

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

অ্যাক্সেসযোগ্যতার ক্ষেত্রে, আপনার সাইটটি এখনও জাভাস্ক্রিপ্টবিহীন লোকদের জন্য কাজ করবে? আপনি ইমগ ট্যাগটি সঠিক এসসিআর দিতে পারেন, আপনার জেএস চালানোর জন্য আপনাকে ডোম রেডি হ্যান্ডলার সংযুক্ত করতে পারেন: চিত্রের এসআরসি সাফ করুন (পৃষ্ঠার ঝাঁকুনি প্রতিরোধের জন্য এটি সিএসএস সহ একটি স্থির করুন এবং উচ্চতা দিন), তারপরে আপনার আইএমজি লোড হ্যান্ডলারটি সেট করুন, তারপরে src টি সঠিক ফাইলে পুনরায় সেট করুন। আপনি সমস্ত ঘাঁটি এইভাবে আবরণ করুন :)


সাইটটি এখনও জাভাস্ক্রিপ্টবিহীন লোকদের জন্য কাজ করে, তাদের সমস্ত চিত্র দেখতে কেবল স্ক্রোল করতে হবে।
কিপ

4

আপনার মূল প্রশ্নের সাম্প্রতিক মন্তব্যগুলির একটি হিসাবে

$(function() {

  $(window).resize(adjust_photo_size);
  adjust_photo_size();

  function adjust_photo_size()  {
    if (!$("#photo").get(0).complete) {
       $("#photo").load(function() {
          adjust_photo_size();
       });
    } else {
      ... 
    }
});

সতর্কতা এই উত্তরটি ie8 এবং নিম্নে একটি গুরুতর লুপের কারণ হতে পারে, কারণ img.complete সর্বদা ব্রাউজার দ্বারা যথাযথভাবে সেট করা থাকে না। আপনি যদি ie8 সমর্থন করতে চান, ইমেজ বোঝা হয়েছে মনে করার জন্য একটি পতাকা ব্যবহার করুন।


এটা ধরো. এই উত্তরটি ie8 এবং নিম্নে একটি গুরুতর লুপ তৈরি করতে পারে, কারণ img.complete সর্বদা ব্রাউজার দ্বারা সঠিকভাবে সেট করা হয় না। আপনি যদি ie8 সমর্থন করতে চান, ইমেজ বোঝা হয়েছে মনে করার জন্য একটি পতাকা ব্যবহার করুন।
কমনপাইক

2

এর মতো কিছু চেষ্টা করুন:

$("#photo").load(function() {
    alert("Hello from Image");
});

6
ধন্যবাদ তবে এমনটি হওয়ার সম্ভাবনা রয়েছে যে চিত্রটি ইতিমধ্যে লোড হয়ে গেছে এটি হওয়ার আগেই, এমন পরিস্থিতিতে লোড ইভেন্টটি চালিত হবে না।
কিপ

চিত্র ইভেন্টের ঠিক পরে এই ইভেন্টটি কোনও স্ক্রিপ্ট ট্যাগ সেট করে কীভাবে? প্রস্তুত ব্যবহারের কারণটি হ'ল সম্পূর্ণ নথিটি লোড হয়েছে কিনা তা নিশ্চিত করা, যা এক্ষেত্রে অপ্রয়োজনীয়, তাই না?
জেসন গোয়ামাত

2

"ইমেজসোলেড" নামে একটি jQuery প্লাগইন রয়েছে যা কোনও উপাদানটির চিত্র (গুলি) লোড হয়েছে কিনা তা পরীক্ষা করতে ক্রস-ব্রাউজারের সামঞ্জস্যপূর্ণ পদ্ধতি সরবরাহ করে।

সাইট: https://github.com/desandro/imagesloaded/

ভিতরে থাকা অনেকগুলি চিত্র রয়েছে এমন ধারকটির ব্যবহার:

$('container').imagesLoaded(function(){
 console.log("I loaded!");
})

প্লাগইন দুর্দান্ত:

  1. ভিতরে অনেক চিত্র সহ একটি ধারক পরীক্ষা করার জন্য কাজ করে
  2. এটি কোনও লোড হয়েছে কিনা তা দেখার জন্য একটি আইএমজি যাচাইয়ের জন্য কাজ করে

ভারী ভারী 5KB মনে হচ্ছে কেবল ইম্জি লোড হওয়া চেক করতে পারেন। একটি সহজ হালকা পদ্ধতি উপলভ্য হওয়া উচিত ...
সিডালেক্সেন্ডার

1

এই সম্পর্কে কোন মন্তব্য?

...

doShow = function(){
  if($('#img_id').attr('complete')){
    alert('Image is loaded!');
  } else {
    window.setTimeout('doShow()',100);
  }
};

$('#img_id').attr('src','image.jpg');

doShow();

...

সর্বত্র কাজের মতো মনে হচ্ছে ...


এটি ব্যবহার করা খারাপ অভ্যাসsetTimeout
cdalxndr

1

আমি সবেমাত্র jQuerys ডিফার্ড অবজেক্ট ব্যবহার করে একটি চিত্র লোড করতে একটি jQuery ফাংশন তৈরি করেছি যা লোড / ত্রুটি ইভেন্টের উপর প্রতিক্রিয়া দেখাতে খুব সহজ করে তোলে:

$.fn.extend({
    loadImg: function(url, timeout) {
        // init deferred object
        var defer = $.Deferred(),
            $img = this,
            img = $img.get(0),
            timer = null;

        // define load and error events BEFORE setting the src
        // otherwise IE might fire the event before listening to it
        $img.load(function(e) {
            var that = this;
            // defer this check in order to let IE catch the right image size
            window.setTimeout(function() {
                // make sure the width and height are > 0
                ((that.width > 0 && that.height > 0) ? 
                    defer.resolveWith : 
                    defer.rejectWith)($img);
            }, 1);
        }).error(function(e) {
            defer.rejectWith($img);
        });

        // start loading the image
        img.src = url;

        // check if it's already in the cache
        if (img.complete) {
            defer.resolveWith($img);
        } else if (0 !== timeout) {
            // add a timeout, by default 15 seconds
            timer = window.setTimeout(function() {
                defer.rejectWith($img);
            }, timeout || 15000);
        }

        // return the promise of the deferred object
        return defer.promise().always(function() {
            // stop the timeout timer
            window.clearTimeout(timer);
            timer = null;
            // unbind the load and error event
            this.off("load error");
        });
    }
});

ব্যবহার:

var image = $('<img />').loadImg('http://www.google.com/intl/en_com/images/srpr/logo3w.png')
.done(function() {
    alert('image loaded');
    $('body').append(this);
}).fail(function(){
    alert('image failed');
});

এটি এখানে কাজ করে দেখুন: http://jsfiddle.net/roberkules/AdWZj/


ওটা চমত্কার শোনাচ্ছে. আপনার কোডটি যখন img.onload এবং img.onerror এর চেয়ে বেশি পছন্দ করেন দয়া করে একটি সঠিক উদাহরণ দিতে পারেন? আপনার কোডটি কি কেবল jQuery ত্রুটি পরিচালনার দৃশ্যমান ত্রুটিগুলি পরিচালনা করতে বোঝানো হয়েছিল আমাকে কেবলমাত্র সম্পর্কে জানানো হয়েছিল: ফাইল এক্সটেনশন না থাকলে সেই ত্রুটি IE তে ট্রিগার করে না?
এমপ্লুঞ্জন

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

4
@ বিনীত সময়সীমাটি কেবল একটি ফ্যালব্যাক হওয়া উচিত। বেশিরভাগ ব্রাউজারগুলির errorদ্বারা পরিচালিত কোনও ইভেন্ট ফায়ার করা উচিত .error(function(e) { defer.rejectWith($img); })। আপনি যদি জেসফিডেলের দিকে লক্ষ্য করেন তবে দেখতে পাবেন যে http://www.google.com/abc.png not foundফলাফলটি ফলকে অবিলম্বে পাঠ্যটি প্রদর্শিত হবে (একটি সময়সীমার অপেক্ষায় নেই, কারণ ত্রুটির ঘটনাটি লাথি মেরেছে)
রবারকুলস

নোট করুন যে jquery বাড়াতে। দু'টি জিনিস হ্রাস করতে হবে হ্যান্ডেলটি কিন্তু ত্রুটি উত্থাপিত হওয়ার আগে সেট করা উচিত। 2. .অরার্কটি কেবলমাত্র HTTP প্রোটোকল পরিচালনা করে এবং ফাইল ফাইল করে না: // সুতরাং আপনি সেখানে ত্রুটি পাবেন না
ওক

আমার কোড উদাহরণে সাফল্য / ত্রুটি হ্যান্ডলারটি ঠিক সেই কারণে সিআরসি বৈশিষ্ট্য নির্ধারণের আগে সেট করা আছে। file://সীমাবদ্ধতা সম্পর্কে - ফাইল প্রোটোকলটি ব্যবহার করে আমার কখনও চিত্রগুলি লিঙ্ক করার প্রয়োজন হয়নি এবং আমার মনে হয় না এর বেশি প্রয়োজন আছে।
রবারকুলেস

1

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

imageLoaded = function(node) {
    var w = 'undefined' != typeof node.clientWidth ? node.clientWidth : node.offsetWidth;
    var h = 'undefined' != typeof node.clientHeight ? node.clientHeight : node.offsetHeight;
    return w+h > 0 ? true : false;
};

আমি আবিষ্কার করেছি যে এই সমাধানটির প্রয়োজন হতে পারে যে চিত্রটিতে কোনও মার্জিন বা প্যাডিং না থাকে এবং খালি স্ট্রিংয়ের সেই Alt পাঠ্য সরবরাহ করা হয়। যদিও বেশিরভাগ ক্ষেত্রে এটি কাজ করে। এটি কেবলমাত্র ব্যর্থ হবে যদি আনলোড হওয়া চিত্রের আকার শূন্যের চেয়ে বড় হয়।
র‌্যাল্ফ রাইটোচ

1

আমি এটি আমার জন্য কাজ পেয়েছি

document.querySelector("img").addEventListener("load", function() { alert('onload!'); });

ক্রেডিট মোটামুটি ফ্র্যাঙ্ক শ্যুইটারম্যানের কাছে যায়, যিনি স্বীকৃত উত্তরে মন্তব্য করেছিলেন। আমি এখানে এটি রাখা ছিল, এটি খুব মূল্যবান ...


0

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

$(elem).onload = function() {
    doSomething();
}

তবে এটি IE9 এর একটি সম্ভাব্য বিষয়!

আমরা কেবলমাত্র ব্রাউজারের বিষয়েই প্রতিবেদন করেছি আইই 9 IE আমরা কি অবাক হই না? দেখে মনে হচ্ছে যে সমস্যাটি সমাধানের সর্বোত্তম উপায় হ'ল অনলোড লোড ফাংশনটি সংজ্ঞায়িত না করা অবধি চিত্রের জন্য কোনও এসআরসি বরাদ্দ করা নয়, যেমন:

$(elem).onload = function() {
    doSomething();
}
$(elem).attr('src','theimage.png');

দেখে মনে হচ্ছে যে আইই 9 কখনও কখনও ফেলে দেবে না onload কোনও কারণে ইভেন্টটি । এই পৃষ্ঠায় অন্যান্য সমাধান (যেমন ইভান ক্যারোলের একটি উদাহরণস্বরূপ) এখনও কার্যকর হয়নি। যৌক্তিকভাবে, এটি লোডের অবস্থাটি ইতিমধ্যে সফল হয়েছিল এবং ফাংশনটি ট্রিগার করেছে কিনা তা যাচাই করেছে এবং যদি তা না হয়ে থাকে তবে অনলোডলোড হ্যান্ডলারটি সেট করুন, তবে আপনি যখন তা পরীক্ষা করে দেখিয়েছিলেন যে জেএসের এই দুটি লাইনের মধ্যে চিত্রটি লোড হতে পারে testing প্রথম লাইনে লোড না হওয়া উপস্থিত এবং অনলোড হ্যান্ডলারটি সেট হওয়ার আগে লোড হচ্ছে।

আমরা দেখতে পেয়েছি যে আপনি যা চান তা পাওয়ার সর্বোত্তম উপায় হ'ল onloadইভেন্টের ট্রিগার সেট না করা অবধি চিত্রের এসআরসি-কে সংজ্ঞায়িত না করা ।

আমরা কেবলমাত্র IE8 সমর্থন করা বন্ধ করে দিয়েছি তাই আমি IE9 এর পূর্বে সংস্করণগুলির জন্য কথা বলতে পারি না, অন্যথায়, সাইটে ব্যবহৃত সমস্ত অন্যান্য ব্রাউজারের মধ্যে - আইই 10 এবং 11 পাশাপাশি ফায়ারফক্স, ক্রোম, অপেরা, সাফারি এবং যা কিছু লোকেরা মোবাইল ব্রাউজার ব্যবহার করছিল - হ্যান্ডলারটি srcনির্ধারণের আগে সেটিংস সেট onloadকরা এমনকি কোনও সমস্যা ছিল না।


0

আমি কি পুরোপুরি একটি খাঁটি সিএসএস সমাধান প্রস্তাব দিতে পারি?

কেবলমাত্র একটি ডিভ করুন যা আপনি চিত্রটি দেখতে চান the চিত্রটিকে ব্যাকগ্রাউন্ড হিসাবে সেট করুন। তারপরে সম্পত্তি background-size: coverবা background-size: containআপনি এটি কীভাবে চান তার উপর নির্ভর করে।

coverছোট দিকের বাক্সটি কভার না করা পর্যন্ত চিত্রটি ক্রপ করবে। containপুরো ইমেজটি ডিভের ভিতরে রাখবে, আপনাকে পাশের জায়গাগুলি রেখে দেবে।

নীচে স্নিপেট পরীক্ষা করুন।

div {
  height: 300px;
  width: 300px;
  border: 3px dashed grey;
  background-position: center;
  background-repeat: no-repeat;
}

.cover-image {
  background-size: cover;
}

.contain-image {
  background-size: contain;
}
<div class="cover-image" style="background-image:url(https://assets1.ignimgs.com/2019/04/25/avengers-endgame-1280y-1556226255823_1280w.jpg)">
</div>
<br/>
<div class="contain-image" style="background-image:url(https://assets1.ignimgs.com/2019/04/25/avengers-endgame-1280y-1556226255823_1280w.jpg)">
</div>


0

আমি দেখতে পাই যে এই সহজ সমাধানটি আমার পক্ষে সবচেয়ে ভাল কাজ করে:

        function setEqualHeight(a, b) {
            if (!$(a).height()) {
                return window.setTimeout(function(){ setEqualHeight(a, b); }, 1000);
            }
            $(b).height($(a).height());
        }

        $(document).ready(function() {
            setEqualHeight('#image', '#description');
            $(window).resize(function(){setEqualHeight('#image', '#description')});
        });
    </script>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.