怎样让某个函数执行其中一个 或者全部执行

luliangshu350 2012-10-15 02:27:44

window.onload = function(){
if(document.getElementById("c_canvas1")){
var ctx1 = document.getElementById("c_canvas1").getContext('2d');
}
if(document.getElementById("c_canvas2")){
var ctx2 = document.getElementById("c_canvas2").getContext('2d');
}
var ctx = ctx1||ctx2;
var img = new Image();
var speed = 120;
img.onload = function(){
function drawStar(){
for(var i = 0; i < 4; i++ ){
draw(i);
}
function draw(x){
setTimeout(function(){
ctx.clearRect(0,0,270,270);
ctx.drawImage(img,0,270*x,270,270,0,0,270,270);
},speed*x);
}
}
setInterval(drawStar,480);
}
if( ctx == ctx1){
ctx = ctx1;
img.src = 'themes/images/imgc/an1.png';
}
if( ctx == ctx2){
ctx = ctx2;
img.src = 'themes/images/imgc/an2.png';
}
}


代码在上面。 大手们应该一看就能明白。 我想让 ctx == ctx1 或者 ctx == ctx2 都执行中间那个 。而且如果2个都有的话也要都执行。现在不管怎么写都只执行其中一个。
求大手们帮我修改下
在线等。。急
...全文
180 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
泡泡鱼_ 2012-10-15
  • 打赏
  • 举报
回复
类似于以下这样
function drawImage(a,b,c){
this.draw=function(x){
setTimeout(function(){
a.clearRect(0,0,270,270);
a.drawImage(b,0,270*x,270,270,0,0,270,270);
},c*x);
};
this.drawStar=function(){
for(var i = 0; i < 4; i++ ){
this.draw(i);
}
};
this.init=function(){
var _that=this;
setInterval(function(){
_that.drawStar();
},480);
}
};
var img,speed = 120;
if(document.getElementById("c_canvas1")){
var ctx1 = document.getElementById("c_canvas1").getContext('2d');
if(ctx1){
img = new Image();//有问题的话或许应该变更这里为:document.getElementById("图片容器的ID")试试,下面的也一样。不明白drawImage工作机制,不敢肯定
img.src = 'themes/images/imgc/an1.png';
img.onload=function(){
new drawImage(ctx1,img,speed).init();
}
};
};
if(document.getElementById("c_canvas2")){
var ctx2 = document.getElementById("c_canvas2").getContext('2d');
if(ctx2){
img = new Image();
img.src = 'themes/images/imgc/an2.png';
img.onload=function(){
new drawImage(ctx2,img,speed).init();
}
}
};
  • 打赏
  • 举报
回复
估计你只能执行第二个吧
  • 打赏
  • 举报
回复
试试
window.onload = function(){
if(document.getElementById("c_canvas1")){
var ctx1 = document.getElementById("c_canvas1").getContext('2d');
}
if(document.getElementById("c_canvas2")){
var ctx2 = document.getElementById("c_canvas2").getContext('2d');
}
var ctx = ctx1||ctx2;
var img1 = new Image();
var img2 = new Image();
var speed = 120;
img.onload = function(){
function drawStar(){
for(var i = 0; i < 4; i++ ){
draw(i);
}
function draw(x){
setTimeout(function(){
ctx.clearRect(0,0,270,270);
ctx.drawImage(img,0,270*x,270,270,0,0,270,270);
},speed*x);
}
}
setInterval(drawStar,480);
}
if( ctx == ctx1){
ctx = ctx1;
img1.src = 'themes/images/imgc/an1.png';
}
if( ctx == ctx2){
ctx = ctx2;
img2.src = 'themes/images/imgc/an2.png';
}
}
luliangshu350 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

我只看到一个Image对象

个人感觉吧,你这解题思路有点问题
你应该将那个img.onload事件中的代码做成一个公用的函数,在函数部通过参数或者其他方式去设置它的触发对象

然后每设置一个图片的src后,再设置它的onload事件
[/Quote]
非常感谢你提供的思路 封装了这个函数 然后传参进去。。3Q
泡泡鱼_ 2012-10-15
  • 打赏
  • 举报
回复
我只看到一个Image对象

个人感觉吧,你这解题思路有点问题
你应该将那个img.onload事件中的代码做成一个公用的函数,在函数部通过参数或者其他方式去设置它的触发对象

然后每设置一个图片的src后,再设置它的onload事件
KDJack 2012-10-15
  • 打赏
  • 举报
回复
太深奥了,简单点啊 比如那个实例来说。。。
luliangshu350 2012-10-15
  • 打赏
  • 举报
回复


就这2个动画。我现在写的只能播放其中一个
luliangshu350 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你的ctx1是不是也有可能会等于ctx2??
如果会的话,那么将因为你两个条件判断语句当ctx == ctx1==ctx2的时候

下面的会覆盖上面的

而且我有点看不明白你的描述

“都执行中间那个 。而且如果2个都有的话也要都执行”
“中间那个”是指什么呀??
“2个都有”是怎么个都有呀?
“也都要执行”执行什么呀?
[/Quote]

中间那个指的是img.onload里面的 就相当于一个共用的图片剪裁路径。
页面里有2个id 。分别是2个动画 而这2个动画仅仅是图片不一样。 2个都有就是 页面里面2个元素可以播放各自对应的动画。我现在的条件写的问题 所以怎么都只执行其中一个动画
liutao132 2012-10-15
  • 打赏
  • 举报
回复
不知所云
泡泡鱼_ 2012-10-15
  • 打赏
  • 举报
回复
你的ctx1是不是也有可能会等于ctx2??
如果会的话,那么将因为你两个条件判断语句当ctx == ctx1==ctx2的时候

下面的会覆盖上面的

而且我有点看不明白你的描述

“都执行中间那个 。而且如果2个都有的话也要都执行”
“中间那个”是指什么呀??
“2个都有”是怎么个都有呀?
“也都要执行”执行什么呀?

87,991

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