- 浏览: 973714 次
- 性别:
- 来自: 上海
-
文章分类
最新评论
-
sscsacdsadcsd:
mike8625 写道react还要自己的一些标签 还得编译 ...
对于React体系的一点想法 -
mike8625:
说的都是给大公司听的,国内很多还是小公司,做个小项目, 说实话 ...
关于国内前端和JS技术发展的乱想 -
mike8625:
react还要自己的一些标签 还得编译 编译吧浏览器端说还慢 ...
对于React体系的一点想法 -
u012814086:
下意识想到了Golang
JavaScript语句后应该加分号么? -
xueduanyang:
我是水羊,年轻的时候觉得只要有好斧子就能做成好产品,各种产品都 ...
关于国内前端和JS技术发展的乱想
前不久写了一个小脚本,用来获取页面中CSS样式的 used value 。
什么是Used Value?
简单来说就是样式表应用到页面元素的最终结果值。比方说一个p元素,可能有多份样式表的多个样式规则,都关系到p元素的最终样式,但是最终一个特定p元素的实际css属性,比如它的width,当然只能有一个值。这个值就叫做used value。更精确的定义,请看CSS 2.1规范的6.1.3节。
大多数同志可能知道computed value,因为符合标准的浏览器上有window.getComputedStyle()方法。
实际上,按照我对规范的理解,这个getComputedStyle方法返回的其实应该是used value,而不是computed value。这两者的差别是,computed value是无需layout时所能得到的值。比如,经过cascade计算后,实际应用于p的width为10em,假设p的fontSize是16px,则它的width的computed value就是160px,这是可以确定计算出来的。但是不是所有computed value都能这样确定下来,有些值要到layout时才能确定。比如p的width为50%,假定p是body的子元素,则这个50%是相对于body的宽度的。如果body没有设过明确的宽度,那实际上就是窗口的客户区宽度(clientWidth)。所以p的width是多少,只有到了layout的步骤才能算出来。另一个例子是table,本身td的宽度可以设定为table宽度的百分比,而非fixed的table本身的宽度又是要根据所有td(如内容多少、字体大小、换行设置等)来确定的,这个layout计算过程相当复杂。
所以,将computed value加上所有相关依赖,最后得到的结果,就叫做used value。
那么为什么DOM方法叫做getComputedStyle,而不是getUsedStyle呢?这是因为DOM level 2 CSS规范制定时(2000年)还没有CSS2.1。DOM是按照更早的CSS2规范来的,在CSS2中还没有提出computed value和used value的区分。严格的说,CSS2中定义的computed value,既不是CSS2.1的computed value,也不是CSS2.1的used value,而是某种有点含糊的两者混合体。CSS2.1之所以加上这个区分,可能是为了澄清有关inherit的值如何计算的问题。
抛开规范的问题,获得used value对于ajax开发者来说有时是很有用的。比如典型的垂直居中问题,通常的做法,你要获得实际的元素高度和容器高度的used value。就这个特定问题,通常利用clientHeight、offsetHeight(它们不是CSS property)等来计算。不过如果要满足一些其他要求,你可能还需要获得padding、border、margin、outline的used value。getUsedValue还具有更广泛的用途,例如获取某个元素里font的实际大小、或者某个元素的实际颜色之类的信息。另外,浏览器的功能有多强大,bug就有多烦人。有时候你难免要为特定问题打patch,而getUsedValue是打patch的居家必备武器。
我写的这个getUsedValue的API如下:
前两个参数比较好理解,最后一个参数是指定css长度单位(如果你要取的是一个css长度值的话)。如果不指定这个值(就传前两个参数),则返回的是一个字符串,例如"12px",如果你指定了cssUnit为“px”,则返回的是一个数字,即12。这对于要进行运算来说比较方便,省得你自己去parseFloat和parseInt。
来看一个简单的使用例子:
这个verticalAlign,用来将一个元素(由第一个参数e指定)在其父元素内垂直定位,默认会放在中间偏上一些(符合黄金分割的比例)。具体实现主要是通过clientHeight和offsetHeight来的,本来可以不用getUsedValue。但是我们有个额外的要求,希望在垂直定位时,仍然保留marginTop的用途,即元素上方至少要保留由元素的marginTop指定的空间。所以我们要得到marginTop的值,作为垂直定位时top的下限。
var minTop = getUsedValue(e, 'marginTop', 'px')
这句就是了。它表示获得e元素的marginTop以px单位记的数值。
下面是这个getUsedValue函数的源代码。代码以LGPL方式发布。
注意,目前还只是0.1版,没有经过充分的测试。
已知的问题包括:
1. 标准浏览器下,依赖getComputedStyle,而getComputedStyle函数,由于之前讲过的标准制定上的不同步,导致实际各浏览器实现可能有差异(可参考http://www.nabble.com/getComputedStyle-results-td16390247.html)。
2. getComputedStyle不支持px以外的相对单位,即使specified value确实是em/ex,也只能得到绝对值,无法倒算回去。
3. IE下是根据currentStyle来进一步计算的。currentStyle介于specified value和computed value之间(当然实际上都不是,因为IE的CSS模型根本完全不合标准,所以只是就概念上说部分属性相当于specified value,部分属性相当于computed value)。目前只针对css长度进行了进一步计算,而且不支持百分比和ex计算。em只在currentStyle返回原值是em时才可用。
4. 复杂情况,如table,如visibility:hidden、display:none之类的,都尚未有时间测试。
下一步的计划是:
1. 做更多实例的测试
2. 做更多浏览器的测试(目前其实只测了IE6和FF3)
3. 完全支持em和%长度的计算(ex不会支持,因为基本没人用,且无法准确测量ex,ex依赖于字体,bug之多无法计数)
4. 支持各种格式的颜色值的计算
欢迎大家测试和反馈bug。
什么是Used Value?
简单来说就是样式表应用到页面元素的最终结果值。比方说一个p元素,可能有多份样式表的多个样式规则,都关系到p元素的最终样式,但是最终一个特定p元素的实际css属性,比如它的width,当然只能有一个值。这个值就叫做used value。更精确的定义,请看CSS 2.1规范的6.1.3节。
大多数同志可能知道computed value,因为符合标准的浏览器上有window.getComputedStyle()方法。
实际上,按照我对规范的理解,这个getComputedStyle方法返回的其实应该是used value,而不是computed value。这两者的差别是,computed value是无需layout时所能得到的值。比如,经过cascade计算后,实际应用于p的width为10em,假设p的fontSize是16px,则它的width的computed value就是160px,这是可以确定计算出来的。但是不是所有computed value都能这样确定下来,有些值要到layout时才能确定。比如p的width为50%,假定p是body的子元素,则这个50%是相对于body的宽度的。如果body没有设过明确的宽度,那实际上就是窗口的客户区宽度(clientWidth)。所以p的width是多少,只有到了layout的步骤才能算出来。另一个例子是table,本身td的宽度可以设定为table宽度的百分比,而非fixed的table本身的宽度又是要根据所有td(如内容多少、字体大小、换行设置等)来确定的,这个layout计算过程相当复杂。
所以,将computed value加上所有相关依赖,最后得到的结果,就叫做used value。
那么为什么DOM方法叫做getComputedStyle,而不是getUsedStyle呢?这是因为DOM level 2 CSS规范制定时(2000年)还没有CSS2.1。DOM是按照更早的CSS2规范来的,在CSS2中还没有提出computed value和used value的区分。严格的说,CSS2中定义的computed value,既不是CSS2.1的computed value,也不是CSS2.1的used value,而是某种有点含糊的两者混合体。CSS2.1之所以加上这个区分,可能是为了澄清有关inherit的值如何计算的问题。
抛开规范的问题,获得used value对于ajax开发者来说有时是很有用的。比如典型的垂直居中问题,通常的做法,你要获得实际的元素高度和容器高度的used value。就这个特定问题,通常利用clientHeight、offsetHeight(它们不是CSS property)等来计算。不过如果要满足一些其他要求,你可能还需要获得padding、border、margin、outline的used value。getUsedValue还具有更广泛的用途,例如获取某个元素里font的实际大小、或者某个元素的实际颜色之类的信息。另外,浏览器的功能有多强大,bug就有多烦人。有时候你难免要为特定问题打patch,而getUsedValue是打patch的居家必备武器。
我写的这个getUsedValue的API如下:
getUsedValue(element, cssPropertyName, cssUnit)
前两个参数比较好理解,最后一个参数是指定css长度单位(如果你要取的是一个css长度值的话)。如果不指定这个值(就传前两个参数),则返回的是一个字符串,例如"12px",如果你指定了cssUnit为“px”,则返回的是一个数字,即12。这对于要进行运算来说比较方便,省得你自己去parseFloat和parseInt。
来看一个简单的使用例子:
function verticalAlign(e, ratio) { ratio = ratio || 0.382 var p = e.offsetParent || e.parentNode var s = e.style var minTop = getUsedValue(e, 'marginTop', 'px') s.position = 'relative' s.top = Math.max(minTop, (p.clientHeight - e.offsetHeight) * ratio - minTop) + 'px' }
这个verticalAlign,用来将一个元素(由第一个参数e指定)在其父元素内垂直定位,默认会放在中间偏上一些(符合黄金分割的比例)。具体实现主要是通过clientHeight和offsetHeight来的,本来可以不用getUsedValue。但是我们有个额外的要求,希望在垂直定位时,仍然保留marginTop的用途,即元素上方至少要保留由元素的marginTop指定的空间。所以我们要得到marginTop的值,作为垂直定位时top的下限。
var minTop = getUsedValue(e, 'marginTop', 'px')
这句就是了。它表示获得e元素的marginTop以px单位记的数值。
下面是这个getUsedValue函数的源代码。代码以LGPL方式发布。
// getUsedValue() version 0.1 // Copyright 2009 hax<johnhax@gmail.com> // You can use and distribute these codes under LGPL v3 license. var CSSValueUnitTypes = [ 'unknown', 'number', '%', 'em', 'ex', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'deg', 'rad', 'grad', 'ms', 's', 'hz', 'khz', 'dimension', 'string', 'uri', 'indent', 'attr', 'counter', 'rect', 'rgbcolor' ] function isLengthProperty(prop) { return '\ top right bottom left \ marginLeft marginRight marginTop marginBottom outlineWidth \ borderTopWidth borderRightWidth borderBottomWidth borderLeftWidth \ paddingTop paddingRight paddingBottom paddingLeft \ maxHeight maxWidth minHeight minWidth height width \ fontSize lineHeight textIndent letterSpacing wordSpacing \ borderSpacing backgroundPosition clip \ '.indexOf(prop) != -1 } function isLengthUnit(unit) { return ('% em ex px cm mm in pt pc'.indexOf(unit) != -1) } function isAbsoluteLengthUnit(unit) { return ('cm mm in pt pc'.indexOf(unit) != -1) } function convertAbsoluteLength(n, u, u2) { if (u == u2) return n var t = { in_cm:2.54, in_pt:72, cm_mm:10, pc_pt:12 } t.in_mm = t.in_cm * t.cm_mm //25.4 t.in_pc = t.in_pt / t.pc_pt //6 t.cm_pt = t.in_pt / t.in_cm t.cm_pc = t.in_pc / t.in_cm t.mm_pt = t.in_pt / t.in_mm t.mm_pc = t.in_pc / t.in_mm var r if (r = t[u + '_' + u2]) return n * r if (r = t[u2 + '_' + u]) return n / r throw Error('Can not convert: ' + u + ' -> ' + u2) } function cssPropertyName(cssAttributeName) { return cssAttributeName.replace(/([A-Z])/g, '-$1').toLowerCase() } function getDPI() { if (!getDPI._1in) { getDPI._1in = document.createElement('div') var s = getDPI._1in.style s.margin = s.borderWidth = s.padding = '0' s.maxWidth = s.minWidth = s.width = '1in' } return getDPI._1in.style.pixelWidth } function calcPixelLength(elt, cssLength) { var s if (!calcPixelLength._temp) { calcPixelLength._temp = document.createElement('div') s = calcPixelLength._temp.style s.margin = s.borderWidth = s.padding = '0' s.display = 'none' } s = calcPixelLength._temp.style s.maxWidth = s.minWidth = s.width = cssLength elt.appendChild(calcPixelLength._temp) var r = s.pixelWidth elt.removeChild(calcPixelLength._temp) return r } function calcFontSize(size) { var s if (!calcFontSize._temp) { calcFontSize._temp = document.createElement('div') s = calcFontSize._temp.style s.margin = s.borderWidth = s.padding = '0' s.maxWidth = s.minWidth = s.width = '1em' } s = calcFontSize._temp.style s.fontSize = size return s.pixelWidth } function getUsedValue(elt, prop, unit) { if (typeof getComputedStyle == 'function') { if (unit == null) { return getComputedStyle(elt, null)[prop] } else { var unitType = CSSValueUnitTypes.indexOf(unit) var value = getComputedStyle(elt, null). getPropertyCSSValue(cssPropertyName(prop)) switch (unitType) { default: return value.getFloatValue(unitType) } } } if (elt.currentStyle) { var v = elt.currentStyle[prop] if (!v) return v if (isLengthUnit(unit) || isLengthProperty(prop)) { if (prop == 'fontSize') { if ('xx-small x-small small medium large x-large xx-large'. indexOf(v) != -1) { var n = calcFontSize(v) if (unit == null) return n + 'px' if (unit == 'px') return n if (isAbsoluteLengthUnit(unit)) return convertAbsoluteLength(n / getDPI(), 'in', unit) throw Error('px -> ' + unit + ' convertion has not implemented yet') } if ('smaller larger'.indexOf(v) != -1) throw Error('Calculation of font relative size has not implemented yet') } var n, u var a = /^([+-]?([0-9]+|[0-9]*[.][0-9]+))(em|ex|px|in|cm|mm|pt|pc|%)?/.exec(v) if (a == null) throw Error('Unknown length format: ' + v) n = parseFloat(a[1]), u = a[3] if (u == unit) return n if (u == 'px') { if (unit == null) return v if (isAbsoluteLengthUnit(unit)) return convertAbsoluteLength(n / getDPI(), 'in', unit) throw Error('px -> ' + unit + ' convertion has not implemented yet') } if (isAbsoluteLengthUnit(u)) { if (isAbsoluteLengthUnit(unit)) return convertAbsoluteLength(n, u, unit) n = convertAbsoluteLength(n, u, 'in') * getDPI() if (unit == 'px') return n if (unit == null) return n + 'px' throw Error(u + ' -> ' + unit + ' convertion has not implemented yet') } var pixelProp = { width:'pixelWidth',height:'pixelHeight', top:'pixelTop',bottom:'pixelBottom', left:'pixelLeft',right:'pixelRight' }[prop] if (pixelProp) { n = elt.currentStyle[pixelProp] if (unit == 'px') return n if (unit == null) return n + 'px' throw Error('px -> ' + unit + ' convertion has not implemented yet') } if (u == '%') { throw Error('Percentage value calculation has not implemented yet') } if (u == 'ex') { throw Error('ex value calculation has not implemented yet') } if (u == 'em') { if (prop == 'fontSize') { n = calcPixelLength(elt.parentNode, v) } else { n *= getUsedValue(elt, 'fontSize', 'px') } if (unit == 'px') return n if (unit == null) return n + 'px' throw Error('em -> ' + unit + ' convertion has not implemented yet') } throw Error('Unknown unit type: ' + u) } else { return v } } }
注意,目前还只是0.1版,没有经过充分的测试。
已知的问题包括:
1. 标准浏览器下,依赖getComputedStyle,而getComputedStyle函数,由于之前讲过的标准制定上的不同步,导致实际各浏览器实现可能有差异(可参考http://www.nabble.com/getComputedStyle-results-td16390247.html)。
2. getComputedStyle不支持px以外的相对单位,即使specified value确实是em/ex,也只能得到绝对值,无法倒算回去。
3. IE下是根据currentStyle来进一步计算的。currentStyle介于specified value和computed value之间(当然实际上都不是,因为IE的CSS模型根本完全不合标准,所以只是就概念上说部分属性相当于specified value,部分属性相当于computed value)。目前只针对css长度进行了进一步计算,而且不支持百分比和ex计算。em只在currentStyle返回原值是em时才可用。
4. 复杂情况,如table,如visibility:hidden、display:none之类的,都尚未有时间测试。
下一步的计划是:
1. 做更多实例的测试
2. 做更多浏览器的测试(目前其实只测了IE6和FF3)
3. 完全支持em和%长度的计算(ex不会支持,因为基本没人用,且无法准确测量ex,ex依赖于字体,bug之多无法计数)
4. 支持各种格式的颜色值的计算
欢迎大家测试和反馈bug。
评论
12 楼
cloudgamer
2009-04-22
ie8和ff的规律是一行中第一个和最后一个td的实际宽度是offsetWidth减去boder的一半
中间的还是相同的
中间的还是相同的
11 楼
cloudgamer
2009-04-22
上面的ie是ie8
10 楼
cloudgamer
2009-04-22
发现一个用offsetWidth也不准确的情况
<table border="30" width="300" style="border-collapse:collapse;">
<tr>
<td id="tt" bgcolor="#FF0000"> 1</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
ie中tt的offsetWidth是98但实际应该是约83
ff中offsetWidth是111但实际应该是约95
相差都差不多是15(border的一半)
<table border="30" width="300" style="border-collapse:collapse;">
<tr>
<td id="tt" bgcolor="#FF0000"> 1</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
ie中tt的offsetWidth是98但实际应该是约83
ff中offsetWidth是111但实际应该是约95
相差都差不多是15(border的一半)
9 楼
hax
2009-04-21
因为border比较麻烦,所以暂时没有支持。下个小版本(明天吧)会增加对border的支持。
8 楼
cloudgamer
2009-04-21
看来还是得用原始的方法了
你好像忘了考虑border哦
你好像忘了考虑border哦
7 楼
hax
2009-04-21
更新了,版本0.1.3,加入了对IE下width:auto/height:auto的支持,另外修正了一个小bug。
地址不变:http://pie.googlecode.com/svn/trunk/src/util/getUsedValue.js
地址不变:http://pie.googlecode.com/svn/trunk/src/util/getUsedValue.js
6 楼
cloudgamer
2009-04-21
哦
确实需要runtimeStyle
忘了考虑
但还有一个情况
<div style="width:500px;">
<div id="tt"></div>
</div>
这样tt得到的width是auto
就得不到结果了
还有什么方法吗
确实需要runtimeStyle
忘了考虑
但还有一个情况
<div style="width:500px;">
<div id="tt"></div>
</div>
这样tt得到的width是auto
就得不到结果了
还有什么方法吗
5 楼
cloudgamer
2009-04-21
今天才知道有个pixelWidth的属性
谢谢!
貌似直接style.pixelWidth就能得到结果了
谢谢!
貌似直接style.pixelWidth就能得到结果了
4 楼
hax
2009-04-21
使用更新的0.1.1版本:http://pie.googlecode.com/svn/trunk/src/util/getUsedValue.js
加上了对于 width/height/top/left/right/bottom 在IE下的支持,不过注意:似乎只在IE6的standard模式下才正确,在quirk mode下,得到的值似有问题。
加上了对于 width/height/top/left/right/bottom 在IE下的支持,不过注意:似乎只在IE6的standard模式下才正确,在quirk mode下,得到的值似有问题。
<!DOCTYPE html> <style> #test { width:50%; } </style> <div id="test" style="padding:2px; border:2px solid black;">test</div> <script src="http://pie.googlecode.com/svn/trunk/src/util/getUsedValue.js"></script> <script> var div = document.getElementById("test") try { alert(getUsedValue(div, 'width')) } catch(e) { alert(e.message) } </script>
3 楼
cloudgamer
2009-04-20
这么快哦
例如
<div id="tt" style="width:50%"></div>
<script>
var o=document.getElementById("tt");
if(document.defaultView){
alert(document.defaultView.getComputedStyle(o, null).width)
}else{
alert(o.currentStyle.width)
}
</script>
currentStyle是50%
getComputedStyle是准确值
我需要在ie获取准确值有什么方法
求教
例如
<div id="tt" style="width:50%"></div>
<script>
var o=document.getElementById("tt");
if(document.defaultView){
alert(document.defaultView.getComputedStyle(o, null).width)
}else{
alert(o.currentStyle.width)
}
</script>
currentStyle是50%
getComputedStyle是准确值
我需要在ie获取准确值有什么方法
求教
2 楼
hax
2009-04-20
@cloudgamer 能否说得更详细一点,给出testcase是最好的。
1 楼
cloudgamer
2009-04-20
宽度获取document.defaultView.getComputedStyle
和currentStyle不相同
怎么解决
和currentStyle不相同
怎么解决
发表评论
-
对于React体系的一点想法
2015-06-12 01:53 5987这一年来react和react native火得不行。 我对 ... -
图片lazyload兼容无脚本的小改进
2012-12-04 19:09 5887刚刚改进了一下某个页 ... -
tagName的大小写问题(QWrap选择器的一个bug)
2011-07-16 23:33 6570今儿写程序。 对于现 ... -
document.enableStyleSheetsForSet() 的兼容
2011-06-17 16:27 3539可能有不少同学已经了 ... -
IE神奇小bug一则
2010-12-03 18:05 2815<input type="text&quo ... -
前端优化新得一则
2010-02-22 15:05 2883因为把公司的电脑搞坏两台,这两天没有工作电脑可用了,所以就不干 ... -
一个史上最快的Web语法高亮引擎即将诞生
2009-05-02 03:33 6291对比对象是目前最有名,也是JavaEye所使用的highlig ... -
getUsedValue 0.4发布
2009-04-28 18:46 2101关于used value的基本解释,请看getUsedValu ... -
表单数据提交时的字符编码问题
2009-01-18 02:28 6258人老了,以前研究过的东西都忘记了。所以还是记录下来比较好。 ... -
再贴一次form的属性和控件name冲突的老问题
2008-11-07 18:59 3234更新: John Resig也谈到了这个问题。 而这里是一个非 ... -
一个嵌入式HTML引擎
2008-05-10 18:28 4166http://www.terrainformatica.com ... -
西方人通常发现不了的一个IE的bug
2008-05-09 20:00 9151这个问题我大概在一年 ... -
IE memory leak 备忘
2008-03-03 01:07 5247本篇只记录一下工具,有空再做研究。 Drip: http:/ ... -
批量修改style采取哪种方式好(续篇)
2008-02-24 19:20 4044前篇见批量修改style采取哪种方式好,主要是回答fins的提 ... -
XBL2的实现
2008-02-24 02:35 2419今天发现几种XBL2的实现。浏览器实现XBL2还要等上一段时间 ... -
批量修改style采取哪种方式好(答fins)
2008-02-23 21:55 4449fins同志向我提了个问题。因这个问题其实可以展开讨论,所以提 ... -
使用捕获事件监听器(useCapture=true)的陷阱及其对策
2008-02-17 07:02 9777DOM event flow有三个phase,capture、 ... -
写了一个XML Base的JS实现(简介篇)
2008-01-23 01:08 3204最近想在一个小应用中采用浏览器端的xinclude。找了一下, ... -
MSXML默认解析外部DTD
2007-11-07 18:17 3632昨日aimingoo说它测试xmldom的速度,发现载入一个w ... -
基于Ajax技术的VNC
2007-09-19 10:44 3070http://sourceforge.net/projects ...
相关推荐
这个数据集提供了2010年至2021年间加拿大各省的家庭支出与收入数据,这些数据根据人口统计和地理指标进行了分类。每行代表了年份(REF_DATE)、省份(GEO)以及编码后的支出或收入类型的唯一组合(COORDINATE)。以下是该数据集的关键特点及包含的列信息: 关键特点: 支出数据:家庭支出按照收入五分位数和支出类别进行分类。 收入数据:家庭收入值根据家庭类型、较年长成年人的年龄组别和收入水平细分。 地理位置匿名化:为了保护隐私,原始的地理位置标识符被替换为如“Province 1”这样的标签。 时间序列:涵盖了超过十年的财务数据(2010–2021),适合用于纵向经济和社会趋势分析。 包含的列: REF_DATE:记录年份(2010–2021) GEO:省份标签(例如,“Province 1”) Statistic:度量类型(例如,平均家庭支出) Before-tax household income quintile:税前家庭收入水平分组 Household expenditures, summary-level categories:支出类别 UOM:计量单位 COORD
1.【锂电池剩余寿命预测】GRU门控循环单元锂电池剩余寿命预测(Matlab完整源码和数据) 2.数据集:NASA数据集,已经处理好,B0005电池训练、测试; 3.环境准备:Matlab2023b,可读性强; 4.模型描述:GRU门控循环单元在各种各样的问题上表现非常出色,现在被广泛使用。 5.领域描述:近年来,随着锂离子电池的能量密度、功率密度逐渐提升,其安全性能与剩余使用寿命预测变得愈发重要。本代码实现了GRU门控循环单元在该领域的应用。 6.作者介绍:机器学习之心,博客专家认证,机器学习领域创作者,2023博客之星TOP50,主做机器学习和深度学习时序、回归、分类、聚类和降维等程序设计和案例分析,文章底部有博主联系方式。从事Matlab、Python算法仿真工作8年,更多仿真源码、数据集定制私信。
2000-2024年各省专利侵权案件结案数数据 1、时间:2000-2024年 2、来源:国家知识产权J 3、指标:专利侵权案件结案数 4、范围:31省 5、用途:可用于衡量知识产权保护水平
- 使用`<div>` 容器组织游戏界面,包含得分显示、游戏画布和操作按钮 - 支持三种游戏模式选择(一般模式、困难模式、无敌模式) - 移动端和桌面端兼容,提供触摸和键盘两种控制方式 2. CSS样式 : - 采用Flex布局实现页面居中显示 - 使用Grid布局实现方向按钮的排列 - 定义了游戏容器的阴影、圆角等视觉效果 - 为按钮添加了hover效果和过渡动画 3. JavaScript逻辑 : - 使用Canvas API实现游戏渲染 - 实现了蛇的移动、食物生成、碰撞检测等核心游戏逻辑 - 支持三种游戏模式,不同模式对应不同的游戏速度和规则 - 使用localStorage保存最高分记录 - 实现随机颜色生成,使游戏更具趣味性 代码整体结构清晰,功能完整,具有良好的可扩展性和可维护性。
台区终端电科院送检文档
内容概要:本文详细介绍了一个基于强化学习(RL)的飞机升阻力特性预测模型的实现过程。首先,定义了飞机空气动力学环境,包括状态空间、动作空间以及目标——预测升力系数(Cl)和阻力系数(Cd)。接着,通过生成模拟数据并进行预处理,创建了用于训练的数据集。然后,构建了一个神经网络代理模型,用于联合编码状态和动作,并预测升阻力系数。最后,实现了PPO算法来训练强化学习代理,使其能够根据当前状态选择最优动作,并通过不断迭代提高预测精度。文中还提供了完整的代码实现和详细的注释。 适合人群:航空航天领域的研究人员、机器学习工程师、对强化学习感兴趣的开发者。 使用场景及目标:适用于需要预测飞机升阻力特性的应用场景,如飞行器设计优化、性能评估等。目标是通过强化学习方法提升预测模型的准确性,从而为实际工程提供可靠的理论支持和技术手段。 其他说明:本文不仅涵盖了模型的设计与实现,还包括了数据生成、预处理等多个环节,有助于读者全面理解整个建模过程。同时,提供的代码可以作为研究和开发的基础,方便进一步扩展和改进。
cmock ut aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
lsm6d datasheet
风力发电机传动机构的设计(增速器)
genesys-zu(5ev)配置petalinux(从安装到嵌入)
django自建博客app
Android项目原生java语言课程设计,包含LW+ppt
幼儿园预防肺结核教育培训课件资料
STM32F103RCT6单片机控制气泵和电磁阀的开关 1、气泵和电磁阀的开和关均为开关量,实现控制方法有多种,比如继电器,但是继电器动作有噪声且体积较大,更好的方法为使用mos管。 2、mos管的选型:mos管选择主要注意两个参数即可,一是导通的电流,二是耐压值,并且常用NMOS管,根据要求,气泵和电磁阀供电电压为12V,所以选择的mos管耐压值要大于12V,这里选用耐压值为30V的MOS管,并且导通电流为5.8A。
因文件较多,数据存放网盘,txt文件内包含下载链接及提取码,永久有效。失效会第一时间进行补充。样例数据及详细介绍参见文章:https://blog.csdn.net/T0620514/article/details/146916073
将 Windows 系统中 “C:\windows\fonts” 目录下的所有字体文件
智能量测终端最新标准
滑道式提升机及其控制电路的设计.zip
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
三拐曲轴模锻工艺及模具设计说明书参考.zip