Добавление slideUp/slideDown в функцию наведения

Мне помогли с кодом, чтобы навести курсор на изображение и чтобы другое изображение появлялось поверх оригинала.

$('.hoverpic').hover(function () {
    $(this).attr('src',$(this).attr('src').replace('.jpg','_hover.jpg'));
}, function () {
    $(this).attr('src',$(this).attr('src').replace('_hover.jpg','.jpg'));
});

Это работает хорошо, но я бы хотел, чтобы второе изображение скользило вверх при наведении, а затем скользило вниз при выходе. Я очень новичок в этом и стараюсь, как могу, не могу заставить его работать. Очень упрощенная помощь будет оценена


person briannie    schedule 09.09.2013    source источник
comment
Я думаю, что это будет более сложным. Я не думаю, что вы можете просто добавить анимацию, потому что у вас есть только один элемент изображения. Простейшим решением может быть размещение двух изображений в div с помощью overflow:hidden, изображение при наведении за пределами видимой области div и использование animate для перемещения его в поле зрения при наведении.   -  person Jason P    schedule 10.09.2013
comment
Спасибо, что посмотрели @jason. Примеры можно увидеть по ссылке, где есть два изображения для каждого случая. Если бы вы могли привести пример кода, это было бы признательно.   -  person briannie    schedule 10.09.2013


Ответы (2)


Этот метод предполагает, что изображения имеют одинаковую ширину и высоту и фиксированную ширину/высоту.

Вы объявляете оба изображения (обычное и при наведении) в html, чтобы начать с «содержащего» div, придавая этому контейнеру ту же ширину и высоту, что и изображения (в моем примере я использовал 300 пикселей на 200 пикселей). Изображение при наведении сначала скрыто за пределами фрейма (используя абсолютное позиционирование на изображениях и overflow: hidden в контейнере div с помощью CSS), но оно скользит при наведении.

См. демо здесь: http://jsfiddle.net/2JSxK/7/

Просто замените HTML на:

<div id="image-container">
    <img class="pic" src="YOURIMAGENAME.jpg" />
    <img class="hoverpic" src="YOURIMAGENAME_hover.jpg" />
</div>

И CSS с шириной и высотой вашего изображения:

#image-container {
    position: relative;
    width: 300px; /* put your image width in pixels here */
    height: 200px; /* put your image height in pixels here */
    overflow: hidden;
    }

#image-container img.pic {
    position: absolute;
    top: 0;
    left: 0;
    }

#image-container img.hoverpic {
    position: absolute;
    top: 200px; /* put your image height in pixels here */
    left: 0;
    }

То же самое в jQuery, просто дважды замените 200 высотой вашего изображения в пикселях:

$(document).ready(function() {
    $('.pic').hover( 
        function () {
            $('.hoverpic').animate({ "top": "-=200px" }, "slow" );
        },
        function () {
            $('.hoverpic').animate({ "top": "+=200px" }, "slow" );
        }
     );
 });

Вы также можете изменить скорость выше "slow" на "fast" или число в миллисекундах, например. 1000 будет вторым. Очевидно, зависит от того, насколько быстро вы хотите, чтобы скольжение произошло!

Исправлено: эффект при наведении теперь связан с контейнером, а не с отдельным изображением, поэтому изображение при наведении не исчезает при перемещении мыши.

См. демонстрацию здесь: http://jsfiddle.net/2JSxK/16/.

Новый jQuery:

$(document).ready(function() {
    $('#image-container').hover( 
        function () {
            $('.hoverpic').animate({ "top": "-=200px" }, "slow" );
        },
        function () {
            $('.hoverpic').animate({ "top": "+=200px" }, "slow" );
        }
     );
 });

Отредактировано: чтобы учесть несколько таких анимаций, происходящих на странице, я немного изменил структуру/написание (см. комментарии ниже).

Последняя демонстрация здесь: http://jsfiddle.net/2JSxK/17/

person Sarah    schedule 09.09.2013
comment
Это тот же/похожий метод, который Джейсон П. упоминает в своем комментарии, я написал его до того, как увидел его комментарий! - person Sarah; 10.09.2013
comment
Сара, это очень просто изложено и именно та информация, которая мне нужна на моем этапе понимания jQuery. В настоящее время, хотя hoverpic в вашем примере продолжает скользить вверх и вниз, и я хочу, чтобы он оставался на месте, пока мышь зависает над изображением, чтобы посетитель мог читать содержимое. Какая настройка необходима, чтобы это произошло, пожалуйста? - person briannie; 10.09.2013
comment
Я думаю, что исправил это сейчас. Анимация при наведении теперь связана с контейнером, а не с обычным состоянием изображения. jsfiddle.net/2JSxK/16 - person Sarah; 10.09.2013
comment
Сара, это волшебно. Большое спасибо за отличный результат. Я жадно читаю учебные материалы по jQuery, чтобы улучшить и расширить свои знания. - person briannie; 11.09.2013
comment
Это снова пришло мне в голову сегодня, и я понял, что, вероятно, мог бы написать это лучше, учитывая наличие более одного экземпляра этого на странице. Подумал, что это может помочь вам или кому-то еще. HTML использует image-container в качестве класса, а не идентификатора, а jQuery нацелен только на изображения внутри текущего контейнера. То, как я написал это до этого, не сработало бы, если бы это происходило более одного раза на странице. См. демонстрацию: jsfiddle.net/2JSxK/17 - person Sarah; 12.09.2013

Для этого вам понадобится slideToggle: http://api.jquery.com/slideToggle/

<div id="container">
<img id="img1" src="http://images2.wikia.nocookie.net/__cb20120626230828/watchdogs/images/6/6c/IE-icon.png" alt="" />
<img id="img2" src="http://upload.wikimedia.org/wikipedia/commons/8/87/Google_Chrome_icon_%282011%29.png" alt="" style="display:none"/>
</div>

$('#container').hover(function() {
    $('#img1').slideToggle(500, 'linear');
    $('#img2').slideToggle(500, 'linear');
});

Проверьте эту скрипту http://jsfiddle.net/suneeel/SRNJb/1/.

person Sunil    schedule 09.09.2013
comment
Сунил, спасибо, что нашли время, чтобы посмотреть на это для меня, но ваше решение не совсем достигает эффекта, который я искал, а именно, чтобы второе изображение скользило вверх по первому изображению и оставалось на месте, пока мышь зависает. тем самым позволяя посетителю прочитать содержание второго изображения. Затем второе изображение скользит вниз, когда мышь удаляется. - person briannie; 10.09.2013