Marquee in Firefox

问:

Hi,

I made a marquee to show news moving horizontaly from right to left and have a width 80%.It is working fine in IE browser but not in Firefox.In Firefox it continue after the bound I expect and appear throw the next image where it should disappear.Could any one help me to solve the problem?. 


答:

Hi TheEagle
 

I have read the thread carefully. As far as I can see, some version of Firefox don’t support the <marqueue>, you can try the following code, it works on Mozilla Firefox 2.0


< script type = " text/javascript " >
<!--
document.write(
' <marquee behavior="scroll" onmouseout=start(); onmouseover=stop(); direction="left" 

scrollamount="8" width="30%">
' );
document.write(
' I made a marquee to show news moving horizontaly from right to left and have a width 80% ' );
document.write(
' </marquee> ' );
-->
< / script>

 

Another way to show marqueue effect is using JavaScript, to make a DIV run like a marqueue. But it is not recommend, because of its complex JavaScript code.


You can try the code from http://bbs.div-css.com/job.php?action=download&pid=tpc&tid=184&aid=57
  

< meta  http-equiv ="Content-Type"  content ="text/html; charset=utf-8"   />  
< style  type ="text/css" >  
div
{border:1px solid #ccc;background:#eee;margin:10px;} 
</ style >  

< hr  />  

< script  type ="text/javascript" >  
function Marquee() 

this.ID = document.getElementById(arguments[0]); 
if(!this.ID) 

  alert(
"error!"); 
  
this.ID = -1
  
return
}
 
this.Direction = this.Width = this.Height = this.DelayTime = this.WaitTime = this.CTL = this.StartID = this.Stop = this.MouseOver = 0
this.Step = 1
this.Timer = 30
this.DirectionArray = {"top":0 , "up":0 , "bottom":1 , "down":1 , "left":2 , "right":3}
if(typeof arguments[1== "number" || typeof arguments[1== "string")this.Direction = arguments[1]; 
if(typeof arguments[2== "number")this.Step = arguments[2]; 
if(typeof arguments[3== "number")this.Width = arguments[3]; 
if(typeof arguments[4== "number")this.Height = arguments[4]; 
if(typeof arguments[5== "number")this.Timer = arguments[5]; 
if(typeof arguments[6== "number")this.DelayTime = arguments[6]; 
if(typeof arguments[7== "number")this.WaitTime = arguments[7]; 
if(typeof arguments[8== "number")this.ScrollStep = arguments[8]; 
this.ID.style.overflow = this.ID.style.overflowX = this.ID.style.overflowY = "hidden"
this.ID.noWrap = true
this.IsNotOpera = (navigator.userAgent.toLowerCase().indexOf("opera"== -1); 
if(arguments.length >= 7)this.Start(); 
}
 
Marquee.prototype.Start 
= function() 

if(this.ID == -1)return
if(this.WaitTime < 800)this.WaitTime = 800
if(this.Timer < 20)this.Timer = 20
if(this.Width == 0)this.Width = parseInt(this.ID.style.width); 
if(this.Height == 0)this.Height = parseInt(this.ID.style.height); 
if(typeof this.Direction == "string")this.Direction = this.DirectionArray[this.Direction.toString().toLowerCase()]; 
this.HalfWidth = Math.round(this.Width / 2); 
this.HalfHeight = Math.round(this.Height / 2); 
this.BakStep = this.Step; 
this.ID.style.width = this.Width + "px"
this.ID.style.height = this.Height + "px"
if(typeof this.ScrollStep != "number")this.ScrollStep = this.Direction > 1 ? this.Width : this.Height; 
var templateLeft = "MSCLASS_TEMP_HTML MSCLASS_TEMP_HTML"
var templateTop = "MSCLASS_TEMP_HTML MSCLASS_TEMP_HTML"
var msobj = this
msobj.tempHTML 
= msobj.ID.innerHTML; 
if(msobj.Direction <= 1

  msobj.ID.innerHTML 
= templateTop.replace(/MSCLASS_TEMP_HTML/g,msobj.ID.innerHTML); 
}
 
else 

  
if(msobj.ScrollStep == 0 && msobj.DelayTime == 0
  

  msobj.ID.innerHTML 
+= msobj.ID.innerHTML; 
  }
 
  
else 
  

  msobj.ID.innerHTML 
= templateLeft.replace(/MSCLASS_TEMP_HTML/g,msobj.ID.innerHTML); 
  }
 
}
 
var timer = this.Timer; 
var delaytime = this.DelayTime; 
var waittime = this.WaitTime; 
msobj.StartID 
= function(){msobj.Scroll()} 
msobj.Continue 
= function() 
    

    
if(msobj.MouseOver == 1
    

      setTimeout(msobj.Continue,delaytime); 
    }
 
    
else 
    
{ clearInterval(msobj.TimerID); 
      msobj.CTL 
= msobj.Stop = 0
      msobj.TimerID 
= setInterval(msobj.StartID,timer); 
    }
 
    }
 
msobj.Pause 
= function() 
  

    msobj.Stop 
= 1
    clearInterval(msobj.TimerID); 
    setTimeout(msobj.Continue,delaytime); 
  }
 
msobj.Begin 
= function() 
  

  msobj.ClientScroll 
= msobj.Direction > 1 ? msobj.ID.scrollWidth / 2 : msobj.ID.scrollHeight / 2
  
if((msobj.Direction <= 1 && msobj.ClientScroll <= msobj.Height + msobj.Step) || (msobj.Direction > 1 && msobj.ClientScroll <= msobj.Width + 

msobj.Step))  

    msobj.ID.innerHTML 
= msobj.tempHTML; 
    
delete(msobj.tempHTML); 
    
return
  }
 
  
delete(msobj.tempHTML); 
  msobj.TimerID 
= setInterval(msobj.StartID,timer); 
  
if(msobj.ScrollStep < 0)return
  msobj.ID.onmousemove 
= function(event) 
      

      
if(msobj.ScrollStep == 0 && msobj.Direction > 1
      

        
var event = event || window.event; 
        
if(window.event) 
        

        
if(msobj.IsNotOpera) 
        

          msobj.EventLeft 
= event.srcElement.id == msobj.ID.id ? event.offsetX - msobj.ID.scrollLeft : event.srcElement.offsetLeft - 

msobj.ID.scrollLeft 
+ event.offsetX; 
        }
 
        
else 
        

          msobj.ScrollStep 
= null
          
return
        }
 
        }
 
        
else 
        

        msobj.EventLeft 
= event.layerX - msobj.ID.scrollLeft; 
        }
 
        msobj.Direction 
= msobj.EventLeft > msobj.HalfWidth ? 3 : 2
        msobj.AbsCenter 
= Math.abs(msobj.HalfWidth - msobj.EventLeft); 
        msobj.Step 
= Math.round(msobj.AbsCenter * (msobj.BakStep*2/ msobj.HalfWidth); 
      }
 
      }
 
  msobj.ID.onmouseover 
= function() 
      

      
if(msobj.ScrollStep == 0)return
      msobj.MouseOver 
= 1
      clearInterval(msobj.TimerID); 
      }
 
  msobj.ID.onmouseout 
