2014-01-22 37 views
0

所以我有一個段最初有一個ID: #main我如何使這種懸停效果(懸停1按鈕來更改元素的ID,然後當它展開它變回它的原始ID?)[jquery,css3]

和我有一個按鈕:#Button1的

所以,我希望發生的是,當我在周圍徘徊按鈕,我想更改段落的ID爲:#intro

(其中有CSS3風格)

當我將鼠標懸停在按鈕上它應該改變p aragraph的ID爲:#outro

(這也CSS3風格)

,我不喜歡這樣的:

JS

$(document).ready(function(){ 
    $("#button1").hover(function(){ 
     $("#main").attr("id","intro"); 
    },function(){ 
     $("#intro").attr("id","outro"); 
    }); 
}); 

CSS

#main{ 
    color:red; 
} 
#intro{ 
    -webkit-animation: recolor .5s; 
    color:blue; 
} 
@-webkit-keyframes recolor { 
    from{ 
     color:red; 
    } 
    to{ 
     color:blue; 
    } 
} 
#outro{ 
    -webkit-animation: recolorout .5s; 
    color:red; 
} 
@-webkit-keyframes recolorout { 
    from{ 
     color:blue; 
    } 
    to{ 
     color:red; 
    } 
} 

這是工作,問題是我只能做一次。我知道,因爲我沒有改回#main

,但在哪裏它把這個一個:

$("#outro").attr("id","main"); 

,這樣它會懸停處理後更改段回其初始狀態?

還是有其他解決方案嗎?在此先感謝

This is the js fiddle.

+4

不改變ID。改用類。 – CodeToad

+0

我已經嘗試過,我有與addClass()和removeClass()相同的問題,我該怎麼做? – Twish

+0

jQuery的[toggleClass()](http://api.jquery.com/toggleclass/)? *諷刺模式關閉* – angabriel

回答

0

請參閱本撥弄着一個工作示例:http://jsfiddle.net/chantastic/rGc7h/1/

修改通過類

更改ID是要使它很難找回原來的狀態,沒有地方保持它在你的JavaScript。最好的辦法是將要添加修改類你樣式表:

#main { /* base styles */ } 
#main.intro { /* intro overrides */ } 
#main.outro { /* outro overrides */ } 

有了這些之後,就可以使用.addClass()加入正確的類權事件。

$('#button1').mouseenter(function() { 
    $('#main').addClass('intro'); 
}); 

不要忘記刪除舊班!

如果只做到上面,你會添加類將永遠呆在那裏。這不是你想要的。您需要刪除'.intro',以便添加'.outro'並讓這些樣式接管。

$('#button1').mouseenter(function() { 
    $('#main')revomeClass().addClass('intro'); 
}); 

.removeClass()將刪除所有。所以要注意這一點。在這種情況下,這正是我們想要的。

使用.mouseenter/.mouseleave事件,而不是.hover

這是個人喜好。我發現以後閱讀和理解會更容易。在幕後,jQuery將.hover()轉換爲.mouseenter.mouseleave事件。

這是最後的結果是:

$(document).ready(function(){ 
    $main = $('#main') 
    $button1 = $('#button1') 

    $button1.mouseenter(function() { 
    $main.removeClass().addClass('intro'); 
    }); 

    $button1.mouseleave(function() { 
    $main.removeClass().addClass('outro'); 
    }); 
}); 

有了這個解決方案,「.outro」類將保持不變,直到你將鼠標懸停在該按鈕一次。

結合上面的樣式聲明,它的工作原理與您現在希望的一樣,並且稍後易於更改。

再次,這裏是一個工作小提琴:http://jsfiddle.net/chantastic/rGc7h/1/

+0

非常感謝! :D你的答案是精確的,並提出:)謝謝人!儘管@Bic的回答也是正確的,不知道爲什麼它有-1投票 – Twish

+0

@Twish很高興我能幫上忙! – chantastic

+0

另一個用戶一定以爲它沒有很好地回答這個問題。 – chantastic

-1

