img ელემენტის onload მოვლენა

შესაძლებელია თუ არა გავაკონტროლოთ დოკუმენტში რომელიმე სურათი ბოლომდე ჩამოიტვირთა თუ არა? თურმე შესაძლებელია :) გუშინ ღამე ჩემმა მეგობარმა (ირაკლი კობიაშვილი) მკითხა ამის შესახებ და პირველად დავფიქრდი ამ საკითხზე, არასოდეს არ დამჭირვებია მსგავსი რამის გაკეთება(და არც მომხვედრია თვალში არასოდეს მსგავსი რამ) და არც ვიცოდი თუ img ელემენტს ეს მოვლენა გააჩნდა. არადა w3c – ზე ამ ელემენტის მოვლენების აღწერიდან თუ გადავალთ (intrinsic events) ბმულზე, onload მოვლენა სიაში პირველი წერია, თუმცა img ელემენტზე არაფერი არ არის ნახსენები…

ამ მოვლენის გამოყენება ძალიან მარტივია, მაგალითად: <img src=”somefile.gif” onload=”alert(‘hi’)” />. თუმცა შეიძლება უფრო სასარგებლოდაც გამოვიყენოთ იგი დინამიური გალერეებისა ან დინამიური ჩარტების აწყობის დროს.

სადემონსტრაციოდ ქვემოთ მოყვანილია პატარა მაგალითი:

Load Image One
Load Image Two

Image Place

მაგალითში გამოყენებული JavaScript კოდი:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
 *@param string a string specifying image path
 */

function loadImage(imageSrc) {
 
  //change mouse cursor to waiting mode while image is loading
  document.body.style.cursor = 'wait';
 
  //retrive img element
  var img = document.getElementById('the-image');
 
  //asign anonimous function to the event if it is not set
  if (!img.onload) {
    img.onload = function() {
      alert('Loaded');
      //ok image has been loaded, change mouse cursor to default
      document.body.style.cursor = 'pointer';
    }
  }
 
  //asign image path to src attribute
  img.src = imageSrc + '?time=' + (new Date().getTime());
 
  return false;
 
}

ლინკებზე დაწკაპუნებისას გამოიძახება loadImage ფუნქცია რომელსაც პარამეტრად გადაეცემა სასურველი სურათის მისამართი ხოლო სურათის ჩატვირთვა ხდება img.src = imageSrc + ‘?time=’ + (new Date().getTime()); სტრიქონის მეშვეობით(სურათის მისამართის ბოლოში მიბმული ‘?time=’ + (new Date().getTime()) კოდის გამოიყენება ამ სურათის კეშირების თავიდან ასარიდებლად).

სურათის ბოლომდე ჩამოტვირთვის შემდეგ სრულდება ანონიმური ფუნქცია, რომელიც onload თვისებას მივანიჭეთ წინასწარ, ფუნქცია კი შეტყობინების საშუალებით გვატყობინებს რომ სურათის ჩამოტვირთვა დასრულებულია.

ასევე img ელემენტს გააჩნია complete თვისება რომელის მნიშვნელობაც არის true – ს ტოლი სურათის ჩამოტვირთვის შემდეგ… თუმცა რატომღაც Internet Explorer როგორც ხშირად ხდება სხვანაირად იქცევა და ამ თვისების მნიშვნელობა რატომღაც გამუდმებით არის false – ს ტოლი.

ტეგები:

9 Responses to “img ელემენტის onload მოვლენა”

  1. გაიხარე ;) მაგრა გამომადგა.

    ლინკს რომ აწვები ვაქრობ ძველ სურათს და მის მაგივრად ვაჩენ დამალულ div-ში მყოფ loading gif-ს. შემდეგ ვაწყობ ვაწყობ ახალი სურატის მისამარტს და ვალოადებ. რომ მორჩება დალოადებას ამ onload-ს საშუალებით gif-ს ვაქრობ და ვაჩენ ახალ სურათს.

    მოკლედ მსვენიერი გამოვიდა, კიდევ ერტხელ დიდი მადლობა.

    BTW ეკლიპსში tag insight-ში რატომღაც ეს ევენტი არ არის img ტეგისტვის.

  2. იოსები says:

    ჯიგრულია :)

    სიმართლე გითხრა არსად არასოდეს არ მომხვედრია <img onload=”" ასეთი რამე თვალში… გუშინ რომ ვილაპარაკეთ გამოსავალი კი გითხარი მაგრამ ეგეთი “იზვრაშენცული” გამოსავალი ვის რად უნდა :) გამზადებული ქონია onload ივენთი…

  3. Giorgi says:

    თუ სწორად მივხვდი პრელოადერისთვის შეიძლება გამოყენება არა? რაცხა მეტი ვერაფერი პრაქტიკული დანიშნულება ვერ მოვიგონე…

  4. თუ სწორად მივხვდი პრელოადერისთვის შეიძლება გამოყენება არა? რაცხა მეტი ვერაფერი პრაქტიკული დანიშნულება ვერ მოვიგონე…

    მარტო პრელოადერი რატომ? შეიძლება სურათის ჩატვირთვის შემდეგ კიდევ დამატებით რაღაცეების გაკეთება იყოს საჭირო მაგალითად სხვა სურათების ჩატვირთვა მაგრამ მხოლოდ იმის მერე რაც ეს სურათი ჩაიტვირთება და ასე შემდეგ.. ზოგადად შეიძლება კარგად გამოყენება

  5. სოსო, მეორედ რომ ვუშვებ იგივე URL-ზე რექუესტს, ქეშიდან მოდის სურათი და სერვერამდე აღარ მიდის. მაგას თავს ვერ ავარიდებ? იმიტომ მინდა რომ ის სურათი დინამიურად დაგენერირებული jFreeChart-ია.

  6. მამენტ რამე fake პარამეტრი რომ გადავცე, მაგალითად მიმდინარე დრო რომელსაც სერვერის მხარეს არ გამოვიყენებ არაფერში, ასე კი სეიძლება რარაც სხვა URL, რაღაც ინდური მეჩვენება ეგრე :)

  7. იკა, კოდი ყურადღებით წაკითხე? :P მაგის თავიდან ასარიდებლად Date ობიექტს ვიყენებ

    img.src = imageSrc + '?time=' + (new Date().getTime());

დატოვე კომენტარი:

ქართული კლავიატურა, ჩართვა/გამორთვა კლავიშით "~"