我只能回答有關緩存(主要是見分隔器下方下注),您可以用封閉做些什麼的問題:
$("*[data-toggle-class]").each(function() {
var $elm = $(this),
cls = $elm.attr('data-toggle-class');
$elm.hover(function() {
$elm.toggleClass(cls);
});
});
什麼,做的,而不是在懸停事件期間爲所有匹配元素調用單個函數,而是爲每個元素生成一個單獨的函數,其中該函數關閉對元素的jQuery包裝器的引用以及其data-toggle-class
屬性的副本。它的交易規模(更多的功能=更多的內存,但你必須有批次它開始重要)的速度。
如果你的目標是有懸停類並沒有它的時候不徘徊,我可能做到這一點明確:
$("*[data-toggle-class]").each(function() {
var $elm = $(this),
cls = $elm.attr('data-toggle-class');
$elm.hover(
// Start hover
function() {
$elm.addClass(cls);
},
// Stop hover
function() {
$elm.removeClass(cls);
}
);
});
你說
我知道這是微型性能改進和做預優化不好
......但我只想強調一下。以上都會奏效,可能不會造成內存過度使用,並且會導致性能增強,但我傾向於認爲增強會低於人類感知的閾值。
我想知道你是否真的需要這個類和JavaScript代碼?除非需要支持IE6,否則CSS僞類正是爲此目的而設計的,並且由瀏覽器本地處理,而不是JavaScript代碼(讀取更快)。例如:
[data-toggle-class] {
color: green;
}
[data-toggle-class]:hover {
color: blue;
}
...將與一個data-toggle-class
任何元素屬性綠色正常,但藍色徘徊時。如果你需要做基於屬性的值不同的東西,你可以這樣做:
與
data-toggle-class="foo"
[data-toggle-class='foo'] {
color: green;
}
[data-toggle-class='foo']:hover {
color: blue;
}
[data-toggle-class='bar'] {
color: black;
}
[data-toggle-class='bar']:hover {
color: red;
}
元素將是綠色正常,藍色徘徊的時候; data-toggle-class="bar"
通常爲黑色,徘徊時爲紅色。不需要JavaScript。
在上面您瞭解color
只是一個例子;如果您使用的是精靈,我希望您使用的是background
和background-position
。
這裏的CSS技術(live copy | source)的合適的例子:
CSS:
.arrow {
width: 40px;
height: 40px;
background-image: url(http://cdn.sstatic.net/stackoverflow/img/sprites.png);
background-repeat: none;
display: inline-block;
}
.style1 {
background-position: 0px -220px;
}
.style1:hover {
background-position: 0px -320px;
}
.style2 {
background-position: 0px -260px;
}
.style2:hover {
background-position: 0px -290px;
}
HTML:
<div class="arrow style1"></div>
<div class="arrow style2"></div>
注意你怎麼可以很容易地控制哪些箭頭出現,聲明,沒有JavaScript。現在,當然,如果你的箭頭出現的條件比這更復雜,那麼你可能不得不去JS。我只是說,對於最簡單的懸停操作,它不是必需的。
具有':hover'的問題在於,它不適合我在這裏設置的方式,例如我在元素上獲得了右箭頭(css sprite圖像),並且其懸停的人希望懸停圖像(又是一個css sprite)這會在css中產生如下的代碼'.right-arrow {} .right-arrow:hover {background-position:something}'但我確實有這個'right-arrow {} right-arrow-hover { }'這樣我可以將'right-arrow-hover'應用到任何元素,而不管它是什麼狀態。所以這會讓我編寫下面的代碼'/ *在懸停時顯示紅色箭頭* /右箭頭:懸停{background-position:red-arrow-position}' – Deeptechtons 2012-03-28 08:30:29
對不起,評論太長了,我不得不將它分開引用 - 使所有正確的箭頭在懸停時顯示紅色箭頭。通過這種JavaScript方式,我可以自定義在懸停事件期間顯示哪個箭頭 – Deeptechtons 2012-03-28 08:31:13
@Deeptechtons:對,但您可以純粹使用CSS和標記。如果你在'hover'中所做的只是添加一個類,那麼你已經在使用CSS來完成所有的樣式。我已經爲答案添加了一個完整的sprite示例。顯然,挑選最適合你的方法。 – 2012-03-28 08:50:03