你不應該使用ID來改變元素的造型來。嘗試使用類來代替。這將防止需要根據事件是否已被觸發來更改任何代碼。

$(document).ready(function(){ 

    $("#button1").hover(function(){ 
     $("#main").addClass('intro').removeClass('outro').removeClass('main'); 
    }, 
    function(){ 
     $("#main").addClass('outro').removeClass('intro');; 
    }); 
}); 

CSS:

.main{ 
    color:red; 
} 

.intro{ 
    -webkit-animation: recolor .5s; 
    color:blue; 
} 

@-webkit-keyframes recolor { 
    from{ 
     color:red; 
    } 
    to { 
     color:blue; 
    } 
} 

.outro{ 
    -webkit-animation: recolorout .5s; 
    color:red; 
} 

@-webkit-keyframes recolorout { 
    from{ 
     color:blue; 
    } 
    to{ 
     color:red; 
    } 
} 
+0

嗯感謝您的建議,但與您的代碼的問題是當我懸停按鈕它做的.intro但執行.intro後,它轉回到紅色(#main) – Twish

+0

您可能可以從中刪除主類以防止出現這種情況。我會更新解決方案。 – Bic

+0

基本上,主要課程僅僅是一個初級課程。您將在第一次懸停後將其刪除,並且永遠不需要重新應用它。不過,我認爲teh1可能有更優雅的解決方案。 – Bic

1

而不是使用jQuery週期懸停效果,爲什麼不使用CSS?

http://jsfiddle.net/JtKFk/

HTML:

<p class="hoverable">hello world this is a test</p> 

CSS:

.hoverable{ 
    -webkit-animation: recolorout .5s; 
    color:red; 
} 

.hoverable:hover{ 
    -webkit-animation: recolor .5s; 
    color:blue; 
} 

@-webkit-keyframes recolor { 
    from{ 
     color:red; 
    } 
    to{ 
     color:blue; 
    } 
} 

@-webkit-keyframes recolorout { 
    from{ 
     color:blue; 
    } 

    to{ 
     color:red; 
    } 
} 
+0

+1高效,但只有webkit,那麼Firefox/IE用戶呢? –

+0

我只是複製他的代碼。如果他想支持其他瀏覽器,他可以使用相同的CSS佈局併爲其他瀏覽器添加規則。 – teh1

+0

嘿兄弟,我只使用webkit,因爲我使用谷歌瀏覽器,這僅僅是爲了學習的目的:D – Twish

1

CODE:

$("#button1").mouseenter(function(){ 
$("#main").addClass("intro"); 
}).mouseleave(function(){ 
    $("#main").removeClass("intro");}); 

CSS:

#main { 
color:red; 
} 

.intro {-webkit-animation:recolor。5秒; 顏色:藍色; } @ -webkit關鍵幀重新着色{ 從{ 顏色:紅; } 到{ 顏色:藍; } } .outro { -webkit動畫:recolor1,5S; 顏色:紅色; } @ -webkit關鍵幀recolor1 { 從{ 顏色:藍; } 至{ 顏色:紅色; } }

http://jsfiddle.net/7eBCS/2/

+0

+1用於粘貼縮短的(至於現在的第三)副本的OP的css;) – angabriel

+0

@CodeToad嘿兄弟我試着你的小提琴,但是,當我徘徊按鈕它做.intro但它變成紅色(#main),即使我沒有徘徊出 – Twish

+0

是的,我需要解決這個問題。請讓我看看。看到我的其他答案的CSS技巧 – CodeToad

0

,如果你扭轉DOM中的順序,你可以這樣做:

​​

http://jsfiddle.net/7eBCS/3/

並沒有這一招太:

<p id="main">This should change the pharagraph within mouseenter/mouseleave</p> 

</button> 




#button1 { 
position:relative; 

} 

p{ 
position:absolute; 
top:200%; 
width:400px; 
} 


    #button1:hover > p{ 
    color:red; 

    } 

http://jsfiddle.net/7eBCS/4/

+0

謝謝你,我知道使用選擇器'〜'但我想學習如何在jQuery中做到這一點。 – Twish

相關問題