= function() 
      

      
if(msobj.ScrollStep == 0
      

        
if(msobj.Step == 0)msobj.Step = 1
        
return
      }
 
      msobj.MouseOver 
= 0
      
if(msobj.Stop == 0
      

        clearInterval(msobj.TimerID); 
        msobj.TimerID 
= setInterval(msobj.StartID,timer); 
      }
 
      }
 
  }
 
setTimeout(msobj.Begin,waittime); 
}
 
Marquee.prototype.Scroll 
= function() 

switch(this.Direction) 

  
case 0
  
this.CTL += this.Step; 
  
if(this.CTL >= this.ScrollStep && this.DelayTime > 0
  

    
this.ID.scrollTop += this.ScrollStep + this.Step - this.CTL; 
    
this.Pause(); 
    
return
  }
 
  
else 
  

    
if(this.ID.scrollTop >= this.ClientScroll) 
    

    
this.ID.scrollTop -= this.ClientScroll; 
    }
 
    
this.ID.scrollTop += this.Step; 
  }
 
  
break
  
case 1
  
this.CTL += this.Step; 
  
if(this.CTL >= this.ScrollStep && this.DelayTime > 0
  

    
this.ID.scrollTop -= this.ScrollStep + this.Step - this.CTL; 
    
this.Pause(); 
    
return
  }
 
  
else 
  

    
if(this.ID.scrollTop <= 0
    

    
this.ID.scrollTop += this.ClientScroll; 
    }
 
    
this.ID.scrollTop -= this.Step; 
  }
 
  
break
  
case 2
  
this.CTL += this.Step; 
  
if(this.CTL >= this.ScrollStep && this.DelayTime > 0
  

    
this.ID.scrollLeft += this.ScrollStep + this.Step - this.CTL; 
    
this.Pause(); 
    
return
  }
 
  
else 
  

    
if(this.ID.scrollLeft >= this.ClientScroll) 
    

    
this.ID.scrollLeft -= this.ClientScroll; 
    }
 
    
this.ID.scrollLeft += this.Step; 
  }
 
  
break
  
case 3
  
this.CTL += this.Step; 
  
if(this.CTL >= this.ScrollStep && this.DelayTime > 0
  

    
this.ID.scrollLeft -= this.ScrollStep + this.Step - this.CTL; 
    
this.Pause(); 
    
return
  }
 
  
else 
  

    
if(this.ID.scrollLeft <= 0
    

    
this.ID.scrollLeft += this.ClientScroll; 
    }
 
    
this.ID.scrollLeft -= this.Step; 
  }
 
  
break
}
 
}
 
div id
="m2" style="white-space:nowrap;">right>>>>>right>>>>>right>>>>></div> 
<script type="text/javascript"> 
new Marquee("m2",3,1,258,60,50,0,0); 
</ script >  



Hope this helps!


 
If I’ve misunderstood your problem, feel free to reply.
 
Thanks.

你可能感兴趣的:(firefox)