这是我的问题的非常简化的版本.
HTML:
<div class="thumbnail"> <a href='#' id="clickMe">Click me!</a> </div>
CSS:
div { width: 200px; height: 300px; background-color: purple; } a { position: absolute; } @media (max-width: 991px) { div { height: 200px; } }
使用Javascript:
$(document).ready(function () { var $parent = $('#clickMe').parent(); function resize() { $('#clickMe').offset({ top: $parent.offset().top + $parent.height()-$('#clickMe').height() }); } $(window).on('resize',resize); resize(); });
问题:
那么当我调整大小(没有拖动)时会给出什么?好吧,javascript首先启动并设置< a>< / a>的位置,然后CSS应用高度变化,如果我们< 992 px. 从逻辑上讲,按钮现在在视觉上位于div的外部而不是像我最初定义的那样在边框上. 本文提出的临时解决方案. jQuery – how to wait for the ‘end’ of ‘resize’ event and only then perform an action?
var doit; $(window).on('resize',function(){ clearTimeout(doit); doit = setTimeout(resize,500); });
临时解决方案不是我想要的:
但是,在我的情况下,我真的不需要在调整大小事件实际完成时调用’resize’.我只是希望我的javascript在css完成加载/或完成它的更改后运行.当css可能完成时,使用该函数“randomely”运行JS时感觉非常慢.
问题:
这个问题有方法解决吗?任何人都知道js中的技术要等到css完全完成在调整大小期间应用修改?
附加信息:
在jsfiddle中测试这个很可能不会给你与I相同的结果.我的css文件有很多行,我使用的是Twitter Bootstrap.这两个占用了很多资源,放慢了css应用程序的速度(我想,如果我错了就告诉我).
解决方法
>响应性和流畅的布局问题应始终主要(如果不是scrictly)使用CSS解决.
因此,请删除所有JavaScript代码.
>您绝对将内部定位为#clickMe元素.
这意味着它将位于其最近的相对定位元素内.根据提供的样式,它将被定位在主体元素内,因为没有位置:相对;在任何其他元素中(默认位置值是静态的).通过提供的脚本,它似乎应该位于其直接父容器中.为此,请添加position:relative;到div.thumbnail元素.
>根据您提供的脚本,您似乎需要将#clickMe放在div.thumbnail的底部.
现在我们确定添加到#clickMe的样式是相对于div.thumbnail的,只需添加bottom:0px;到#clickMe元素,它将相应地定位,与其父元素的高度无关.请注意,在调整窗口大小时(不需要脚本),这将自动重新排列.
最终的代码将是这样的(see fiddle here):
JS:
/* No script needed. */
CSS:
div { width: 200px; height: 300px; background-color: purple; position: relative; //added } a { position: absolute; bottom: 0px; //added } @media (max-width: 991px) { div { height: 200px; } }
http://css-tricks.com/media-query-change-detection-in-javascript-through-css-animations/
http://css-tricks.com/enquire-js-media-query-callbacks-in-javascript/
http://tylergaw.com/articles/reacting-to-media-queries-in-javascript
http://davidwalsh.name/device-state-detection-css-media-queries-javascript
Twitter Bootstrap – how to detect when media queries starts
Bootstrap: Responsitive design – execute JS when window is resized from 980px to 979px