【问题标题】:Positioning element with jQuery does not work in Internet Explorer 8使用 jQuery 定位元素在 Internet Explorer 8 中不起作用
【发布时间】:2011-11-29 21:53:31
【问题描述】:

我在页面加载时使用 jQuery 定位的 div 中有一组图像。

var myimg = $('#myimg');
... // Calculate x and y
myimg.css('left', x);
myimg.css('bottom', y);

每个图像都有一个position: absolute 样式,而它们包含的div 有一个position: relative 样式。

这适用于除 Internet Explorer 8 之外的所有浏览器(尚未尝试 9)。图像没有设置它们的位置。我可以确认 JavaScript 正在运行,特别是因为我还使用 jqueryrotate 旋转图像,以便在我定位图像时旋转图像,并且它们在 IE 中显示为旋转。

编辑

这是完整的 JavaScript 代码。我正在尝试做的具体是将图像排列成一个圆圈。

var num_imgs = 14;

var angle_delta = 360 / num_imgs;

var center_x = 365;
var center_y = 245;
var radius = 230;

for (var i = 0; i < num_imgs; ++i) {
    var angle = (angle_delta * i) + 90;

    var radians = angle * 0.0174532925;
    var x = Math.round(radius * Math.cos(radians));
    var y = Math.round(radius * Math.sin(radians));

    var img = $('#myimg-' + i);
    img.rotate(90 - angle); // Only part of the code that works
    img.css('left', center_x + x);
    img.css('bottom', center_y + y);
}

【问题讨论】:

  • 这在 IE8 中应该可以正常工作。您能否提供您遇到问题的完整、准确的代码?
  • 您没有在多个元素上使用myimg ID,是吗?我问只是因为你说你有“一组图像”。
  • jsfiddle.net/SLgVy/2 工作正常。请注意,图像必须绝对位于第一个位置。
  • @mblase75 当我说“一组图像”时,我的意思是我在 for 循环中迭代每个图像,其中真实 ID 为 'myimg-' + i

标签: jquery css internet-explorer position


【解决方案1】:

尝试将每个图像包装在 &lt;div&gt; 中,并将您的 myimg# id 分配给该 div,而不是直接分配给图像。为每个包含 &lt;div&gt; 的图像添加一个类,以便您可以一次性使用绝对定位设置它们的样式。

您需要使用一点 DOM 遍历来获取实际图像,但这仅对插件很重要 - 只需使用 img.children('img').rotate(90 - angle) 而不是 img.rotate(90 - angle)。您的 CSS 定位将全部使用&lt;div&gt;

http://jsfiddle.net/R86Ud/4/

【讨论】:

    【解决方案2】:

    您的 x 和 y 值是简单的整数,还是有“px”后缀?它们应该是“100px”,而不仅仅是 100,所以如果您缺少 px,这可能是问题所在。

    【讨论】:

    • .css 方法应根据需要自动添加px
    • 你确定吗?我一直看到'px' 用于设置这些类型的值(与 .width() 和 .height() 相反),即使在 jQuery 示例中也是如此。有链接吗?
    猜你喜欢
    • 2012-06-07
    • 2011-09-08
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 2013-03-17
    相关资源
    最近更新 更多