Я создаю стену из мозаичной плитки, используя плагин jQuery Flip! (http://lab.smashup.it/flip/), чтобы отображать больше контента на каждой плитке. Я не гуру JavaScript или jQuery, но у меня он отлично работает в IE7+, FF, Chrome и Safari (похлопывает себя по спине). Однако я знаю, что это можно сделать с меньшим количеством JS, и я хотел бы понять, как это сделать.
Я создаю каждую плитку, используя следующую разметку:
<li id="tileID" class="tile">Default visible content
<div id="tileID_flipped" class="hiddenContent">
Content made visible when tile flips.
</div>
</li>
Текст «Видимый контент по умолчанию» — это то, что отображается в плитке по умолчанию (да). Содержимое внутри <div id="tileID_flipped" class="hiddenContent">
— это то, что появляется, когда плитка переворачивается.
Я использую следующий JavaScript в $(document).ready(function() {
, чтобы заставить работать каждую плитку:
$('#tileID').delegate('a', 'click', function(e){ e.stopImmediatePropagation(); })
.toggle(function(){
$(this).flip({
direction:'rl',
color: "#b91317",
content: $("#tileID_flipped"),
speed: 200
})
},
function() {
$(this).revertFlip()
}
);
К вашему сведению, я использую решение e.stopImmediatePropagation()
, чтобы предотвратить запуск события флипа, когда пользователь щелкает ссылку внутри плитки. Нашел это решение на этом сайте.
Проблема в том, что я повторяю этот скрипт для каждой создаваемой плитки. Я считаю, что это расточительно, потому что единственным уникальным атрибутом является content: $(selector)
.
Я смог применить событие flip к каждому элементу с классом «плитка», используя следующий код:
$('.tile').delegate('a', 'click', function(e){ e.stopImmediatePropagation(); })
.toggle(function(){
$(this).flip({
direction:'rl',
color: "#b91317",
speed: 200
})
},
function() {
$(this).revertFlip()
}
);
Теперь, когда я сделал это, как мне «внедрить» содержимое, специфичное для тайла, в каждый тайл?
P.S. Я использую jQuery (1.6.4), jQuery UI (1.7.2) и jQuery flip.