首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实时计算位置() jQuery

实时计算位置() jQuery
EN

Stack Overflow用户
提问于 2012-12-12 22:18:49
回答 2查看 312关注 0票数 0

我正在尝试添加内阴影到页面中的用户照片(img)。它工作得很好,除非动态添加或从其位置移动一个userphoto元素。当元素移动时,有没有办法计算实时位置或重新计算位置。

代码语言:javascript
复制
jQuery('.UserPhoto').each(function(){

    var photo = jQuery(this);
    var photowidth = photo.width();
    var photoheight = photo.height();
    var photoposition = photo.position();
    var shadowcss = {
            'position' : 'absolute',
            'top' : photoposition.top + 'px',
            'left' : photoposition.left + 'px',
            'height' : photoheight + 'px',
            'width' : photowidth + 'px'
        }
    jQuery(this).after("<div class='userPhotoShadow'></div>");
    jQuery(this).next().css(shadowcss);

});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-12 23:02:38

首先,我认为添加一个阴影元素是非常低效的,并且必须在照片被移动时处理它的位置。

另一种方法(更好的imo)是在你的照片周围包裹一个元素,然后在里面附加你的阴影,就像这样:

代码语言:javascript
复制
$('.UserPhoto').each(function () {
    $(this).wrap('<div class="UserPhotoWrapper" />')
        .parent()
        .append('<div class="UserPhotoShadow" />');
});

这是一个fiddle,可以向您展示更多我正在讨论的内容。希望这能有所帮助!

票数 1
EN

Stack Overflow用户

发布于 2012-12-12 22:41:29

第一部分很简单。挂接以移动/调整事件大小,并在那里更新您的阴影元素。

第二部分可能比较棘手。有DOMSubtreeModified/DOMNodeInserted/等事件,但它们不被各种浏览器很好地支持。在创建新照片后,手动调用阴影创建代码要容易得多。

最后一部分是如何计算照片是否已经有阴影。理想情况下,您不必这样做,但如果您批量添加照片,并且没有真正准备好选择新照片,那么上面的代码可以简单地将一个标记类has-shadow添加到它已经处理的照片中,而忽略那些已经有它的照片。

或者,使用移动/调整大小事件,您可以简单地将您的阴影div添加到照片div内(ass,而不是后面)。只要你不设置overflow:hidden,它将只在基本的CSS下工作,不涉及任何javascript。

您也可以尝试使用CSS伪元素:before:after,而不是通过javascript添加元素。这取决于你的影子到底是什么样子,这可能会也可能不会起作用,但它比试图通过javascript来做要干净得多,性能也好得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13841784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档