SlideToggle() on <tr> вызывает "прыжок"
При использовании функции jQuery slideToggle()
для отображения/скрытия данных в новой строке в таблице это заставляет заикаться. Тем не менее, при использовании slideToggle()
для отображения/скрытия <div>
он работает очень плавно.
Может ли кто-нибудь сказать мне, почему это происходит?
Пример скрипта: http://jsfiddle.net/gLGUG/
Код jQuery:
$("tr").click(function () {
$(".slideMe").slideToggle();
});
$(".slideMeDiv, button").click(function () {
$(".slideMeDiv").slideToggle();
});
Разметка HTML:
<table>
<tr>
<td>One Row</td>
</tr>
<tr>
<td>Click me</td>
</tr>
<tr class="slideMe">
<td>SlideDOWN</td>
</tr>
</table>
<br />
<button>Slide Div</button>
<div class="slideMeDiv">
Slide me as well
</div>
Ответы
Ответ 1
Упомяните border="0" cellspacing="0" cellpadding="0"
в table
<table width="100%" border="0" cellspacing="0" cellpadding="0">
это решит проблему прыжка
Вот файл jsFiddle
Также для эффекта скольжения вам нужно обернуть текст с помощью div и поместить div в сторону td
здесь приведен обновленный файл jsFiddle
Ответ 2
Я просто делаю это в своем js
$(document).ready(function(){
$('tr').click(function(){
$('.slideMe').slideToggle();
$('.slideMe').css("display", "block")
});
});
Это останавливает отображение тэга в виде строки таблицы, которая не работает с переключением слайдов
Ответ 3
Переключатель слайда, кажется, отлично работает в строке таблицы без каких-либо данных внутри его td, поэтому, если вы перетаскиваете содержимое внутри td, тогда оно должно работать.
попробуйте следующее:
function slideToggleRow(selector){
$(selector).find("td").contents().slideToggle();
$(selector).slideToggle();
}
используется следующим образом:
$("tr").click(function () {
slideToggleRow(".slideMe");
});
Это должно работать, может быть, не идеально, но это лучшее решение, которое у меня есть. Если кто-нибудь найдет лучшее решение, сообщите мне.
Ответ 4
Для таблицы с измененной структурой:
<table>
<tr>
<td>One Row</td>
</tr>
<tr>
<td>Click me</td>
</tr>
<tr class="slideMe">
<td>
<div class="tdDiv">SlideDOWN</div>
</td>
</tr>
</table>
(1) Убедитесь, что вы показываете как "slideMe" tr, так и "div" внутри "slideMe" tr td следующим образом:
$('.slideMe').show();
$('.slideMe').find('.tdDiv').show();
(2) Используйте этот код для переключения строки слайдов
function toggleRow(selector){
if($(selector).css('display') == "none"){
$(selector).find('.tdDiv').slideDown(200);
$(selector).slideDown(200);
}
else{
$(selector).slideUp(200);
$(selector).find('.tdDiv').slideUp(200);
}
}
*** Удостоверьтесь, что div внутри tr td скользит вниз, прежде чем ваши слайды будут вниз.
*** Также убедитесь, что tr сместится до того, как div внутри tr td соскальзывает.
(3) Наконец, вы можете вызвать функцию toggleRow:
toggleRow($('.slideMe'));