JQuery переключатель для изменения изображения - PullRequest
11 голосов
/ 30 июня 2009

У меня есть список div с изображениями в них:

<div class="wizard-img"><%= image_tag("sources/pix/nyt.png") %></div>
<div class="wizard-img"><%= image_tag("sources/pix/theguardian.png") %></div>

Когда пользователь щелкает элемент div, я бы хотел, чтобы оно изменило изображение на x-on.png, при повторном нажатии оно изменится на x-off.png, а при третьем щелчке должно вернуться в x.png.

Возможно ли это сделать без указания вручную jQuery для каждого изменения изображения? Могу ли я пройти через div и найти имя изображения и просто добавить -off / -on к изображению?

Спасибо!

Ответы [ 8 ]

22 голосов
/ 30 июня 2009

Возможно CSS-спрайты будет работать для вас?

Это избавило бы вас от загрузки отдельного изображения каждый раз, когда вы нажимаете на изображение (кнопка?), И вы могли бы решить свою проблему, добавив и удалив класс css, например ::

$('.wizard-img').click(
    function() {
        if ($(this).hasClass('on')) {
            $(this).removeClass('on').addClass('off');
        } else if ($(this).hasClass('off')) {
            $(this).removeClass('off');
        } else {
            $(this).addClass('on');
        }
    }
);
10 голосов
/ 30 июня 2009

http://docs.jquery.com/Events/toggle

$(".wizard-img").toggle(
  function () {
    $(this).find("img").attr({src:"x-on.png"});
  },
  function () {
    $(this).find("img").attr({src:"x-off.png"});
  },
  function () {
    $(this).find("img").attr({src:"x.png"});
  }
);
3 голосов
/ 30 июня 2009

CSS-спрайты действительно были бы способом сделать это, но для полноты, вот еще один вариант.

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

$('.wizard-img').click(function() {
    var $img = $(this).find('img') ,
        src = $img.attr('src') ,
        onCheck = /\-on\.jpg$/ ,
        offCheck = /\-off\.jpg$/ ,
        normal = /\.jpg$/
    ;

    if(src.match(onCheck)) {
        $img.attr('src', src.replace(onCheck, '-off.jpg'));
    } else if (src.match(offCheck)) {
        $img.attr('src', src.replace(offCheck, '.jpg'));
    } else {
        $img.attr('src', src.replace(normal, '-on.jpg'));
    }
});
1 голос
/ 19 апреля 2011

Я нашел этот плагин полезным, чтобы сделать что-то похожее на то, что вы просили:

http://www.malsup.com/jquery/cycle/

1 голос
/ 30 июня 2009

FWIW, я предлагаю вам сделать это с помощью простого CSS и background-image. Мне кажется, что это не совсем нормальные изображения, а скорее «кнопки».

0 голосов
/ 09 июля 2013

Я создал плагин swapimg: http://xuannd.wordpress.com/2010/12/03/jquery-swap-images-easy/
используйте: $ ('. swapimg'). swapimg ();
opt: $ ('. swapimg'). swapimg ({imgOn: "_ on.png", imgOff: ". png"});

(function($){
    $.fn.swapimg=function(options){
        var defaults={imgOn:"_on.gif",imgOff:".gif"};
        var options=$.extend(defaults,options);
        var $isOn=false;
        var $obj_index=-1;
        return this.each(
            function(){
                if($(this).is('img')){
                    obj=$(this)
                }
                else{
                    obj=$(this).find('img')
                }
                obj.hover(
                    function(){
                        if(this.src.indexOf('_on')==-1){
                            $isOn=false
                        }else{
                            $isOn=true
                        }

                        if($isOn==false){
                            this.src=this.src.replace(options.imgOff,options.imgOn)
                        }
                    },
                    function(){
                        if($isOn==false){
                            this.src=this.src.replace(options.imgOn,options.imgOff)
                        }
                    }
                )
            }
        )
    }
})(jQuery);
0 голосов
/ 05 января 2013
$("img").hover(
    function() { this.src = this.src.replace("_Off", "_On");},
    function() { this.src = this.src.replace("_On", "_Off");
});

http://kaidez.com/tutorial-simple-effective-jquery-image-rollover/

0 голосов
/ 30 июня 2009
$('.wizard-img').click(function() {
    var img = $(this).find('img');
    var src = img.attr('src');

    //image is neither on nor off, so change src to on and return
    if(src != 'x-on.png' && src != 'x-off.png') {
        img.attr('src','x-on.png');
        return false;
    }

    //image is on, so change src to off and return
    if(src == 'x-on.png') {
        img.attr('src','x-off.png');
        return false;    
    }

    //image is off, so change src to x and return
    if(src == 'x-off.png') {
        img.attr('src','x.png');
        return false;    
    }
});
...