Как заставить jQuery «сбросить» себя после события? Проблема с заполнением IE8 и 9?

#jquery #background #refresh #internet-explorer-9 #animated

#jquery #предыстория #обновить #internet-explorer-9 #анимированный

Вопрос:

Я не очень разбираюсь в jQuery, может быть, это что-то простое… Я работаю над этим сайтом:

http://www.adaptdesign.com/misc/jtppwg/venuedirectory.html

Щелчок по ссылке на панели справа, например, The Atlantic Hotel, St Brelade’s Bay Hotel или The Club Hotel amp; Spa, прокручивает страницу вниз и загорается соответствующий DIV, без проблем. Это делается с помощью следующего jQuery:

 <script>
$(document).ready(function() {
    $("a.anchorHL").anchorAnimate()
});

$(document).ready(function() {
$("a.anchorHL").anchorAnimate().click(function() {
$('.venuedivhighlight').removeClass('venuedivhighlight');

$('a[name=' $(this).attr('href').substring(1) ']').next().addClass('venuedivhighlight');

});
});

</script>
  

CSS для venuedivhighlight выглядит следующим образом:

 .venuedivhighlight {
background-image: url(images/anim-bg-fade.gif);
}   
  

Желтое затухание выполняется с помощью анимированного GIF. Я знаю, что jQuery может добиться этого анимированного эффекта, но я не смог заставить его работать, поэтому, чтобы сэкономить время, я использовал это как обходной путь.

В Firefox это работает отлично, но во всех других браузерах выбранное место будет выделено один раз, а затем при последующих щелчках и прокрутках анимированный фон не будет перезагружаться. Я заметил, что при настройке приведенного выше CSS на красный фон его можно увидеть во всех браузерах (в FF красный появляется после анимации, а в других браузерах красный появляется сразу).

Есть идеи о том, как я могу заставить GIF обновляться при каждом нажатии?

Кроме того, мне бы хотелось немного больше отступов в желтом поле, т. Е. Больше места вокруг текста при выделении. Это нормально в большинстве браузеров, но при добавлении даже нескольких пикселей заполнения все это отображается как полный беспорядок в IE8 и 9 (в более ранних версиях, к сожалению, это выглядит идеально). Есть ли новый обходной путь проблемы с заполнением IE, о котором кто-нибудь знает?

Заранее большое спасибо.

Крис

Адаптировать дизайн

Ответ №1:

Чтобы ответить на ваш первый вопрос, я думаю, что лучше всего придерживаться вашего первоначального плана и анимировать цвет с помощью jQuery. Проблема, с которой вы, скорее всего, столкнулись, заключается в том, что jQuery не может сделать это из коробки. Чтобы анимировать цвет, вам нужна библиотека эффектов из jQueryUI. Ознакомьтесь с их документами здесь: http://jqueryui.com/demos/animate /

Итак, сначала вы загрузите пользовательский пакет jQueryUI, который включает библиотеку эффектов, и добавьте его на страницу, затем попробуйте что-то вроде этого:

 $(function() {
    $("a.anchorHL").anchorAnimate().click(function() {
        $('.venuedivhighlight').removeClass('venuedivhighlight');
        var $el = $('a[name='   $(this).attr('href').substring(1)   ']').next();

        // No need to set the class if the sole purpose is just to animate it later...
        $el.css({ backgroundColor: '#ff0000' });

        // Here's the magic
        setTimeout(function() {
            $el.animate({ backgroundColor: '#fff' }, 3000);
        }, 3000);
    });
});
  

Чтобы ответить на вторую часть вашего вопроса, если вы хотите добавить отступ, скажем, 5 пикселей, по краю вашего .ad-basic-cell divs, вам нужно будет вычесть не менее 10 пикселей из ширины, чтобы сделать это:

 .ad-basic-cell {
    width: 205px;
    float: left;
    padding: 5px;
}
  

Комментарии:

1. Спасибо за ваш ответ, Джейсон, я скачал jQueryUI, включая все 31 компонент, в качестве теста, сослался на JS в моем HTML, но анимация не происходит. Прокрутка перемещается вниз к окну, и его фон красный (как я вижу в вашем коде). Я попытался переименовать $ el.animate в $ el.highlight поскольку «highlight» был одним из компонентов для jQueryUI, а «animate» нигде не найден в списке компонентов, но безрезультатно … есть идеи?

2. Что касается проблемы с заполнением, я точно знаю, что вы говорите, это совершенно логично. К сожалению, IE9, похоже, выбросил логику из окна. Взгляните на это, я не могу понять, почему это будет действовать таким образом, заполнение обеспечивается уменьшением ширины, а увеличение высоты контейнера не помогает (в любом случае он достаточно высокий), поэтому я в тупике… У меня такое чувство, что мне нужно будет либо перекодировать с нуля, либо просто обойтись узкой областью выделения за текстом … adaptdesign.com/misc/iepaddingissue.jpg

3. Причина, по которой материал jQueryUI не работает, заключается в том, что теперь у вас на странице есть 2 версии jQuery. Проверьте строки 10-14 вашего источника страницы. Вы включаете jQuery 1.6.x, затем jQueryUI, затем включаете jQuery 1.3.x. Удалите второе объявление jQuery и поверните его.

4. Кроме того, что касается IE9, можете ли вы нажать f12, чтобы вызвать инструменты разработки. Дайте мне знать, каковы настройки рендеринга. Я не могу воспроизвести вашу проблему. Для меня в IE9 все в порядке.

5. Хороший момент, я этого не понял. Я попробую в понедельник утром на работе и свяжусь с вами, что касается проблемы с IE9, IENetrenderer отобразил ее как беспорядок, как и компьютер, который у нас есть в студии. Я сообщу вам настройки в понедельник. Еще раз спасибо.