本帖最后由 SHANDIANDIAN 于 2013-12-16 13:44:29 编辑

解决方案 »

  1.   

    if(pic[i].indexOf('http://')<0)
    {
    pic1[i] = root + pic[i] +'_middle.jpg';
    pic2[i] = root + pic[i] +'_small.jpg';
    }
    else
    pic1[i]=pic2[i]=pic[i];
    //var ig = new Image();
    //ig.src = pic[i];在还没有看代码逻辑之前,先问一下,为何这个地方的else没有添加{},
    那么else是只包括了下面的一条语句,还是包括了几条语句,这让后来看代码的人自己猜测是不是因为这个地方,导致逻辑错误吗?所以,建议:不管判断的逻辑中,是不是只有一条语句,都加上{}分隔一下吧,这样以后自己看也清楚,不需要思考,写的时候,是什么逻辑了。
      

  2.   

    this.szflash_move=function() //供外部调用图片切换
    {这个地方,把注释加的地方,确定不会导致错误吗?
    加在函数定义之前,或者加在函数内容的第一行,也会更清晰的啊。
      

  3.   


    这里ELSE 有只有一条语句的
    pic1[i]=pic2[i]=pic[i]; 就是给这个赋值的
      

  4.   

    jsflash这个函数名,是在哪里结尾的?如果你这个函数是包含了stopbg这个函数的,那么stopbg就是jsflash内部的私有方法,外面是不可以调用这个stopbg这个方法的。<li class="" onmouseover="stopbg('+i+')">这个地方,你去调用,能调用到吗?还有,你这上面有三个定时变量,timer,timer1,timer2,哪一个是你没有清除掉的。同时,先不要使用构造函数了吧,你构造函数内部,szjx.timer =null;这样的取值方式,那就太唯一了,如果你把构造函数实例化成为另外一个名称,比如szix1,那你不是连上面的取值,都会报错吗?建议,只单独写功能模块,等你写好了,功能都实现了,再慢慢改成构造函数的方式呗,你应该也是在学习这个嘛,所以先实现,后面慢慢优化代码,其实也可以学习到很多东西的。
      

  5.   

    stopbg 是外部的,不在jsflash里面,我也不知道那里错了,定时器太难调整了
      

  6.   

    szjx.timer = setTimeout(function(){szjx.szflash_move();},500);
    //在onmouseover时,添加这个定时器
    $('szflash_pic').getElementsByTagName('li')[k].onmouseout = function(){
    if(szjx.timer){
    alert(szjx.timer); //这里有问题计时器的数值会一直累积,并没有清楚掉
    //你在这里检测计时器是否存在,可是,你还没有清除计时器呢。
    clearTimeout(szjx.timer);
    szjx.timer =null;
    }
    szjx.a++;
    //上面刚清楚,这个地方,立即又再次添加计时器了。
    szjx.timer = setTimeout(function(){szjx.szflash_move();},4000);
    }
    理解不了你的逻辑了,不看了,唉唉同时,我看到的你给的代码里面,jsflash函数没有结尾的“}”,你看看你有这问题没。
      

  7.   

    完整的代码是这样的,现在已经没发现任何问题,可以自由切换
    function jsflash(files,links,texts,username,avatar,mid,w,h,root)
    {
    var str = '',str1 = '';
    var speed = 3000; //图片切换速度
    var level=0,level2=100;
    this.timer2 = null;
    this.timer1=null;
    this.timer =null;
    this.b=0;
    this.a=1;
    if(files)
    {
    var pic = files.split('|');
    var links = links.split('|');
    var texts = texts.split('|');
    var username = username.split('|');
    var avatar = avatar.split('|');
    var mid = mid.split('|');
    var pic1 = new Array();
    var pic2 = new Array();
    for(var i=0;i<pic.length;i++)
    {
    if(pic[i].indexOf('http://')<0)
    {
    pic1[i] = root + pic[i] +'_middle.jpg';
    pic2[i] = root + pic[i] +'_small.jpg';
    }
    else
    pic1[i]=pic2[i]=pic[i];
    //var ig = new Image();
    //ig.src = pic[i];
    //var pim = pimsize1(ig.height,ig.width,300,650);
    str += '<div class="szflash_bg" id="szflash_bg'+i+'" style="display:none;"><a href="'+links[i]+'" target="_blank"><img height="300" width="650" src="'+pic1[i]+'" alt=""/></a><div class="szflash_member"><a href="index.php?ac=space&id='+mid[i]+'"><img src="'+avatar[i]+'_small.png" alt="" /></a><div class=""><a href=""><h3>'+texts[i]+'</h3></a></div></div></div>';
    str1 += '<li class="" onmouseover="stopbg('+i+')"><a href="'+links[i]+'" target="_blank" class=""><img src="'+pic2[i]+'" height="60" width="90" alt="" /></a><a href="'+links[i]+'" target="_blank" class=""><span class="select_border"></span></a></li>' ;
    }
    str1 ='<ul class="szflash_ul" id="szflash_pic">'+str1+'</ul><div class="szflash_div"></div>';
    str += str1;
    $('szflash').innerHTML = str;
    $('szflash_bg0').style.display='';
    $('szflash_pic').getElementsByTagName('li')[0].className = 'selectli';
    this.timer = setTimeout(function(){szjx.szflash_move();},3000);
    }
    this.szflash_move=function()
    {
    clearInterval(szjx.timer1);
    szjx.timer1=null;
    if(szjx.a>=i)
    szjx.a=0;
    if(szjx.b>=i)
    szjx.b=0;
    if(szjx.a!=szjx.b)
    {
    szjx.timer2 = setInterval(function(){display();},100);
    }
    }

    function display()
    {
    level +=20;
    level2 -=20;
    try{
    var aa = $('szflash_bg'+szjx.a).style;
    var bb = $('szflash_bg'+szjx.b).style;}
    catch(e)
    {
    alert(szjx.a+','+szjx.b);
    szjx.a=0;
    var aa = $('szflash_bg'+szjx.a).style;
    var bb = $('szflash_bg'+szjx.b).style;
    }

    if(!document.all)
    {
    if(bb.opacity <0 || bb.display=='none')
    {
    bb.display ='none';
    $('szflash_pic').getElementsByTagName('li')[szjx.b].className = '';
    }
    else
    {
    bb.opacity =level2/100;
    }
    if(aa.display=='none')
    {
    aa.opacity =0;
    aa.display ='';
    }
    else
    {
    if(aa.opacity >1 && aa.display =='')
    {
    $('szflash_pic').getElementsByTagName('li')[szjx.a].className = 'selectli';
    szjx.b=szjx.a;
    szjx.a++;
    level=0;
    level2=100;
    clearInterval(szjx.timer2);
    szjx.timer2=null;
    szjx.timer1 = setInterval(function(){szjx.szflash_move();},speed);
    }
    else
    {//兼容IE模式
    aa.opacity =level/100;
    }
    }
    }
    else
    {
    var alphab=bb.filter.replace(/([^\d])/g,'');
    if(alphab <0 || bb.display=='none')
    {
    bb.display ='none';
    $('szflash_pic').getElementsByTagName('li')[szjx.b].className = '';
    }
    else
    {
    bb.filter='alpha(opacity='+level2+')';
    }
    if(aa.display=='none')
    {
    aa.filter='alpha(opacity='+0+')';
    aa.display ='';
    }
    else
    {
    var alphaa=aa.filter.replace(/([^\d])/g,'');
    if(alphaa>100 && aa.display =='')
    {
    $('szflash_pic').getElementsByTagName('li')[szjx.a].className = 'selectli';
    szjx.b=szjx.a;
    szjx.a++;
    level=0;
    level2=100;
    clearInterval(szjx.timer2);
    szjx.timer2=null;
    szjx.timer1 = setInterval(function(){szjx.szflash_move();},speed);

    }
    else
    aa.filter='alpha(opacity='+level+')';
    }
    }
    }
    }function stopbg(k)
    {
    if(!szjx.timer2)
    {
    clearInterval(szjx.timer1);
    szjx.timer1 =null;
    if(szjx.timer)
    {
    clearTimeout(szjx.timer);
    szjx.timer =null;
    }
    szjx.a=k;
    szjx.timer = setTimeout(function(){szjx.szflash_move();},500);
    $('szflash_pic').getElementsByTagName('li')[k].onmouseout = function()
    {
    clearInterval(szjx.timer1);
    szjx.timer1 =null;
    if(szjx.timer)
    {
    clearTimeout(szjx.timer);
    szjx.timer =null;
    }
    if(szjx.a==szjx.b)
    szjx.a++;
    szjx.timer = setTimeout(function(){szjx.szflash_move();},3000);
    }
    }
    }
    防百度旅游首页的一个效果