【发布时间】:2016-12-08 16:13:03
【问题描述】:
我基本上是想让弹出窗口从它们被点击的元素中出现,类似于 Angular Material Dialogs here。我知道如何通过添加和删除类来进行转换,但是当您想要使用动态计算并且需要通过 javascript 设置的样式时呢?这似乎不起作用。
$(document).ready(function(){
$(document).on("click", ".heading" , function(ev){
var el = $(this);
var offset = el.offset();
$(".popup").css("top", offset.top);
$(".popup").css("left", offset.left);
$(".popup").addClass("visible");
});
$(".close").on("click", function(ev){
$(".popup").removeClass("visible");
});
});
.heading{ width:100px; height:40px; background-color:grey; margin:50px 0 150px 0; padding:10px; }
.popup{
background-color:grey;
position:absolute;
height:0
width:0; opacity:0;
-webkit-transition: opacity 0.5s ease-out, width 0.3s ease-out, height 0.3s ease-out, top 0.3s ease-out, left 0.3s ease-out;
transition: opacity 0.5s ease-out, width 0.3s ease-out, height 0.3s
ease-out, top 0.3s ease-out, left 0.3s ease-out;
-moz-transition:
opacity 0.5s ease-out, width 0.3s ease-out, height 0.3s ease-out, top
0.3s ease-out, left 0.3s ease-out; -ms-transition: opacity 0.5s ease-out, width 0.3s ease-out, height 0.3s ease-out, top 0.3s
ease-out, left 0.3s ease-out;
-o-transition: opacity 0.5s ease-out,
width 0.3s ease-out, height 0.3s ease-out, top 0.3s ease-out, left
0.3s ease-out; }
.popup.visible{ opacity:1; height:250px; width:400px;
top:400px !important; left:200px !important; }
.close:hover{cursor:pointer;}
<html>
<head>
<meta charset="utf-8" />
<title></title>
<link rel="stylesheet" href="style.css" />
<script data-require="jquery" data-semver="3.0.0" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.js"></script>
<script src="script.js"></script>
</head>
<body>
<div class="heading">click me 1st </div>
<div class="heading">click me 2nd</div>
<div class="heading">click me 3rd</div>
<div class="popup">
ttttttttttttttttttttttttttttttttttttttttttttttttttttttt
<div style="margin:40px" class="close">close</div>
</div>
</body>
</html>
它应该是从您单击的 div 转换,在中心结束,当您关闭它时,它会转换回您单击的 div。
实际上是这样的:单击第一个 div 会使弹出窗口出现在它应该结束的位置。在这一点之后,过渡(顶部和底部)似乎总是落后一步。如果您单击第二个 div,则过渡从它之前结束的位置开始,即前一个 div(这是错误的,它应该从您单击的 div 开始)并在中间结束,这也是正确的。当您点击关闭时,它会返回到正确的 div。
有没有办法解决这个问题?告诉引擎手动更新值还是通过 javascritp 编辑类?任何帮助将不胜感激。
谢谢
【问题讨论】:
标签: javascript jquery html css css-transitions