javascript-jQuery:为什么元素的相对位置有时会返回窗口顶部(0,0),而在其他位置会正确返回?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-jQuery:为什么元素的相对位置有时会返回窗口顶部(0,0),而在其他位置会正确返回?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2337字,纯文字阅读大概需要4分钟。
内容图文
![javascript-jQuery:为什么元素的相对位置有时会返回窗口顶部(0,0),而在其他位置会正确返回?](/upload/InfoBanner/zyjiaocheng/654/7c336633ba4741a682cc028d67d4734e.jpg)
我正在尝试在ajax调用时显示繁忙的等待图标(即触发事件的event.target或object).我使用以下代码来实现这一点,但在某些情况下,返回元素的位置(偏移)为top:0和left:0-我知道我可能在犯错,但似乎无法确定.这是我的代码(它在主干视图类中,但这无关紧要,因为它很琐碎):
//ajax loading animation
var LoadingAnimation = Backbone.View.extend({
tagName: 'div', //creates an empty div element
initialize: function() {
var DOMElement = this.options.DOMElement; //is passed as a param (see below)
var pos = DOMElement.offset(); //<-- pos.left and pos.top 0 for some elements??
var _width = DOMElement.outerWidth(true);
var _height = DOMElement.outerHeight(true);
//setting the 'style' of 'this' div
$(this.el).css({
"position":"absolute",
"left" : pos.left+"px",
"top" : pos.top+"px",
"z-index" : 9999,
"width" : _width+"px",
"height": _height+"px",
"background": "#FFFFFF url(images/loading_round.gif) no-repeat center center"
});
/*appending to body. Don't know if this is correct, but nothing would
*show if it was not done :(
*/
$('body').append(this.el);
//_.bindAll(this, 'render','unrender'); //ignore for now
this.render();
},
render: function() {
$(this.el).show();
},
unrender: function() {
$(this.el).fadeOut("slow");
$(this.el).remove();
}
});
调用方法如下:
$('.ajaxAble').click(function(event){
var showBusy = new LoadingAnimation({DOMElement:$(this)}); //create and render busy waiting
//do ajax calls here and call showBusy.unrender() in success/error
}
对于某些元素,这很好用,但对于某些元素,offset()返回0.但是我不知道为什么?所有这些元素都具有相对位置,并且要显示的div是绝对的.但是我看不到冲突. (有一个吗?).我需要使此类课程尽可能与位置无关,可以这么说…
PS:我选择了本文中指出的本地非阻塞方式:
Best way to have ‘busy waiting’ animation be ‘position configurable’ in jquery? (i.e., show it where the action is)
更新:(选择答案之后):汤姆附加到DOMElement的父项的答案是正确的.但是,为了使其正常工作,最好使用上面的.position()而不是.offset()(如rkw所建议).上面的代码附加到主体(某些元素不正确),但是使用了偏移量.
解决方法:
position:relative的结果将取决于父级的位置.如果您将此行为应用于各种各样的项目,则可能是由于它们的定位上下文有很大不同而导致您看到的行为.
您看到的问题是否可以重现?而且对于相同的元素总是一样吗?
编辑:这是您需要将新的加载指示器附加到页面上的代码,该位置在文档中您早先获得的位置信息有意义的位置.
// $('body').append(this.el);
$(DOMElement).parent().append(this.el);
内容总结
以上是互联网集市为您收集整理的javascript-jQuery:为什么元素的相对位置有时会返回窗口顶部(0,0),而在其他位置会正确返回?全部内容,希望文章能够帮你解决javascript-jQuery:为什么元素的相对位置有时会返回窗口顶部(0,0),而在其他位置会正确返回?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。