使用纯JavaScript在子级上更改img src后如何刷新div的offsetHeight?

I_do_python

我需要在div中更改图像,然后通过计算其高度和宽度,然后设置其左侧和顶部值,将其立即在屏幕上居中。但是,当我更改img src并尝试获取div的offsetHeight和clientHeight时,两个值都是错误的。奇怪的是,offsetWidth和clientWidth值是正确的。

有没有一种方法可以刷新div并获取正确的值?

编辑:似乎更改图像src会使之后的所有内容无法正常工作。现在,对onclick事件的更改imageObj.onclick = function() {contractImageView(imageId);};也不起作用。如果我注释掉if语句,那么所有这些都将再次开始工作。

下面是代码...

   // Get the page dimensions
   var pageBody = document.getElementById(currentBody);
   // If you couldn't get the page body, abort.
   if (!pageBody) {
      return;
   }

   var pageBodyHeight = window.innerHeight;
   var pageBodyWidth = pageBody.offsetWidth;
   var imageDiv = document.getElementById(imageId);
   var imageObj = imageDiv.children[0];
   var paraObj = imageDiv.children[1];
   // If you can't get the div or its image, then abort.
   if (!imageDiv || !imageObj) {
      return;
   }
   // Check whether the image has been loaded yet, and load if needed
   if (imageObj.src.indexOf('lazy_placeholder.gif') !== -1) {
      for (item in photoLazyData) {
         if (item === imageDiv.parentElement.id) {
            imageObj.src = photoLazyData[item][imageDiv.id];
         }
      }
   }
   // Change the images class.
   imageDiv.className = 'active_design_div';
   imageDiv.style.visibility = 'visible';
   imageDiv.style.opacity = 1;
   // Set the objects new onclick method to collapse the image
   imageObj.onclick = function() {contractImageView(imageId);};
   // Calculate the right size
   imageDiv.style.maxHeight = pageBodyHeight + 'px';
   imageDiv.style.maxWidth = pageBodyWidth  + 'px';
   imageObj.style.maxHeight = pageBodyHeight + 'px';
   imageObj.style.maxWidth = pageBodyWidth  + 'px';
   // Calculate the margins.
   var imageDivWidth = imageDiv.offsetWidth || imageDiv.clientWidth;
   // ## THIS IS WRONG IF THE ABOVE IF STATEMENT CHANGES THE SRC ##
   var imageDivHeight = imageDiv.offsetHeight || imageDiv.clientHeight; 
   console.log(imageDiv.offsetHeight + ' : ' + imageDiv.clientHeight);
   console.log(imageDiv.offsetWidth + ' : ' + imageDiv.clientWidth);
   var leftOffset = (pageBodyWidth - imageDivWidth) / 2;
   var topOffset = (pageBodyHeight - imageDivHeight) /2;
   // Adjust styling to make the div visible and centred.
   imageDiv.style.left = String(leftOffset) + 'px';
   imageDiv.style.top = String(topOffset) + 'px';

   currentId = imageId;
   toggleBlackDiv();

编辑:我最终使用Joonas89的答案进行了这项工作。我基本上将将if更改src语句移到了另一个函数,该函数在上述函数之前被调用。这样就解决了onclick上述问题。然后,我将div的左/上从计算值更改50%为Joonas89所详述的(但在容器div而不是img元素上),以及新的transform属性。div和img的位置值已经固定,因此无需更改。

乔纳斯89

您确定要计算顶部和左侧位置吗?最好添加一个这样的类,使其始终居中

.parentDiv{
   position: relative;
 }
.imageElement{
   position: absolute;
   top: 50%;
   left: 50%;
   transform: translate(-50%, -50%);
 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用纯JS在img上设置data-src?

如何使用JavaScript更改img src?

如何使用 javascript 更改 <img src>

更改“ src”属性后不刷新图像

悬停在父级上时更改img src

div刷新后Javascript中断

当使用放大镜js更改src时,如何刷新img src?

如何根据 div offsetHeight 更改标题的背景颜色?

使用javascript单击更改img src

如何在Beautiful Soup上检查标签<a>或/和<img>是否是div的子级

使用Javascript更改HTML元素后如何刷新它的样式?

如何使用纯 JavaScript 在 500px 后显示 div?

如何使用javascript更改img的来源

如何更改div的子级内容?

当ngClass在父级上更改时,如何为子级元素设置动画

如何使用javascript更改div中的图像src?

将鼠标悬停在 div 上,使用其 data-attribute 更改 img 的 src

更改后如何刷新/更新输出?

JavaScript 在使用 onmouseover img's、使用 'this' 键和函数时使用多个 img 的 src 更改 div 的 URL

当使用transform时,div消失:父级上的rotateY,子级上的位置:related

如何使用纯JavaScript在元素上触发悬停效果?

使用JavaScript根据引荐来源网址更改IMG SRC

如何使用特定的src网址查找img并使用香草javascript更改CSS?

更改查询后,如何使用FirebaseUI刷新FirebaseAdapter中的数据?

更改src后如何重新加载视频?

事件委托帮助,我如何仅使用纯 Javascript 定位 <img> 标签?

更改大小后刷新/重新加载div标签容器

使用响应式上的另一个img属性更改img src

是否可以使用 javascript 更改 <div> 父级?