programing

jQuery를 사용하여 롤오버 시 이미지 소스 변경

padding 2023. 5. 28. 20:24
반응형

jQuery를 사용하여 롤오버 시 이미지 소스 변경

몇 개의 이미지와 롤오버 이미지가 있습니다.jQuery를 사용하여 onmouse move/onmouse out 이벤트가 발생할 때 롤오버 이미지를 표시/숨기고 싶습니다.모든 이미지 이름은 다음과 같이 동일한 패턴을 따릅니다.

이미지: 원본이지미:Image.gif

이미지: 롤버이지미:Imageover.gif

이미지 소스의 "over" 부분을 마우스 오버 및 마우스 아웃 이벤트에 각각 삽입하고 제거하려고 합니다.

jQuery를 사용하여 어떻게 해야 합니까?

준비 설정하기

$(function() {
    $("img")
        .mouseover(function() { 
            var src = $(this).attr("src").match(/[^\.]+/) + "over.gif";
            $(this).attr("src", src);
        })
        .mouseout(function() {
            var src = $(this).attr("src").replace("over.gif", ".gif");
            $(this).attr("src", src);
        });
});

URL 이미지 원본을 사용하는 경우:

$(function() {
        $("img")
            .mouseover(function() {
               var src = $(this).attr("src");
               var regex = /_normal.svg/gi;
               src = this.src.replace(regex,'_rollover.svg');
               $(this).attr("src", src);

            })
            .mouseout(function() {
               var src = $(this).attr("src");
               var regex = /_rollover.svg/gi;
               src = this.src.replace(regex,'_normal.svg');
               $(this).attr("src", src);

            });
    });

당신이 jQuery를 사용하는 것에 대해 묻는 것을 알지만 CSS를 사용하여 JavaScript를 해제한 브라우저에서도 동일한 효과를 얻을 수 있습니다.

#element {
    width: 100px; /* width of image */
    height: 200px; /* height of image */
    background-image: url(/path/to/image.jpg);
}

#element:hover {
    background-image: url(/path/to/other_image.jpg);
}

여기에 더 긴 설명이 있습니다.

그러나 스프라이트를 사용하는 것이 더 좋습니다: simple-css-image-rollover.

이미지가 둘 이상이고 이름 지정 규칙에 의존하지 않는 일반 이미지가 필요한 경우.

HTML

<img data-other-src="big-zebra.jpg" src="small-cat.jpg">
<img data-other-src="huge-elephant.jpg" src="white-mouse.jpg">
<img data-other-src="friendly-bear.jpg" src="penguin.jpg">

자바스크립트

$('img').bind('mouseenter mouseleave', function() {
    $(this).attr({
        src: $(this).attr('data-other-src') 
        , 'data-other-src': $(this).attr('src') 
    })
});
    /* Teaser image swap function */
    $('img.swap').hover(function () {
        this.src = '/images/signup_big_hover.png';
    }, function () {
        this.src = '/images/signup_big.png';
    });

사용자를 "이 이미지" 및 "저 이미지"로만 제한하지 않는 일반적인 솔루션은 HTML 코드 자체에 'onmouseover' 및 'onmouseout' 태그를 추가하는 것일 수 있습니다.

HTML

<img src="img1.jpg" onmouseover="swap('img2.jpg')" onmouseout="swap('img1.jpg')" />

자바스크립트

function swap(newImg){
  this.src = newImg;
}

설정에 따라 이와 같은 작업이 더 잘 수행될 수 있습니다(HTML 수정이 덜 필요함).

HTML

<img src="img1.jpg" id="ref1" />
<img src="img3.jpg" id="ref2" />
<img src="img5.jpg" id="ref3" />

JavaScript / jQuery

// Declare Arrays
  imgList = new Array();
  imgList["ref1"] = new Array();
  imgList["ref2"] = new Array();
  imgList["ref3"] = new Array();

//Set values for each mouse state
  imgList["ref1"]["out"] = "img1.jpg";
  imgList["ref1"]["over"] = "img2.jpg";
  imgList["ref2"]["out"] = "img3.jpg";
  imgList["ref2"]["over"] = "img4.jpg";
  imgList["ref3"]["out"] = "img5.jpg";
  imgList["ref3"]["over"] = "img6.jpg";

