jQuery slideDown()向下移动下面的所有内容.如何防止这种情况
jQuery slideDown() moves everything below downwards. How to prevent this?
我对jQuery slideDown()
动画有一个小问题。当这个slideDown()
被触发时,它也会向下移动下面的所有东西。
如何使<p>
下面的所有东西都滑下来,保持静止?
注意:
我更喜欢对<p>
元素或slideDown
调用或其他内容进行更改的解决方案。因为在我的实际页面中,<p>
下面有很多东西被向下滑动,所以更改/重新排列所有这些东西对我来说需要更长的时间~
演示@JSFiddle:http://jsfiddle.net/ahmadka/A2mmP/24/
HTML代码:
<section class="subscribe">
<button id="submitBtn" type="submit">Subscribe</button>
<p></p>
</section>
<div style="padding-top: 30px;">
<table border="1">
<tr>
<td>This table moves</td>
<td>down when</td>
</tr>
<tr>
<td>slideDown()</td>
<td>is activated !</td>
</tr>
</table>
</div>
JavaScript:
$(function () {
$("#submitBtn").click(function (event) {
$(".subscribe p").html("Thanks for your interest!").slideDown();
});
});
CSS:
.subscribe p {
display: none;
}
您可以将该元素position
作为absolute
:
.subscribe p {
display: none;
position : absolute; // add this line
}
演示:http://jsfiddle.net/A2mmP/25/
现有代码的情况是,元素从display:none;
开始,所以它根本不会占用任何空间,直到您将其滑入并更改为display:block
,从而向下移动以下元素。
在position:absolute
中,它不会占用空间,而是重叠:事实上,在我更新的小提琴版本中,你可以看到下面的桌子有轻微的重叠——你显然可以调整桌子上的边距或其他任何东西,使其符合你想要的方式。
您所需要的只是提供.subscribe.的固定高度
.subscribe {
height: 50px;
}
.subscribe p {
margin: 0px;
display: none;
}
这是jsFiddle:http://jsfiddle.net/xL3R8/
解决方案
我们将滑动元素放在具有固定宽度的div
元素中,以防止文档流受到滑动事件的影响。
HTML
<section class="subscribe">
<button id="submitBtn" type="submit">Subscribe</button>
<!-- this is the modified part -->
<div><p></p></div>
</section>
CSS
.subscribe div
{
/* We force the width to stay a maximum of 22px */
height:22px;
max-height:22px;
overflow:hidden;
}
.subscribe div p {
display: none;
/* We reset the top margin so the element is shown correctly */
margin-top:0px;
}
实时演示
问题是你的CSS,当它滑入时,它会呈现为块并向下推其他元素。将其设置为绝对位置,并将z索引更改为在前面或后面。
.subscribe p {
display: none;
position: absolute;
z-index: 100;
}
Fiddle
.subscribe p {
display: none;
margin :0px;
}
IMO一个好的UI实践是删除订阅按钮,然后在那里显示一条消息,如下所示:"万岁!你已经订阅了"例如http://jsfiddle.net/UvXkY/
$(function () {
$("#submitBtn").click(function (event) {
$("#submitBtn").slideToggle('slow', function(){
$(".subscribe p").html("Thanks for your interest!").slideDown();
});
});
});
您面临的实际问题是display:none
,它将删除元素p
的空间
其中作为visiblity:hidden
和显示将获得这个问题的
即使它不会给出正确的slideDown
效果,所以你可以使用绝对位置并为p
元素保留一些空间,这也会解决你的问题。
解决方案之一
.subscribe p {
position:absolute;
display:none;
}
.subscribe
{
position:relative;
height:50px;
}
FIDDLE演示
- 为什么浏览器为电子邮件验证正则表达式显示不同的反斜杠.如何防止这种情况发生
- 当我单击画布并拖动鼠标时,光标将变为文本选择光标.我该如何防止这种情况发生
- 为什么每次滑动后页面都会向上滚动向下以及如何防止这种情况发生
- 防止在没有ajax的情况下提交后重定向表单
- 如何防止用户为每种情况选择单选按钮
- jQuery .focus() 在每个浏览器中的工作方式不同.如何防止这种情况
- 为什么我的输入接受所有值,即使我正在使用函数来防止这种情况
- 我不希望我的“播放器”离开屏幕,我该如何防止这种情况
- jQuery,防止在用户双击或多次点击的情况下执行点击事件
- Linkify 正在链接无效链接.为什么?有没有办法防止这种情况
- 防止在没有指针事件的情况下单击:无
- 如何防止表单提交时出现默认情况
- 防止闭包编译器在不使用括号表示法的情况下重命名属性
- jQuery slideDown()向下移动下面的所有内容.如何防止这种情况
- JavasScript:如何防止用户在不使用禁用/指针事件的情况下选择选择选项列表中的任何内容
- Javascript——如何在不使用新运算符的情况下启用静态方法,同时防止使用实例函数
- 如何在某些情况下防止.stop()
- mozIJSSubScriptLoader::loadSubScript:如何在不施加安全约束的情况下防止符号泄漏
- 防止在不影响文本输入的情况下,空格键在向下滚动时出现默认情况
- Javascript代码冻结页面一段时间-我如何防止这种情况