Heim  >  Artikel  >  Web-Frontend  >  js ermittelt die Breite und Höhe versteckter Elemente

js ermittelt die Breite und Höhe versteckter Elemente

高洛峰
高洛峰Original
2017-02-25 16:17:581762Durchsuche

Ermitteln Sie die physische Größe des ausgeblendeten Elements (Anzeige: keine)

Probleme und Szenarien

Wenn wir ein solches Eingabefeld haben, klicken Sie auf Erweitern Sie die Auswahl. Wie unten gezeigt:

js ermittelt die Breite und Höhe versteckter Elemente

js ermittelt die Breite und Höhe versteckter Elementejs ermittelt die Breite und Höhe versteckter Elemente

Hier sind das Eingabefeld und der erweiterte Bereich darunter getrennt, zwei unabhängige Steuerelemente! Das optionale Feld unter dem Ausgangszustand ist ausgeblendet (ng-show=false)

Die Höhe des faltbaren Komponentenakkordeons im erweiterten Bereich (entsprechend der Provinz, dem Sortierfeld und dem Kurznachrichtenteil im Bild) Passen Sie es an die Daten an, um es zu erweitern, und klicken Sie auf das Akkordeon, um beim Falten und Verkleinern einen höhenverändernden Animationseffekt zu erzielen!

Bei der Berechnung der Höhe des Akkordeons kann die Höhe des Datenknotenelements nicht ermittelt werden, was dazu führt, dass die Höhe des Akkordeons 0 ist und nicht gefaltet werden kann!

Grund

Die physische Größe seiner untergeordneten Elemente kann in einem versteckten p-Elementknoten nicht ermittelt werden! Das heißt, wenn der erweiterte Bereich unter dem Eingabefeld noch ausgeblendet ist, kann das Akkordeon-Steuerelement die Höhe des Daten-DOM-Knotenelements

Lösung

height( nicht ermitteln. ) und width() in JQuey ), um die Größe des ausgeblendeten Elements zu ermitteln. Dies kann jedoch nur die Höhe des ausgeblendeten Elements ermitteln, nicht die Höhe der internen Unterelemente! ! !

Lösung: JS steuert das Ausblenden und Anzeigen von CSS-Einstellungselementen

Codeideen: Ausgeblendete Elemente anzeigen (Entfernen Sie den Ausblendmodus des Elements, CSS-Attributanzeige: keine oder bestimmte Stilklassen) ---> Berechnen Sie die Höhe des Zielelements ---> Stellen Sie den Stil des ausgeblendeten Elements wieder her

Bestehende Probleme:

1. Das Element blinkt beim Umschalten zwischen Anzeigen und Ausblenden----> Attribut in CSS, Sichtbarkeit: Versteckte versteckte Elemente haben physische Dimensionen.

Wenn die Höhenberechnung in sehr kurzer Zeit abgeschlossen werden kann, kann dieses Flackerphänomen ignoriert werden!

2. Nachdem das Element angezeigt wurde, nimmt es die physische Größe ein und kann die Position anderer Elemente beeinflussen ----> Lösung: Verschieben Sie dieses ausgeblendete Element vom Bildschirm oder aus dem Dokumentfluss (Position). : absolut).

Der Beispielcode lautet wie folgt:

Rufen Sie die Methode getSize auf und übergeben Sie das versteckte Elementelement und das Zielelement, dessen Größe ermittelt werden muss, um die Größe von targetEl zurückzugeben! ! !

//获取元素的物理尺寸,参数:element隐藏的元素节点;targetEl需要获取尺寸的目标元素
this.getSize = function(element,targetEl) {
 //增加隐藏,防止element在取消隐藏时闪烁; position: absolute;和display:none看需要是否加上
 var _addCss = { visibility: 'hidden' };
 var _oldCss = {};
 var _width;
 var _height;
 if (this.getStyle(element, "display") != "none") {
  return { width: !!targetEl ? targetEl.offsetWidth : element.offsetWidth , height: !!targetEl ? targetEl.offsetHeight : element.offsetHeight };
 }
 for (var i in _addCss) {
  _oldCss[i] = this.getStyle(element, i);
 }
 this.setStyle(element, _addCss);
 //这里是通过angularjs的ng-show指令隐藏元素的,去掉ng-hide样式类就可以取消隐藏
 var _isNgHide = element.classList.contains("ng-hide");
 _isNgHide && element.classList.remove("ng-hide");
 _width = !!targetEl ? targetEl.offsetWidth : element.offsetWidth;
 _height =!!targetEl ? targetEl.offsetHeight : element.offsetHeight;
 //还原之前的样式,class
 this.setStyle(element, _oldCss);
 _isNgHide && element.classList.add("ng-hide");
 return { width: _width, height: _height };
};

this.getStyle = function(element, styleName) {
 return element.style[styleName] ? element.style[styleName] : element.currentStyle ? element.currentStyle[styleName] : window.getComputedStyle(element, null)[styleName];
};
this.setStyle = function(element, obj){
 if (angular.isObject(obj)) {
  for (var property in obj) {
   var cssNameArr = property.split("-");
   for (var i = 1,len=cssNameArr.length; i < len; i++) {
    cssNameArr[i] = cssNameArr[i].replace(cssNameArr[i].charAt(0), cssNameArr[i].charAt(0).toUpperCase());
   }
   var cssName = cssNameArr.join("");
   element.style[cssName] = obj[property];
  }
 }
 else if (angular.isString(obj)) {
  element.style.cssText = obj;
 }
};

Weitere js-bezogene Artikel zum Ermitteln der Breite und Höhe versteckter Elemente finden Sie unter PHP chinesische Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Javascript-NummerntypwertNächster Artikel:Javascript-Nummerntypwert