Проблема с JQuery swapImage (); - PullRequest
2 голосов
/ 20 мая 2010

~ На моей странице статей (http://www.adrtimes.squarespace.com/articles) каждая запись начинается с изображения, которое изменяется при наведении курсора. Это работает нормально.

Однако на моей домашней странице (http://www.adrtimes.squarespace.com), я загружаю 2 самые последние статьи, которые не относятся к категории видео, и 2 самые последние статьи, которые помечены как видео. Я использую jQuery load () извлечь содержимое со страницы статей. С этим все работает нормально, за исключением ролловеров swapImage на домашней странице. Я попытался включить функцию swapImage в качестве обратных вызовов, но только одна группа или другая будет правильно переключаться, а не обе группы контента. я не уверен, в чем проблема !!

Вот код:

<script type="text/javascript">
<!--

$(function(){ 

$.swapImage(".swapImage");

/* Homepage */
// load recent articles
$("#LoadRecentArticles").load("/articles/ .list-journal-entry-wrapper .journal-entry-wrapper:not(.category-video)", function(){ 
  //callback...
  $("#LoadRecentArticles .journal-entry-wrapper").wrapAll('<div class="list-journal-entry-wrapper" />');
  $("#LoadRecentArticles .journal-entry-wrapper:gt(1)").remove();
  // modify Read More tag
  $('.journal-read-more-tag a:contains(Click to read more ...)').each(function(){ 
      var str = $(this).html(); 
      $(this).html(str.replace('Click to read more ...','Continue reading—')); 
  });
  $.swapImage(".swapImage"); 
});

// load recent videos
$("#LoadRecentVideos").load("/articles/category/video .list-journal-entry-wrapper", function(){ 
  //callback...
  $("#LoadRecentVideos .journal-entry-wrapper:gt(1)").remove();
  $('<div class="VideoTag">—video</div>').insertBefore("#LoadRecentVideos .category-video .body img");
  // modify Read More tag
  $('.journal-read-more-tag a:contains(Click to read more ...)').each(function(){ 
      var str = $(this).html(); 
      $(this).html(str.replace('Click to read more ...','Continue reading—')); 
  });
  $.swapImage(".swapImage");
}); 


}); 
-->
</script>

А вот пример HTML-кода для изображений в статье:

<a href="/articles/2010/5/6/article-title-goes-here.html"><img class="swapImage {src: '/storage/post-images/Sample2_color.jpg'}" src="/storage/post-images/Sample2_bw.jpg" /></a>

Ответы [ 2 ]

1 голос
/ 20 мая 2010

Приношу свои извинения, если это не то, что вы хотите, но на самом деле довольно просто сделать свой собственный обмен.

Я не знаю точно, каким должен быть ваш селектор, но при этом вы получите src изображения, когда вы mouseenter, и измените его с _bw.jpg на _color.jpg, и обратно, когда вы mouseleave.

HTML:

<img class='imageToSwap' src="http://adrtimes.squarespace.com/storage/post-images/Sample2_bw.jpg">

JQuery:

    $('.imageToSwap').hover(function() {
        var $th = $(this);
        var src = $(this).attr('src');
        var newSrc = src.replace(/_bw.jpg/, '_color.jpg');
        $th.attr('src', newSrc)
    },
    function() {
        var $th = $(this);
        var src = $(this).attr('src');
        var newSrc = src.replace(/_color.jpg/, '_bw.jpg');
        $th.attr('src', newSrc)
    });

EDIT:

версия с использованием live ()

Надеюсь, это поможет вам. Функция jQuery live() будет управлять событиями для элементов, динамически добавляемых в DOM после загрузки страницы.

Дайте ему попытку, и дайте мне знать, как это получается.

$('.imageToSwap').live('mouseover mouseout', function(event) {
    var $th = $(this);
    var src = $(this).attr('src');
    if (event.type == 'mouseover') {
      var newSrc = src.replace(/_bw.jpg/, '_color.jpg');
      $th.attr('src', newSrc)
    } else {
      var newSrc = src.replace(/_color.jpg/, '_bw.jpg');
      $th.attr('src', newSrc)
    }
});
0 голосов
/ 20 мая 2010

Появляется, если вы запускаете $.swapimage() во второй раз, отключается. Так что в обратном вызове попробуйте это:

$.swapImage("#LoadRecentVideos .swapImage");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...