JQuery, изменение изображения при наведении - программирование
Подтвердить что ты не робот

JQuery, изменение изображения при наведении

Хорошо, поэтому у меня есть динамически сгенерированные изображения через PHP, поэтому не обязательно результат одного и того же изображения. И я провел последние четыре часа, просматривая Интернет и пробовав бесчисленные вещи с помощью jQuery и/или CSS, и я придумал следующее, что работает.

    <a href="build.php?x=1875&y=2020"><img style='background:url(images/tile_4.jpg)' src='images/tile_4.jpg' onmouseover="this.src='images/Market.png'" onmouseout="this.src='images/tile_4.jpg'" /></a>
<a href="build.php?x=1876&y=2020"><img style='background:url(images/tile_4.jpg)' src='images/tile_4.jpg' onmouseover="this.src='images/Market.png'" onmouseout="this.src='images/tile_4.jpg'" /></a>
<a href="build.php?x=1877&y=2020"><img style='background:url(images/tile_4.jpg)' src='images/tile_4.jpg' onmouseover="this.src='images/Market.png'" onmouseout="this.src='images/tile_4.jpg'" /></a>
<a href="build.php?x=1878&y=2020"><img style='background:url(images/tile_4.jpg)' src='images/tile_4.jpg' onmouseover="this.src='images/Market.png'" onmouseout="this.src='images/tile_4.jpg'" /></a>
<a href="build.php?x=1879&y=2020"><img style='background:url(images/tile_4.jpg)' src='images/tile_4.jpg' onmouseover="this.src='images/Market.png'" onmouseout="this.src='images/tile_4.jpg'" /></a>

              

Market.png имеет прозрачный фон.

Теперь это работает. При наведении курсора мыши он отображает Market.png с прозрачной частью фона, являющейся tile_4.jpg, а outoutout - tile_4.jpg.

Что я хочу знать: есть ли способ выполнить то же самое, что и выше, с помощью jQuery или CSS? Я не понял это, и я потратил много времени, но я предпочел бы сделать что-то еще, если это вообще возможно, с тех пор, как было сказано выше (с массивным повторением, этот формат повторяется в настоящее время около 100 раз, но у меня есть планы чтобы расширить его до более чем 1000 раз) станет полосой пропускания.

4b9b3361

Ответ 1

Вы можете добавить класс к каждому из ваших <img /> элементов, таких как "xyz" (выберите лучшее имя), а затем воспользуйтесь hover(). Учитывая, что ваши изображения являются динамическими, вы можете визуализировать разметку изображения с дополнительным атрибутом данных, чтобы служить в качестве "альтернативного" или "наводящего" источника изображения. В конце вы можете сделать что-то вроде этого:

<img class="xyz" data-alt-src="/images/Market.png" src="/images/tile_4.png" />
<img class="xyz" data-alt-src="/images/Something.png" src="/images/tile_5.png" />

Затем, чтобы применить функциональные возможности переключения для каждого изображения, вы можете написать небольшую функцию, которая меняет атрибут src и атрибут data-alt-src при наведении/зависании:

var sourceSwap = function () {
    var $this = $(this);
    var newSource = $this.data('alt-src');
    $this.data('alt-src', $this.attr('src'));
    $this.attr('src', newSource);
}

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

$(function () {
    $('img.xyz').hover(sourceSwap, sourceSwap);
});

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

$(function() {
    $('img[data-alt-src]').each(function() { 
        new Image().src = $(this).data('alt-src'); 
    }).hover(sourceSwap, sourceSwap); 
});

Ответ 2

JQuery

Вы можете использовать события mouseover и mouseout:

$("img").on({
 "mouseover" : function() {
    this.src = 'images/Market.png';
  },
  "mouseout" : function() {
    this.src='images/tile_4.jpg';
  }
});

Таким образом, вы можете вынуть атрибуты onmouseout и onmouseover из HTML и сделать свой код аккуратным.

CSS

Однако самый простой способ - использовать CSS:

img {
  background-image: url('images/tile_4.jpg');
}

img:hover {
  background-image: url('images/Market.png');
}

Ответ 3

Конечно, с jQuery это легко.

$('img').hover(function(){
    $(this).attr('src','images/Market.png');
},function(){
     $(this).attr('src','images/tile_4.jpg'); 
});