【问题标题】:How do I dynamically change the css of an element that runs offscreen to make it stay onscreen?如何动态更改在屏幕外运行的元素的 css 以使其保持在屏幕上?
【发布时间】:2012-12-11 01:27:37
【问题描述】:

我有一个鼠标悬停工具提示。它存在于多个页面元素上(动态生成,所以我永远不知道会有多少或它们的位置。)

我抱怨说,在分辨率较低的屏幕上,最右侧元素列中的项目的工具提示会跑出屏幕。由于我不知道创建父项时的位置,因此我需要一种方法来检测(在鼠标悬停实际发生之前)工具提示 div 在显示时将部分在屏幕外,并相应地更改 css。

我知道 css 需要是什么;我遇到的问题是检测部分。我见过类似的fewquestions,但解决方案都涉及使用原型或jquery插件。我仅限于这个项目的核心 jquery(或只是普通的 javascript)。

有什么建议吗?

【问题讨论】:

  • 每个元素都有一个相对于其父元素的偏移量,并且每个元素都有一个计算宽度(例如它在显示器上的大小)。得到这些,找出元素的右侧边缘相对于显示器的右侧边缘的位置,如果它离开屏幕,则将其推向左侧。
  • 我遇到了类似的问题。我最近一直在使用 jQuery UI 中的position,但目前还没有运气。如果您查看该链接上的示例,您会注意到将橙色 div 移出视图会将其子 DIV 推到右侧。与您和我正在寻找的非常相似...
  • @FastTrack - 我在链接到的一个问题中看到了该示例,但它使用的是 jqueryUI。正如我所说,我仅限于核心 jquery - 没有 UI,没有插件。

标签: javascript jquery position positioning


【解决方案1】:

这是我在 jsFiddle 上整理的一个快速演示:http://jsfiddle.net/2gGrd/

HTML:

<p class="left">Left</p>
<p class="center">Center</p>
<p class="right">Right</p>​

CSS:

p {
    position: absolute;
    top: 50%;
}

.left {
    left: 0;
}

.center {
    left: 50%;
}

.right {
    right: 0;
}

.toolTip {
    width: 100px;
    height: 25px;
    background: red;
    color: green;
    position: absolute;
}

JavaScript:

var tip;

$('p').hover(function() {
    $(this).css('color', 'red');
    var xpos = $(this).width() / 2 + $(this).offset().left;
    var ypos = $(this).height() / 2 + $(this).offset().top;
    tip = createToolTip('thing', xpos, ypos);
    $(this).parent().append(tip);
    tip.offset({
        left: tip.offset().left - tip.width() / 2
    });
    if (tip.offset().left < 0) tip.offset({
        left: 0
    });
    if (tip.offset().left + tip.width() > $('body').width()) {
        tip.offset({
            left: $('body').width() - (tip.width())
        });
    }
}, function() {
    $(this).css('color', '');
    $(tip).remove();
});

function createToolTip(text, x, y) {
    return $('<div />').addClass('toolTip').css('left', x).css('top', y).text(text);
}​

这不是完美的代码,也不是您对工具提示的想法,但希望它回答了有关将项目保持在屏幕上的问题。

【讨论】:

  • 谢谢,但我不确定这对我有帮助。您取决于元素的偏移量 + 宽度大于主体元素的宽度来确定元素是否在屏幕外。事情是这样的:如果在 CSS 中将 body 元素设置为 900px,则在 javascript 中,body 宽度总是会返回 900px,即使屏幕分辨率设置为只有 600px 在不滚动的情况下实际上是可见的。我需要一种方法来确定一个元素是否在屏幕上可见,而不是技术上它是否在 body 元素内。
  • 通常,如果您希望您的页面设置宽度,您会将所有页面内容包装在某种页面包装 div 中,如果您希望它水平居中,则自动设置宽度和边距在页面上。
猜你喜欢
  • 2011-11-26
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多