我开始使用一个实际上可以顺利运行的JavaScript MMORPG.目前,我创建了一个演示来证明我可以移动角色并让他们互相聊天,以及看到彼此在现场移动.
现在Javascript计时器是我没有广泛使用的东西,但据我所知,如果我错了就纠正我,是否同时发生多个setIntervals并不能很好地运行b/c它只是在一个线程上.
让我们说我希望有10个不同的人通过使用带有setInterval的精灵背景定位来对怪物进行火球训练 - 该动画需要10个setIntervals来重新绘制用于精灵背景位置移位的DOM.那不是一辆大马车吗?
我想知道是否有办法绕过这一切,也许使用Canvas,这样动画可以同时发生而不创建事件队列,我不必担心计时器.
希望有意义,如果我需要进一步澄清,请告诉我.
我正在编写一个ubiquity插件,ajax查询的长函数回调阻塞了GUI线程,导致firefox锁定.
显而易见的解决方案似乎是使用某种延迟执行(即我们希望定期将执行此查询功能的执行添加到事件队列的末尾,然后允许执行其他命令.
我能想到这样做的唯一方法是使用settimeout,其超时为零......这是保证可行的,还是有更好的方法.
该HTML5 规范,各国setTimeout可以在不这是应该经过多少毫秒将函数"处理程序"被安排说额外的"超时"的说法来运行.
handle = window . setTimeout( handler [, timeout [, arguments ] ] )
Schedules a timeout to run handler after timeout milliseconds. Any arguments are passed straight through to the handler.
Run Code Online (Sandbox Code Playgroud)
但是,我没有找到解释当没有设置"超时"时间段时会发生什么的任何地方.
一个示例用法是Raphael库中的动画实现.
animationElements[length] && win.setTimeout(animation);
Run Code Online (Sandbox Code Playgroud) $(document).ready (
function ready() {
var tester = $.ajax({
async: false,
url: "test_parse.php"
}).responseText;
document.getElementById('test').innerHTML = tester;
setTimeout(ready(), 3000);
}
);
Run Code Online (Sandbox Code Playgroud)
嘿伙计我想在这个内部调用一个函数但是每次我这样做时我的浏览器只是继续加载并最终Apache关闭(显然不是我预期的结果).认为你们可以帮我找出解决方案吗?谢谢!
我想将一个参数传递给一个名为using的函数setTimeout.我找到了这三个选项:
A = 1;
// Method 1: closure things
setTimeout(function() { whatsA(A); }, 100);
// Method 2: third argument (same result with [A])
setTimeout(whatsA, 100, A);
// Method 3: eval
setTimeout('whatsA(' + A + ')', 100);
A = 2;
function whatsA(X) { console.log(X); }
Run Code Online (Sandbox Code Playgroud)
这在Internet Explorer 9中显示2,undefined和1.
方法1:显然,我不希望在传递之后更改参数(当然在简单整数的情况下).
方法2:如果只有Internet Explorer支持它,这将是完美的.
方法3:这似乎是唯一的选择.但它看起来并不像其他人那么漂亮,传递的东西要被评估而不是功能.
有没有更好的办法?
我有一个node.js应用程序,在任何给定时间运行10k-100k并发setTimeouts.(它们都是5分钟的持续时间.)回调非常简单,只是redis中的HDECRBY.即使在t2.micro实例上,我还没有遇到任何性能问题.
我知道我会遇到问题,如果回调函数不能得到尽可能快,因为我设置一个定时器,(显然)执行的,但在那里用具有高数下一个定时器的,问题本身?例如,如果我将其扩展到例如100万并发,我是否会遇到RAM瓶颈?千万?
所以我正在使用jquery进行自动完成搜索。在执行ajax函数之前,我必须设置一个延迟,因为我不想每次在文本框中键入内容时都要通过调用来锤打服务器。这是我的代码:
function searchVendor() {
setTimeout(searchVendor2, 5000);
}
function searchVendor2() {
var search = $('#inputVendor').val();
$.ajax({
type: 'POST',
url: '/getVendors',
data: {search: search},
dataType: 'json',
success: function(s) {
$('#inputVendor').autocomplete({source: s});
}
});
}
Run Code Online (Sandbox Code Playgroud)
所以函数searchVendor执行了onkeyup
<input type="text" class="form-control input-sm" id="inputVendor" onkeyup="searchVendor()">
Run Code Online (Sandbox Code Playgroud)
如果我键入3个字符(例如sas),则该函数searchVendor2将执行3次。5秒钟的延迟有效,但并没有停止并覆盖之前的延迟setTimeout。
我想发生的是,如果我在文本框中键入一个字符,它将在5秒钟后执行,但是!如果在5秒钟之前输入了新字符,setTimeout则会再次重置为5秒钟。只要用户在文本框中键入内容setTimeout,它就会重置为5秒钟,并且仅在经过5秒钟而无需用户再次键入时才执行。
感谢那些能提供帮助的人!
我正在将数据发送到ngrx store。之后我想滚动到一个特定的div,它使用来自商店的这些数据。
@ViewChild('datalist') private myScrollContainer: ElementRef;
this.store.dispatch(new SetClientSearchResultsAction(filteredData));
setTimeout(() => {
this.myScrollContainer.nativeElement.scrollIntoView({ behavior:'smooth', block: 'start'});
}, 300);
Run Code Online (Sandbox Code Playgroud)
下面是 HTML div。
<div #datalist id="mydata" *ngIf="clientSearchResults$ | async as searchResults"
class = 'result'>
<p> hellooo</p>
</div>
Run Code Online (Sandbox Code Playgroud)
将数据分派到存储后,我在我的 div 中获取滚动。但我不想使用setTimeout. 它不必要地等待 300 毫秒。有没有其他方法可以做到这一点?我只想滚动到我的div,当我的数据被发送或 ngif 条件得到满足时。
下面是我从 Store 获取值的组件的构造函数。
constructor(private store: Store<AppState>,
private formBuilder: FormBuilder, private _clientService: ClientService) {
this.clientSearchResults$ = this.store.select('searchResults');
}
Run Code Online (Sandbox Code Playgroud) keypress事件第一次触发时,即使输入有值,它也会记录一个空的输入值。它第二次记录该值,但与输入值相比,它落后了一个键击。您可以在下一个示例中检查此行为:
document.addEventListener('DOMContentLoaded', () =>
{
const input = document.querySelector('input');
input.addEventListener('keypress', e =>
{
console.log(e.target.value);
});
});Run Code Online (Sandbox Code Playgroud)
<input type="text"/>Run Code Online (Sandbox Code Playgroud)
但是,下一个解决方法使它起作用,即使我传入0ms.
document.addEventListener('DOMContentLoaded', () =>
{
const input = document.querySelector('input');
input.addEventListener('keypress', e =>
{
setTimeout(() => console.log(e.target.value), 0);
});
});Run Code Online (Sandbox Code Playgroud)
<input type="text"/>Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我按照 W3Schools 的本教程创建了一个图像幻灯片:https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_slideshow_auto
它使用递归函数setTimeout()来自动滑动图像。这对用户的浏览器性能有害吗?或者我可以放心使用它吗?
var slideIndex = 0;
showSlides();
function showSlides() {
var i;
var slides = document.getElementsByClassName("mySlides");
var dots = document.getElementsByClassName("dot");
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
slideIndex++;
if (slideIndex > slides.length) {
slideIndex = 1
}
for (i = 0; i < dots.length; i++) {
dots[i].className = dots[i].className.replace(" active", "");
}
slides[slideIndex - 1].style.display = "block";
dots[slideIndex - 1].className += " active";
setTimeout(showSlides, 2000); // Change image every …Run Code Online (Sandbox Code Playgroud) javascript ×10
settimeout ×10
jquery ×2
angular ×1
closures ×1
loops ×1
ngrx ×1
node.js ×1
onkeypress ×1
performance ×1
reactor ×1
recursion ×1
scope ×1
setinterval ×1
timer ×1
typescript ×1
ubiquity ×1