- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在调试新闻动态时遇到了很多困难-我是使用JavaScript从头开始编写的。
除了IE9(以及某些移动浏览器,Opera Mobile)运行缓慢的浏览器外,它在大多数浏览器上都可以正常工作。
使用开发人员工具>探查器使我能够找到问题的根本原因。
这是对offsetLeft
的调用,以确定是否旋转代码行进器,即第一个元素成为最后一个元素。
function NeedsRotating() {
var ul = GetList();
if (!ul) {
return false;
}
var li = GetListItem(ul, 1);
if (!li) {
return false;
}
if (li.offsetLeft > ul.offsetLeft) {
return false;
}
return true;
}
function MoveLeft(px) {
var ul = GetList();
if (!ul) {
return false;
}
var li = GetListItem(ul, 0);
if (!li) {
return false;
}
var m = li.style.marginLeft;
var n = 0;
if (m.length != 0) {
n = parseInt(m);
}
n -= px;
li.style.marginLeft = n + "px";
li.style.zoom = "1";
return true;
}
最佳答案
DOM操作
我同意@samccone的观点,即如果GetList()
和GetListItem()
每次都在执行DOM操作,则应尽量保存对那些调用所检索的元素的引用,并减少DOM操作。
then I can just manipulate that variable and hopefully it won't go out of sync with the "real" value by calling offsetLeft.
var li = ul.getElementsByTagName( "li" )[ index ];
offsetLeft
,而无需执行另一个DOM操作(例如
getElementsByTagName
)来检索该对象。
var offsetLeft = ul.getElementsByTagName( "li" )[ index ].offsetLeft;
offsetLeft
确实是一个瓶颈,是否有可能您可以改写一下以减少阅读量呢?在这种情况下,每次轮换出第一项内容时,您是否可以为新的第一项内容读取一次
offsetLeft
,然后仅在每次调用
MoveLeft()
时将该值减一,直到达到
0
(或其他任何值)?例如。
function MoveLeft( px ) {
current_offset -= px;
offsetLeft
,也许可以做一些事情,一次读取每个列表项的宽度,一次读取第一项的
offsetLeft
,然后使用这些值确定何时旋转,而无需再次调用
offsetLeft
。
I think I get it... so elms["foo"] would have to be a global variable?
I think really I just need to use global variables instead of calling offsetLeft every 10 ms.
( function () {
var elements = {};
function NeedsRotating() {
...
}
function example() {
// The follow var declaration will block access
// to the outer `elements`
var elements;
}
// Rest of your code here
} )();
elements
的作用域是包含它的匿名函数。它不是全局变量,因此在匿名函数之外不可见。只要您在内部函数中未声明相同名称的变量,匿名函数内的任何代码(包括函数(在本例中为NeedsRotating()
))都将可见。 ( function () {
var ticker = {};
ticker.elements = {};
// Assign a method to a property of `ticker`
ticker.NeedsRotating = function () {
// All methods called on `ticker` can access its
// props (e.g. `elements`) via `this`
var ul = this.elements.list;
var li = this.elements.list_item;
// Example of calling another method on `ticker`
this.do_something();
} ;
// Rest of your code here
// Something like this maybe
ticker.start();
} )();
ticker
也不是全局变量。 setTimeout
,最好这样做:
t = setTimeout( TickerLoop, i );
t = setTimeout("TickerLoop();", i);
setTimeout
,而不是传递字符串,就像使用
eval
一样。
setInterval
而不是
setTimeout
。
Because surely any code executed in setTimeout would be out of scope of the closure?
setTimeout
调用函数不会干扰函数对封闭变量的访问。这是一个简单的演示代码段:
( function () {
var offset = 100;
var whatever = function () {
console.log( offset );
};
setTimeout( whatever, 10 );
} )();
setTimeout
将干扰方法中
this
的绑定(bind),如果将所有内容封装在一个对象中,这将是一个问题。以下内容将不起作用:
( function () {
var ticker = {};
ticker.offset = 100;
ticker.whatever = function () {
console.log( this.offset );
};
setTimeout( ticker.whatever, 10 );
} )();
ticker.whatever
内部,
this
不会引用
ticker
。但是,您可以在此处使用匿名函数来形成闭包来解决该问题:
setTimeout( function () { ticker.whatever(); }, 10 );
Should I store it in a class variable i.e.
var ticker.SecondLiOffsetLeft = GetListItem(ul, 1).offsetLeft
then I would only have to calloffsetLeft
again when I rotate the list.I think that's the best alternative to a global variable?
offsetLeft
。 offsetLeft
属性,而无需重复执行诸如getElementsByTagName()
这样的DOM操作来获取列表对象。 offsetLeft
,因为那样只会存储值,并且不会保持同步。
li
对象并将它们存储在类似数组的结构中。例如。
this.li = ul.getElementsByTagName( "li" );
this.current_item = ###;
// or
this.li.current = this.li[ ### ];
// Then
this.li[ this.current_item ].offsetLeft
// or
this.li.current.offsetLeft
li
对象存储在数组中,并针对每次旋转进行此操作:
this.li.push( this.li.shift() );
// then
this.li[0].offsetLeft
关于JavaScript函数offsetLeft-缓慢返回值(主要是IE9),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9928016/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!