2012-04-23 2 views
1

Я не хочу, чтобы изображения загружались до тех пор, пока ссылка не зависнет, так что для этого вот сценарий, но он не работает, может кто-нибудь помочь мне в его исправлении? Я добавил слушателя событий к каждой ссылке, а на мыши - функцию, которая устанавливает изображение. Чтобы сделать более интересным, мы можем скопировать LazyLoad немного здесь, а также использовать свойство данных оригинал :)jQuery update image src on hover

Например: это HTML Код:

<li> 
    <a href="#" class="tip_trigger"> 
     <img class="tip" alt="300 Grams" 
       data-original="https://lh5.googleusom/-qCRpw.../300%2520.jpg" 
       src='empty.gif' width="90" height="90"/> 
     Alex 
    </a> 
</li> 

Затем добавить слушатель события :

Код:

// call for each element with the class 'tip' that's being hovered upon 
$('.tip').hover(function() 
{ 
    // retrieve the image inside this element 
    var elem = $(this).find('img'); 

    // set the 'src' to the 'data-original' value 
    elem.attr('src', elem.attr('data-original')); 
}); 

для живой демонстрации, вы можете увидеть эту страницу http://bloghutsbeta.blogspot.com/2012/04/testing-slidernav.html выше часть сценария добавляется только к первой букве ALEX в категории «A».

+5

Как это работает? – tvanfosson

+1

Живая демонстрация почти сбивает мой браузер, потому что он использует JavaScript для всех эффектов. Вы когда-нибудь слышали о переходах CSS3? –

+1

@TomvanderWoerdt Возможно, вам нужен лучший браузер/компьютер. ;) – epascarello

ответ

10

.tip уже образ, так что вы не можете найти изображение с $(this).find('img');

попробовать вместо

$('.tip_trigger').hover(function() 
{ 
    // retrieve the image inside this element 
    var elem = $(this).find('img'); 

    // set the 'src' to the 'data-original' value 
    elem.attr('src', elem.data('original')); 
}); 

использование также .data() метод вместо .attr()

+2

WOW, вы гений :) это работает, можете ли вы рассказать мне, если вы уверены в этом, что, делая это, НИКАКИЕ ИЗОБРАЖЕНИЯ не будут загружаться до тех пор, пока они не зависнут? поскольку я боюсь до смерти, если изображения все еще загружаются, даже если они не зависают – CryOfFaclon

+1

Да, единственный способ загрузить эти изображения - это запустить событие (через javascript).Поэтому я настоятельно рекомендую вам подумать о технике для обеспечения доступности, когда javascript не включен – fcalderan

+1

Ну, я не беспокоюсь об этом, так как я не хочу, чтобы посетители приходили, у кого нет javascript :) Теперь я действительно очень смущен, Если этот маленький скрипт может облегчить жизнь, ПОЧЕМУ Я ИСПОЛЬЗУЮ LAZYLOAD, нет ли такого сценария, который бы делал то же самое. Просто вместо того, чтобы навешивать его РАБОТАЕТ ДЛЯ ПРОСМОТРА. – CryOfFaclon

0

Вы привязали наведение к элементу img, поэтому вы не можете найти ребенка img. Просто используйте это или измените наведение на .tip_trigger.

$('.tip_trigger').hover(function() // That should do the trick 
{ 
    // retrieve the image inside this element 
    var elem = $(this).find('img'); 

    // set the 'src' to the 'data-original' value 
    elem.attr('src', elem.attr('data-original')); 
}); 
1

var elem = $(this).find('img'); < - вы ищет изображение, когда это изображение.

Либо замените элемент Вы придаете парения в

$('.tip_trigger').hover(function() 
{ 
    // retrieve the image inside this element 
    var elem = $(this).find('img'); 

    // set the 'src' to the 'data-original' value 
    elem.attr('src', elem.attr('data-original')); 
}); 

или держать его так, как она есть, и не искать изображения

$('.tip').hover(function() 
{ 
    var elem = $(this); 

    // set the 'src' to the 'data-original' value 
    elem.attr('src', elem.attr('data-original')); 
}); 
0

jQuery.find() ищет детей. Вы уже нашли img с вашим «.tip» -селектором.

var elem = $(this);