更改图像src内容时出现问题
Trouble with changing image src content
我有一个函数应该推迟对下一个函数的调用:
function waitFunc( func, time )
{
var startTime = performance.now();
var currTime = performance.now();
while ( (currTime - startTime) <= (time / 1))
{
currTime = performance.now();
}
func();
}
我的另外两个功能应该是更改我在正文中的标签的内容:
function showPlus()
{
//display plus
pictureImg.src = plus;
//blank only the form that contains input
inputForm.style.display="none";
pictureImg.style.display="block";
//after timeout start "showPicture" function
waitFunc(showPicture, 250);
//setTimeout(showPicture, 250);
}
function showPicture()
{
//generate picture pass
imgName = "../images/Slide"+ i + ".PNG";
if (i < 100)
{
//increase variable i by 1
++i;
//blank only the form that contains input
inputForm.style.display="none";
pictureImg.style.display="block";
//display picture
pictureImg.src = imgName;
//after timeout start "showForm" function
waitFunc(showForm, 750);
//setTimeout(showForm, 750);
}
}
在html:中
<img src="../images/Blank.png" id="pictures" name="pictures"/>
目前我正在尝试从showPlus函数调用waitFunc函数,我希望showPicture函数会在超时后被调用问题:当我使用waitFunc函数时,内容不会像它想象的那样改变。然而,当我使用setTimeout函数时,一切都很好。
有人能帮我吗(我希望这不是一个愚蠢的问题)?
附言:你可以在这里找到这一页。
谢谢!
编辑:您也可以在此处找到jsfiddle。请注意,fiddle正在使用setTimeout
,这样您就可以看到它应该如何工作;如果您对setTimeout
进行注释,并取消对其旁边的waitFunc
行的注释,那么您将能够看到问题。
有一个名为setTimeout()
的函数,它可以执行与您所需完全相同的功能。为什么不使用它而不是重新构建JavaScript呢。
此外,并非所有浏览器都支持performance.now();
:
https://developer.mozilla.org/en-US/docs/Web/API/Performance.now
此外,你的功能根本不应该工作:
var startTime = performance.now();
var currTime = performance.now();
这里应该有startTime == currTime
,因为您在不到1毫秒的时间内设置了相同的值。
while((currTime - startTime) <= (time / 1))
这里,(currTime - startTime)
应该等于零,并且(time / 1)
等于time
。
我不明白你想做什么,但如果你想"将函数作为参数传递",你的问题是重复的:将JavaScript函数作为参数
您必须知道javascript是在单个线程中执行的。如果运行使用while语句实现的等待函数,则页面的主线程将被冻结。
waitFunc实现和javascript的setTimeout的区别在于,setTimeout函数在一个单独的线程中运行。另一方面,您的功能是同步执行的。例如,showPicture函数在运行时将花费75000毫秒,因为循环将在每个waiFunc上等待750毫秒。
我希望这能有所帮助。
这个代码运行得很好。当页面加载时,主线程忙碌3秒,设置3.jpg图像,2秒后,图像再次返回为第一个图像。这是在使用你的功能和设置。
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="js/lib/jquery-2.1.1.js"></script>
<script>
function waitFunc( func, time )
{
var startTime = performance.now();
var currTime = performance.now();
while ( (currTime - startTime) <= (time / 1))
{
currTime = performance.now();
}
func();
}
$(function(){
waitFunc(function(){
$('#dd').prop('src', '3.jpg');
}, 3000);
setTimeout(function(){
$('#dd').prop('src', 'A_Girl_In_The_Horizon_by_yeg0.jpg');
}, 2000)
});
</script>
</head>
<body>
<img id='dd' src="A_Girl_In_The_Horizon_by_yeg0.jpg">
</body>
</html>
我运行了一些测试,正如我在问题评论中提到的,问题似乎是您使用的waitFunc
在加载图片和更改显示之前冻结了浏览器。
我得到了一些工作,但同样,你可能不喜欢它:解决方案将使用setTimeout
(具有低毫秒值:1-20)来调用waitFunc
(具有你想要的值减去1-20毫秒)。类似这样的东西:
setTimeout(waitAuxForm, 1);
然后你就有了功能:
function waitAuxForm() { waitFunc(showForm, 749); }
我把它放在一个jsfiddle中,你可以看到它在这里工作。
这个解决方案也带来了一些问题:
- 您必须在较短的时间内依赖
setTimeout
(您可能不喜欢这样) - 您可能需要1-20毫秒以上的时间来加载图片(您可能需要预加载它们,一旦缓存,即使值为1也可以工作)
我希望它能有所帮助:)
好的,所以我能够使用您提供的信息来处理这个问题。走出大门,看着你所拥有的,什么都没有定义。但是,假设在最后两个函数中都正确定义了inputForm
和pictureImg
,那么您唯一缺少的就是定义i
。
function showPicture()
{
var i = 0;
//generate picture pass
imgName = "../images/Slide"+ i + ".PNG";
[...]
}
我找不到你的waitFunc
函数有什么问题。如果用一个更简单的函数替换,它就会按预期工作。
function waitFunc( func, time )
{
[...]
while ( (currTime - startTime) <= (time / 1))
{
currTime = performance.now();
console.log(time); // log so you can see, for testing
}
func();
}
waitFunc(function(){console.log("Hello, world!");}, 750); // wait 750 ms, then say "Hello, world!"
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- 画布图像的问题
- 客户端图像调整大小.任何已知问题
- 阵列中随机图像的问题
- mouseOver上的隐藏图像问题
- Three.js CanvasRenderer,在将图像纹理设置为平面时出现问题
- 图像自适应调整大小+Javascript的问题
- 使用Javascript对象为具有两个背景图像的DIV设置样式时出现问题
- 图像缩略图库中的“下一个”和“上一个”按钮中的“问题”
- 在服务器上通过jQueryAjax上传加载的图像时出现问题
- Jquery图像循环问题
- 使用Angularjs和ionic的图像大小问题
- 图像上传功能将++(+1)副本添加到下一次上传.出了什么问题或如何重置“选定图像”
- 图像滑块中的分页问题
- 图像J宏路径问题
- 图像计时器中的问题
- Heroku 部分不提供我的一些图像,以前有人遇到过这个问题
- SVG到图像的转换问题
- AngularJS:下载二进制图像时出现异步问题
- HTML或Javascript问题-图像测试