2009-10-29 2 views
-1

일반적인 '색상 확인 플래시'기능을 만들면 객체의 배경을 녹색으로 깜박이고 기존 색상이 무엇이든간에 사라집니다. . jQuery는 요소의 색상을 grabing합니다. PRE : hover

그래서 내가() 클릭이 메소드를 호출 해 두 가지 요소가있을 수 있습니다 : 내가 처음 하나를 클릭하면

li background-color: red 
li background-color: black 

를, 그것은 녹색에서 빨간색으로 사라질 것입니다. 첫 번째 버튼을 클릭하면 녹색에서 검은 색으로 희미 해집니다.

JQuery와 논리 :

클릭 이벤트 :

listItem.each(function(){confirmFlash($(this),$(this).css("backgroundColor"))}); 

함수는 :

function confirmFlash(objectToFlash,backgroundColor){ 
    objectToFlash.css("backgroundColor","#84da9a").animate({opacity: 1}, 1000).animate({backgroundColor: backgroundColor}, 500); 
} 

이 잘 작동합니다. 캐치 : 나는 또한 LI의 위를 줄 경우

가 : 가져가 상태 배경색 : 내 페이드 그런

li background-color: red 
li background-color: black 
li:hover background-color: purple 

모든 보라색, 녹색에서 이동합니다. 이는 LI를 클릭 할 때 배경이 실제로 보라색이기 때문에 의미가 있습니다.

'비 호버 (non-hover)'CSS 클래스의 배경 색상을 잡는 좋은 방법이 있습니까?

다시 말하면, 가상 클래스보다는 LI의 현재 클래스에 할당 된 배경색을 잡고 싶습니다.

또는 CSS가 아닌 마우스를 구현하는 솔루션은 jQuery를 통해서도 가능합니까?

+0

더 생각해 보면 jQuery가 엘리먼트와 상호 작용할 때 이미 실제로 이것을 생각할 필요가 없다고 생각합니다. 이미 엘리먼트 위에 마우스를 가져 가면 배경색을 지나치게 오버 라이딩됩니다. : CSS 파일에서 클래스를 가리 키십시오. 대신 각 요소에 .hover 이벤트를 적용하고 CSS 대신 jQuery를 통해 처리해야한다고 생각합니다. –

답변

0

색상을 직접 애니메이션으로 적용 할 수있는 색상 플러그인을 설치해야합니다. 불투명도에 애니메이션을 적용하면 텍스트와 배경이 모두 애니메이션으로 표시되기 때문에 문제가 발생합니다.

참조 : http://plugins.jquery.com/project/color

+0

해당 플러그인이하는 일에 대해 혼란 스럽습니다. $ .animate는 배경색이있는 jQuery에서 제대로 작동하는 것 같습니다. 내 문제는 애니메이션을 적용 할 적절한 색상을 알아 내야한다는 것입니다. –

0

당신은 당신이 confirmFlash 기능이 같은 바인딩 시점에서 변수의 초기 배경 색상을 저장할 수 ...

jQuery.fn.confirmFlash = function(config){ 
    this.each(function() { 
     var elem = jQuery(this); 

     // Store the starting background color 
     var startBg = elem.css("backgroundColor"); 

     // When the element is clicked 
     elem.click(function() { 
      // Set the start background color 
      elem.css("backgroundColor", startBg); 
      // Animate to the "flash" color 
      elem.animate({backgroundColor: config.backgroundColor}, {duration: 1000, complete: function() { 
       // Animate back to the start background color 
       elem.animate({backgroundColor: startBg}, {duration: 1000}); 
      }}); 
     }); 
    }); 
}; 

그리고 다음과 같이 사용할 수 있습니다 이 ...

$("li").confirmFlash({backgroundColor: "#84da9a"}); 
+0

좋은 생각입니다. 아아, 그 색상도 * 곧 * 잡을 것입니다. 또한 클릭 할 때 두 색상을 바꿔 치기도합니다. LI는 jQuery를 통해 클래스를 변경하면 색상 A와 색상 B 사이를 전환합니다. 둘 다 : 호버에 의해 극복됩니다. 하지만 당신은 지금 내 생각에 ... 흠 .... –

0

다음은 내가 생각해 낸 것입니다. CSS에서 hover 클래스를 생략하고 a.그때 추가하는 것이 가져 또는 JQuery와 통해 제거 : 클릭 이벤트에 트리거 기능에,

function createToggleList(){ 
    // create mouseovers/outs 
    $("ul.toggleList li").mouseover(function(){ 
     $(this).addClass("hover"); 
    }); 
    $("ul.toggleList li").mouseout(function(){ 
     $(this).removeClass("hover"); 
    });  
    // attach the click event 
    $("ul.toggleList li").click(function(){toggleToggleListItem($(this))}) 
}; 

다음에, 이었다 내가 띄운 클래스를 제거, 그래서 나는 그 배경을 잡을 수 마우스를하기 전에 :

function confirmFlash(objectToFlash,backgroundColor){ 
    objectToFlash.css("backgroundColor","#84da9a").animate({opacity: 1}, 1000).animate({backgroundColor: backgroundColor}, 500, function(){ 
     objectToFlash.removeAttr("style"); 
    }); 
} 

주 내가 ANIM 후 STYLE 속성을 제거해야합니다 :

function toggleToggleListItem(listItem) { 
    listItem.removeClass("hover"); 
    confirmFlash(listItem,listItem.css("backgroundColor")); 
}; 

그리고 여기에 플래시를 생성하는 기능입니다 ating. 애니메이션을 통해 생성 된 새로운 인라인 스타일이 아닌 CSS 파일에서 항목을 다시 상속 받기를 원합니다.

그 것이 작동합니다. 아휴!

+0

어. 너무 일찍 말했어. jQuery가 애니메이트 할 때 인라인 스타일을 추가한다는 사실은 계속해서 다루고 있습니다. 나는 CSS에서 중요한 배경을 사용하면 over-raidden으로 인라인 스타일로 오버 라이딩되는 CSS 사이의 충돌로 끝납니다. 그래서 하나는 항상 다른 하나를 트럼프하고 있습니다. 결국 jQuery만으로 모든 색상 전환과 애니메이션 작업을 처리하고 CSS에서이 설정 중 하나를 건너 뛰도록해야 할 것입니다. –

+0

아하! 이제 최종 답이 위에 있습니다. 마지막 수정은 CSS에서 중요한 플래그를 제거하는 것이 었습니다. 그런 다음 jquery를 통해 애니메이션을 적용한 후 애니메이션을 통해 방금 만든 요소에서 STYLE 특성을 제거하여 모든 상속을 다시 CSS 파일로 반환합니다. –