OO Javascript 调试 - 使用传输进行图像交换
OO Javascript Debugging - Image Swapping with Transistion
我正在尝试做一些OO JavaScript来简单地交换带有淡入淡出过渡的图片,但是页面加载时没有任何反应。
我所有的图像都命名为 Joe_#.jpg,其中 # 是一个数字。
这是我的图片JS.js文件:
//GLOBALS
var delay = 5000;
var opacityDelay = 100;
var pathBeginning = "images'joe'Joe_";
var pathEnding = ".jpg";
//IMAGE CLASS
function imageObj(id, start, end, initDelay) {
this.obj = document.getElementById(id);
this.cur = start;
this.start = start;
this.end = end;
this.initDelay = initDelay;
this.opacity = 1;
this.fadeIn = function() {
if(this.opacity < 1) {
this.opacity = this.opacity + 0.1;
obj.style.opacity = this.opacity;
setTimeout(this.fadeIn(), opacityDelay);
}
}
this.nextImage = function() {
if(this.cur == this.end) {
this.cur = this.start;
}
else {
this.cur++;
}
obj.src = pathBeginning + this.cur.toString() + pathEnding;
this.fadeIn();
}
this.fadeOut = function() {
if(this.opacity > 0.5) {
this.opacity = this.opacity - 0.1;
obj.style.opacity = this.opacity;
setTimeout(this.fadeOut(), opacityDelay);
}
else {
this.nextImage();
}
}
this.process = function() {
setInterval(this.fadeOut(), delay + Math.floor(Math.random()*delay));
}
}
imageObj.prototype.startProcess = function() {
setTimeout(this.process(), this.initDelay);
}
//IMAGE OBJECTS
var img1 = imageObj('img1', 1, 5, 5000);
img1.startProcess();
以下是我在 HTML 页面上包含所有内容的方式:
<head>
<!-- Links/Scripts -->
<link rel="stylesheet" type="text/css" href="style.css"/>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="myJavascript.js" type="text/javascript"></script>
<script src="imagesJS.js" type="text/javascript"></script>
这是myJavascript.js文件(也许它与它有关(:
// GLOBAL VARIABLES
var body = $('.body');
//***********//
// On Load //
//***********//
$(document).ready(function(){
//MenuItem Color Change
$('.menuItem').mouseover(function(){
$(this).css({"color":"#6699ff"})
}).mouseout(function(){
$(this).css({"color":"black"})
});
});
我应该将对象放在 onLoad 函数中吗? 我似乎找不到问题。提前感谢!
//###更新 1
这是更正下面net.uk.sweet的建议以及此链接中的一些范围问题后的代码 在 JavaScript 类函数中使用 setTimeout((
更新的代码 -
//GLOBALS
var delay = 5000;
var opacityDelay = 100;
var pathBeginning = "images'joe'Joe_";
var pathEnding = ".jpg";
//IMAGE CLASS
function imageObj(id, start, end, initDelay) {
this.obj = document.getElementById(id);
this.cur = start;
this.start = start;
this.end = end;
this.initDelay = initDelay;
this.opacity = 1;
this.fadeIn = function() {
if(this.opacity < 1) {
this.opacity = this.opacity + 0.1;
this.obj.style.opacity = this.opacity;
setTimeout(fadeIn, opacityDelay);
}
}
this.nextImage = function() {
if(this.cur == this.end) {
this.cur = this.start;
}
else {
this.cur++;
}
this.obj.src = pathBeginning + this.cur.toString() + pathEnding;
this.fadeIn();
}
this.fadeOut = function() {
if(this.opacity > 0.5) {
this.opacity = this.opacity - 0.1;
this.obj.style.opacity = this.opacity;
setTimeout(fadeOut, opacityDelay);
}
else {
this.nextImage();
}
}
this.process = function() {
var self = this;
self.fadeOut();
setInterval(function() {self.fadeOut();}, delay+Math.floor(Math.random()*delay));
}
}
imageObj.prototype.startProcess = function() {
var self = this;
setTimeout(function() {self.process();}, this.initDelay);
}
//IMAGE OBJECTS
var img1 = new imageObj('img1', 1, 5, 5000);
img1.startProcess();
不幸的是,它仍然不起作用。有什么想法吗?
//#解决方案更新
我不得不在我的另一个javascript文件的onload函数中添加startProcess函数的创建和调用。
下面是解决方案代码:
//GLOBALS
var delay = 5000;
var opacityDelay = 100;
var pathBeginning = "images''joe''Joe_";
var pathEnding = ".jpg";
//IMAGE CLASS
function imageObj(id, start, end, initDelay) {
this.obj = document.getElementById(id);
this.cur = start;
this.start = start;
this.end = end;
this.initDelay = initDelay;
this.opacity = 1;
this.fadeIn = function() {
var self = this;
if(this.opacity < 1) {
this.opacity = this.opacity + 0.1;
this.obj.style.opacity = this.opacity;
setTimeout(function() {self.fadeIn();}, opacityDelay);
}
}
this.nextImage = function() {
if(this.cur == this.end) {
this.cur = this.start;
}
else {
this.cur++;
}
this.obj.src = pathBeginning + this.cur.toString() + pathEnding;
this.fadeIn();
}
this.fadeOut = function() {
var self = this;
if(this.opacity > 0.2) {
this.opacity = this.opacity - 0.1;
this.obj.style.opacity = this.opacity;
setTimeout(function() {self.fadeOut();}, opacityDelay);
}
else {
self.nextImage();
}
}
this.process = function() {
var self = this;
self.fadeOut();
setInterval(function() {self.fadeOut();}, delay + Math.floor(Math.random()*delay));
}
}
imageObj.prototype.startProcess = function() {
var self = this;
setTimeout(function() {self.process();}, this.initDelay);
}
感谢所有的帮助net.uk.sweet!!学到了很多关于范围和 chrome 开发工具的知识!希望有一天我能帮助别人!
如果您熟悉自己喜欢的浏览器中的调试工具,您将对您大有帮助(方法如下(。控制台将输出代码中任何错误的详细信息以及您输入的任何日志语句,以帮助您跟踪程序流程,并且您可以使用高级调试功能(如断点(单步执行代码并查看代码的故障位置。
也就是说,我可以看到您的代码存在一些明显的问题。
使用函数定义在 JavaScript 中实例化新对象时,需要使用 new
关键字:
var img1 = new imageObj('img1', 1, 5, 5000);
每次使用 setTimeout
时,您都会直接调用函数,而不是通过引用传递它。这意味着函数将立即执行,而不是在超时完成后执行。例如,应更新 startProcess 方法中的代码,如下所示:
// Note the missing parenthesis. You should pass the function to
// setTimeout by reference instead of invoking the function directly.
setTimeout(this.process, this.initDelay);
但。。。在使用setTimeout
时,您还会遇到与 scope 相关的问题(有关很好的解释,请参阅此 StackOverflow 线程上的答案(。尝试使用闭包来确保使用实例而不是全局窗口对象调用方法:
imageObj.prototype.startProcess = function() {
var self = this;
setTimeout(function() {
self.process();
}, this.initDelay);
}
我认为obj
变量超出了您引用它的方式的范围。尝试使用以下方法访问它:
this.fadeIn = function() {
// Sending information to the console is a very simple way of debugging
// your program. You can even use it to trace the value of variables!
console.log('In here! Current image opacity is:', this.opacity);
if(this.opacity < 1) {
this.opacity = this.opacity + 0.1;
this.obj.style.opacity = this.opacity;
setTimeout(this.fadeIn(), opacityDelay);
}
}
- 使用javascript onclick下拉菜单进行图像交换
- 用较大的图像交换缩略图
- Javascript中的图像交换
- 打开和关闭的图像交换未在正确的时间更改
- 创建随机图像交换并禁止鼠标悬停事件
- Javascript内存游戏-图像交换
- 链路翻转时的 DIV 背景图像交换
- 弗兰肯斯坦图像交换JavaScript需要整洁和可能的自动化
- 如何在滑块中使用比较浏览器窗口大小的函数将图像交换到另一个图像
- JavaScript 鼠标悬停图像交换问题
- 图像交换单击jquery,3张图像
- 使用 JQuery 进行图像交换之间的定时转换
- 从固定的服务器时间启动图像交换JavaScript
- 如何使用表单和javascript进行图像交换
- 图像交换在Firefox中不起作用,但在Chrome和IE中有效
- 尝试将随机图像与其他随机图像交换
- OO Javascript 调试 - 使用传输进行图像交换
- jQuery图像交换if-else语句不起作用
- chrome扩展弹出窗口中的图像交换
- Javascript图像交换是't工作