js获取隐藏元素的高度。
问题和场景
如果我们有这样一个输入框,单击以展开选择:
这里输入框和扩展区的下面是独立的,独立的两个控件!初始状态下的可选框是隐藏的(NG显示= false)
折叠区手风琴在部署区域的高度(对应于地图中的省、分类字段、短消息部分)高度支持数据,当手风琴折叠和收缩时,有一个高度动画效果。
在计算手风琴高度时,无法获得数据节点元素的高度,从而使手风琴的高度为0,不能折叠!
原因
其子元素的物理尺寸,不能在一个隐藏的div元素节点获得。当膨胀区的输入框下仍然是隐藏的,手风琴的控制不能获得数据的DOM节点元素的高度。
解决方案
高度和宽度()()方法得到的jquey隐藏元素的大小。但这只能得到隐藏元素的高度,并不能得到内部的子元素的高度!!!
解决方案:js控制CSS设置元素的隐藏和显示。
代码显示思想:隐藏元素(移除元素隐藏方式,css属性显示:无或部分样式类)我计算目标元素高度我还原隐藏元素的样式
我遇到了一些问题。
1。元素在显示闪烁球的解决方案和隐藏:CSS可见性:隐藏是不可见的属性,隐藏元素的物理尺寸的可见性:隐藏。
如果计算的高度可以在很短的时间内完成,则可以忽略这种闪烁。
2。元素显示将占用物理尺寸,可能影响到解决方案中的其他元素:球从屏幕上的位置或隐藏文档流中的元素(位置:绝对)。
示例代码如下所示:
叫GetSize方法在隐藏元素通过与目标元素需要的尺寸可以回到targetel大小!!!!
/ /物理尺寸,得到元件参数:元素节点元素隐藏;targetel需要得到目标元素的大小
this.getsize =功能(元,targetel){
/ /增加隐藏,防止显示闪烁的元素;位置:绝对的;显示:无是否加
无功_addcss = {可见性:隐藏的};
无功_oldcss = { };
无功_width;
无功_height;
如果(this.getstyle(元,显示)!{){
返回宽度:!targetel targetel.offsetwidth:element.offsetwidth,高度:!!targetel targetel.offsetheight:元。offsetheight };
}
对于(VAR我_addcss){
我_oldcss { } = this.getstyle(元,我);
}
this.setstyle(元,_addcss);
这里是AngularJS / NG显示指令隐藏要素,去掉ng隐藏风格类可以隐藏
无功_isnghide = element.classlist.contains(ng隐藏);
_isnghide element.classlist.remove(ng隐藏);
_width =!targetel targetel.offsetwidth:element.offsetwidth;
_height =!targetel targetel.offsetheight:element.offsetheight;
在还原类之前
this.setstyle(元,_oldcss);
_isnghide element.classlist.add(ng隐藏);
返回:_width {宽度,高度:_height };
};
this.getstyle =功能(元素、风格){
返回元素。风格{为} { }元素。风格为:element.currentstyle元。currentstyle {为}:window.getcomputedstyle(元,null){为};
};
this.setstyle =功能(元,obj){
如果(angular.isobject(obj)){
对于(在对象的属性){
无功cssnamearr = property.split();
对于(var i = 1,len = cssnamearr.length;我< len;i++){
我cssnamearr { } = cssnamearr {我}。取代(cssnamearr {我}。charAt(0),cssnamearr {我}。charAt(0)。ToUpperCase()));
}
无功cssname = cssnamearr.join();
元。风格{ cssname } = obj {属性};
}
}
如果(angular.isstring(obj)){
element.style.csstext = obj;
}
};
以上是本文的全部内容,希望本文的内容能给大家的学习或工作带来一定的帮助,同时也希望能给予更多的支持!