//Add the swapping functions
  $("img").mouseover(function(){
    $(this).attr("src", imgList[ $(this).attr("id") ]["over"]);
  }

  $("img").mouseout(function(){
    $(this).attr("src", imgList[ $(this).attr("id") ]["out"]);
  }
$('img.over').each(function(){
    var t=$(this);
    var src1= t.attr('src'); // initial src
    var newSrc = src1.substring(0, src1.lastIndexOf('.'));; // let's get file name without extension
    t.hover(function(){
        $(this).attr('src', newSrc+ '-over.' + /[^.]+$/.exec(src1)); //last part is for extension   
    }, function(){
        $(this).attr('src', newSrc + '.' + /[^.]+$/.exec(src1)); //removing '-over' from the name
    });
});

첫 번째 줄에서 이미지 클래스를 변경할 수 있습니다.더 많은 이미지 클래스(또는 다른 경로)가 필요한 경우 사용할 수 있습니다.

$('img.over, #container img, img.anotherOver').each(function(){

등등.

효과가 있을 거예요, 테스트 안 했어요 :)

저는 다음과 같은 위버 원 라이너를 희망했습니다.

$("img.screenshot").attr("src", $(this).replace("foo", "bar"));

만약 당신이 찾고 있는 해결책이 애니메이션 버튼이라면, 당신이 성능을 향상시키기 위해 할 수 있는 최선은 스프라이트와 CSS의 조합입니다.스프라이트는 사이트의 모든 이미지(헤더, 로고, 단추 및 사용자가 가지고 있는 모든 장식)를 포함하는 거대한 이미지입니다.각 이미지는 HTTP 요청을 사용하며, HTTP 요청이 많을수록 로드하는 데 더 많은 시간이 소요됩니다.

.buttonClass {
    width: 25px;
    height: 25px;
    background: url(Sprite.gif) -40px -500px;
}
.buttonClass:hover {
    width: 25px;
    height: 25px;
    background: url(Sprite.gif) -40px -525px;
}

0px 0px좌표는 스프라이트의 왼쪽 상단 모서리가 됩니다.

하지만 만약 당신이 Ajax 같은 것으로 사진첩을 개발하고 있다면 자바스크립트(또는 어떤 프레임워크)가 최고입니다.

재미있게 보내!

$('img').mouseover(function(){
  var newSrc = $(this).attr("src").replace("image.gif", "imageover.gif");
  $(this).attr("src", newSrc); 
});
$('img').mouseout(function(){
  var newSrc = $(this).attr("src").replace("imageover.gif", "image.gif");
  $(this).attr("src", newSrc); 
});

얼마 전에 해결책을 찾다가 아래와 유사한 스크립트를 발견했는데, 수정 후에 저를 위해 일하게 되었습니다.

두 개의 이미지를 처리합니다. 두 개의 이미지는 거의 항상 기본적으로 "오프"로 설정됩니다. 여기서 마우스는 이미지를 벗어나 있고(image-example_off.jpg), 마우스가 호잉되는 시간 동안 필요한 대체 이미지(image-example_on.jpg)가 표시되는 경우도 있습니다.

<script type="text/javascript">        
    $(document).ready(function() {        
        $("img", this).hover(swapImageIn, swapImageOut);

        function swapImageIn(e) {
            this.src = this.src.replace("_off", "_on");
        }
        function swapImageOut (e) {
            this.src = this.src.replace("_on", "_off");
        }
    });
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>JQuery</title>
<script src="jquery.js" type="text/javascript"> </script>
<style type="text/css">
    #box{
        width: 68px;
        height: 27px;
        background: url(images/home1.gif);
        cursor: pointer;
    }
</style>

<script type="text/javascript">

$(function(){

    $('#box').hover( function(){
        $('#box').css('background', 'url(images/home2.gif)');

    });
    $('#box').mouseout( function(){
        $('#box').css('background', 'url(images/home1.gif)');

    });

});
</script>
</head>

<body>
<div id="box" onclick="location.href='index.php';"></div>
</body>
</html>

저는 다음과 같은 코드를 만들었습니다 :)

예를 들어 _hover라는 이름의 두 번째 파일이 있을 때만 작동합니다.facebook.png그리고.facebook_hover.png

$('#social').find('a').hover(function() {
    var target = $(this).find('img').attr('src');
    //console.log(target);
    var newTarg = target.replace('.png', '_hover.png');
    $(this).find('img').attr("src", newTarg);
}, function() {
    var target = $(this).find('img').attr('src');
    var newTarg = target.replace('_hover.png', '.png');
    $(this).find('img').attr("src", newTarg);
});
<img src="img1.jpg" data-swap="img2.jpg"/>



img = {

 init: function() {
  $('img').on('mouseover', img.swap);
  $('img').on('mouseover', img.swap);
 }, 

 swap: function() {
  var tmp = $(this).data('swap');
  $(this).attr('data-swap', $(this).attr('src'));
  $(this).attr('str', tmp);
 }
}

img.init();

Richard Ayotte의 코드에서 조정됨 - ul/li 목록(여기서 래퍼 div 클래스를 통해 발견됨)에서 img를 대상으로 지정하려면 다음과 같은 것이 있습니다.

$('div.navlist li').bind('mouseenter mouseleave', function() {    
    $(this).find('img').attr({ src: $(this).find('img').attr('data-alt-src'), 
    'data-alt-src':$(this).find('img').attr('src') }
); 

언급URL : https://stackoverflow.com/questions/540349/change-the-image-source-on-rollover-using-jquery

반응형