剧情解释:
- 有一堆具有不同大小和属性的 div,它们都有一个
box
类。 - 所有的盒子都用 隐藏
display: none
。 - 这些框不能有“绝对”位置。
- 页面加载时,这些框将开始一一切换。
- jQuery 的切换效果从元素的左上角开始。
问题:
我希望切换效果从框的中心(高度和宽度)开始。我的意思是如果盒子大小是 100px*100px,效果应该从顶部 50px 和左侧 50px 开始。我怎么能用 jQuery 做到这一点?
剧情解释:
box
类。display: none
。问题:
我希望切换效果从框的中心(高度和宽度)开始。我的意思是如果盒子大小是 100px*100px,效果应该从顶部 50px 和左侧 50px 开始。我怎么能用 jQuery 做到这一点?
如果理解你的意思,这应该做到。
运行示例可以在这里找到。
首先写你的html:
<div id="container">
<div id="link">
<a href="javascript:void(0)" id="boxOne">Click Me</a>
</div>
<div id="boxOneContent" class="box">
<div class="content">
<h1>Hello World</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscingelit. Ut ullamcorper consequat dui tempor euismod.</p>
<p>Nam vel odio massa, sed lacinia sapien. Cras ac
nisi.</p>
</div>
</div>
链接的 id 与相应框的 id 的第一部分匹配。对于我在容器 div 中添加的演示,用户可以单击页面上的任意位置以关闭框。盒子内还有一个内容容器,用于在盒子展开时停止内容包装。
现在是您的 CSS,它将框定位在链接的中央。我只把它的关键方面放在这里,查看完整代码的演示:
#link {
float: left;
border: 1px solid red;
text-align: center;
width: 40px;
height: 40px;
padding: 5px;
margin-left: 125px;
margin-top: 125px;
}
#boxOneContent
{
background-color: #000;
color: #fff;
padding: 20px;
width: 160px;
height: 160px;
position: absolute;
top: 150px;
left: 150px;
margin-left: -100px;
margin-top: -100px;
display: none;}
通过为#link 定义宽度、高度、内边距和边距,该元素的中心距顶部150 像素,距左侧150 像素。这是工作原理:125+((40+(5*2))/2) = 150。
包括填充在内,#boxOneContent 的总宽度和高度为 200 像素。因此,边距设置会将 div 向上和向左移动框大小的一半。这就是当 div 出现在右下角(像往常一样)扩展但也向左上角移动以到达这些边距时,div 向外“增长”的原因。
最后是 jQuery 将它们组合在一起:
$(document).ready(function($) {
$('a').click(function(){
if($('.box#'+$(this).attr('id')+'Content').hasClass('active') == true) {
$('.box#'+$(this).attr('id')+'Content').removeClass('active').hide(200);
} else {
$('.box.active').removeClass('active').hide(200);
$('.box#'+$(this).attr('id')+'Content').addClass('active').show(1000);
}
});
$("body").click(function(){
$(".box").removeClass("active").hide(200);
});
$("a").click(function(e){
e.stopPropagation();
});
});
如果与单击的链接对应的框是可见的(活动的),那么它是隐藏的。否则,任何可见框都将被隐藏,并显示与单击的链接对应的框。如果用户单击页面上的任何位置(链接除外),则所有打开的框都将关闭。快乐编码!