jQuery- 모든 것을 숨기고/이 div 이미지를 더 일반적인 표시
문제
다음 jQuery 코드가 있습니다.
기본적으로 나는 여러 개의 중첩 된 div와 겹친 div의 오른쪽에 링크 목록이 있습니다. 링크 위로 호버링 할 때 링크가 할당 된 Div가 사라집니다.
다음과 같은 코드가 있으며 작동하지만 (기본 Windows의 샘플 사진을 사용합니다) 누군가가 최적화하거나 일반화하는 방법을 생각할 수 있다면 감사합니다.
<html>
<script type="text/javascript">
$(document).ready(function() {
$("#trigger1").mouseover(function() {
$(".contentdiv").addClass("inactive");
$("#divsunset").removeClass("inactive");
$(".inactive").fadeOut(500);
$("#divsunset").fadeIn(500);
});
$("#trigger2").mouseover(function() {
$(".contentdiv").addClass("inactive");
$("#divwinter").removeClass("inactive");
$(".inactive").fadeOut(500);
$("#divwinter").fadeIn(500);
});
$("#trigger3").mouseover(function() {
$(".contentdiv").addClass("inactive");
$("#divbh").removeClass("inactive");
$(".inactive").fadeOut(500);
$("#divbh").fadeIn(500);
});
$("#trigger4").mouseover(function() {
$(".contentdiv").addClass("inactive");
$("#divwl").removeClass("inactive");
$(".inactive").fadeOut(500);
$("#divwl").fadeIn(500);
});
});
</script>
<style>
#divsunset
{
position: absolute;
top: 5px;
left: 5px;
}
#divwinter
{
position: absolute;
top: 5px;
left: 5px;
}
#divbh
{
position: absolute;
top: 5px;
left: 5px;
}
#divwl
{
position: absolute;
top: 5px;
left: 5px;
}
#links
{
position: absolute;
top: 800px;
left: 700px;
}
.inactive
{
}
</style>
감사합니다 Matt, TM 및 Kron, 귀하의 답변이 정말 도움이되었습니다.
나는 내가 완전히 설명했다고 생각하지 않지만 TM은 내가 찾고 있던 대답을 제공했다.
나는 건조하고 싶었고 TM이 제공 한 코드는 이번에는 마크 업, jQuery 코드를 변경할 필요가 없기 때문에 가장 도움이되었습니다.
다시, 감사합니다. 내가 얼마나 빨리 답을 얻었는지 놀랍습니다. 앞으로도 힘써주세요.
해결책
가장 먼저 할 수있는 일은 깨끗하게 만들기 위해 유사한 전화를보다 일반적인 것으로 바꾸는 것입니다.
(참고 :이 모든 것이 내부에 있다고 가정합니다. document.ready()
)
$('#trigger1').data('target', '#divsunset');
$('#trigger2').data('target', '#divwinter');
$('#trigger3').data('target', '#divbh');
$('#trigger4').data('target', '#divwl');
$('#trigger1,#trigger2,#trigger3,#trigger4').mouseover(function() {
var selector = $(this).data('target');
$(".contentdiv").addClass("inactive");
$(selector).removeClass("inactive");
$(".inactive").fadeOut(500);
$(selector).fadeIn(500);
});
쉼표로 변형 된 선택기를 사용하는 것은 jQuery로 건조에 순종하는 좋은 방법입니다.
나는 사용한다 $(element).data()
요소에 대한 일부 데이터를 설정하고 검색하려면이 경우 선택기는 적절한 요소를 업데이트하는 데 사용되었습니다.
또한 더 깨끗한 시각적 모양을 위해서만 $(document).ready()
, 당신이 그것을 선호한다면. 그것은 똑같은 것입니다. 단지 다른 구문입니다.
$(function() {
//DOM ready
};
다른 팁
나는 몇 달 전에 비슷한 질문에 대답했다 jQuery 스와핑 요소 그것이 도움이된다면.
매트
clillification, 내가 {id : '1'}가있는 곳에 당신은 당신이 보여주고 싶은 div의 ID를 교체하고 다른 div에서 일반 클래스 이름을 만들어 숨겨야합니다.
Mulitple 클래스를 요소에 적용 할 수 있음을 기억하십시오.
<Div class="name1 name2"></div>
원래 DIV에 스타일 규칙이 첨부 된 경우 도움이 될 수 있습니다.
좋지만 할당 한 ID에 대한보다 일반적인 접근 방식이 필요합니다.
가장 빠른 해결책은 부모의 div "#wrapped"아래에 사라지는 겹친 div를 마무리하는 것입니다. 모든 링크를 가져 와서 CSS 클래스 '트리거 이름'을 할당하는 '이름'이 '일몰', '겨울'등을 할당하십시오. 그러면 다음과 같은 것을 할 수 있습니다.
$(document).ready(function() {
$(".trigger").mouseover(function() {
$(".contentdiv").addClass("inactive");
$("#wrapper ." + $(this).attr('class')[1]).removeClass("inactive");
$(".inactive").fadeOut(500);
$("#wrapper ." + $(this).attr('class')[1]).fadeIn(500);
});
가능한 최고의 솔루션은 아니지만 아이디어를 제공하기를 바랍니다.