Oddly enough, after refining my three button approach above, which has its own charms, I came up with this two button approach which suddenly seemed self evident. There is no longer any pausing except onmouseover:
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<title>DHTML Ticker script w/optional Manual Controls - Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
/*Example CSS for the two demo tickers*/
#domticker{
width: 200px;
height: 100px;
border: 1px dashed black;
padding: 5px;
background-color: #FFFFCA;
margin-bottom:1ex;
}
#domticker div{ /*IE6 bug fix when text is bold and fade effect (alpha filter) is enabled. Style inner DIV with same color as outer DIV*/
background-color: #FFFFCA;
}
#domticker a{
font-weight: bold;
}
#domticker2{
width: 350px;
height: 1.2em;
border: 1px solid black;
padding: 3px;
margin-bottom:1ex;
}
#ddomticker2 { /*Style for 2nd ticker's controls*/
text-align:left;
}
#domticker2 a{
text-decoration: none;
}
.someclass{ /*class to apply to your scroller(s) if desired*/
}
</style>
<script type="text/javascript">
/*Example message arrays for the two demo scrollers*/
var tickercontent=new Array()
tickercontent[0]='<a href="http://www.javascriptkit.com">JavaScript Kit</a><br />Comprehensive JavaScript tutorials and over 400+ free scripts!'
tickercontent[1]='<a href="http://www.codingforums.com">Coding Forums</a><br />Web coding and development forums.'
tickercontent[2]='<a href="http://www.cssdrive.com" target="_new">CSS Drive</a><br />Categorized CSS gallery and examples.'
var tickercontent2=new Array()
tickercontent2[0]='<a href="http://www.news.com">News.com: Technology and business reports</a>'
tickercontent2[1]='<a href="http://www.cnn.com">CNN: Headline and breaking news 24/7</a>'
tickercontent2[2]='<a href="http://news.bbc.co.uk">BBC News: UK and international news</a>'
</script>
<script type="text/javascript">
/***********************************************
* DHTML Ticker script- © Dynamic Drive (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit http://www.dynamicdrive.com/ for this script and 100s more.
* Modified in http://www.dynamicdrive.com/forums by jscheuer1
* Wider Cross Browser Fade effects and optional Manual Controls
***********************************************/
function domticker(content, divId, divClass, delay, controls, fadeornot){
this.content=content
this.tickerid=divId //ID of master ticker div. Message is contained inside first child of ticker div
this.delay=delay //Delay between msg change, in miliseconds.
this.mouseoverBol=0 //Boolean to indicate whether mouse is currently over ticker (and pause it if it is)
this.pointer=0
this.controls=typeof controls=="number"? controls : null;
this.opacitystring=typeof fadeornot!="undefined"||(typeof controls!="undefined"&&typeof controls!="number")? document.body.filters? "width: 100%; filter:progid:DXImageTransform.Microsoft.alpha(opacity=100);" : "width: 100%;-moz-opacity: 1;opacity:1;" : ""
if (this.opacitystring!="") this.delay+=500 //add 1/2 sec to account for fade effect, if enabled
this.opacitysetting=0.2 //Opacity value when reset. Internal use.
document.write('<div id="'+divId+'" class="'+divClass+'"><div style="'+this.opacitystring+'"></div></div>')
if (this.controls) {
document.write('<div id="d'+divId+'" align="center"><input title="Next" style="font-weight:bold;" type="button" value="+" id="l2'+divId+'">')
document.write(' <input title="Previous" style="font-weight:bold;" type="button" value="-" id="l3'+divId+'"></div>')
document.getElementById('d'+this.tickerid).style.width=document.getElementById(this.tickerid).offsetWidth+'px';
document.getElementById('l2'+this.tickerid).style.width=document.getElementById('l3'+this.tickerid).offsetWidth+'px';
}
this.initialize()
}
domticker.prototype.initialize=function(){
var instanceOfTicker=this
this.contentdiv=document.getElementById(this.tickerid).firstChild //div of inner content that holds the messages
document.getElementById(this.tickerid).onmouseover=function(){instanceOfTicker.mouseoverBol=1}
document.getElementById(this.tickerid).onmouseout=function(){instanceOfTicker.mouseoverBol=0}
if (this.controls) {
document.getElementById('l2'+this.tickerid).onclick=function(){instanceOfTicker.onclickinit();instanceOfTicker.rotatemsg()}
document.getElementById('l3'+this.tickerid).onclick=function(){instanceOfTicker.onclickinit();instanceOfTicker.reversemsg()}
}
this.rotatemsg()
}
domticker.prototype.onclickinit=function(){
var instanceOfTicker=this
var contentdiv=instanceOfTicker.contentdiv;
if (contentdiv.filters && contentdiv.filters[0]){
if (typeof contentdiv.filters[0].opacity=="number") //IE6+
contentdiv.filters[0].opacity=100
else //IE 5.5
contentdiv.style.filter="alpha(opacity=100)"
}
else if (typeof contentdiv.style.MozOpacity!="undefined" && this.opacitystring!=""){
contentdiv.style.MozOpacity=1
}
else if (typeof contentdiv.style.opacity!="undefined" && this.opacitystring!="" &&!contentdiv.filters){
contentdiv.style.opacity=1
}
if(instanceOfTicker.fadetimer1){clearInterval(instanceOfTicker.fadetimer1)};
if(instanceOfTicker.repeat){clearTimeout(instanceOfTicker.repeat)};
}
domticker.prototype.rotatemsg=function(){
var instanceOfTicker=this
if (this.mouseoverBol==1) //if mouse is currently over ticker, do nothing (pause it)
setTimeout(function(){instanceOfTicker.rotatemsg()}, 100)
this.fadetransition("reset") //FADE EFFECT- RESET OPACITY
this.contentdiv.innerHTML=this.content[this.pointer]
this.fadetimer1=setInterval(function(){instanceOfTicker.fadetransition('up', 'fadetimer1')}, 100) //FADE EFFECT- PLAY IT
this.pointer=(this.pointer<this.content.length-1)? this.pointer+1 : 0
this.repeat=setTimeout(function(){instanceOfTicker.rotatemsg()}, this.delay) //update container
}
domticker.prototype.reversemsg=function(){
var instanceOfTicker=this
this.fadetransition("reset") //FADE EFFECT- RESET OPACITY
this.pointer=(this.pointer>1)? this.pointer-2 : this.content.length+this.pointer-2
this.contentdiv.innerHTML=this.content[this.pointer]
this.fadetimer1=setInterval(function(){instanceOfTicker.fadetransition('up', 'fadetimer1')}, 100) //FADE EFFECT- PLAY IT
this.pointer=(this.pointer<this.content.length-1)? this.pointer+1 : 0
this.repeat=setTimeout(function(){instanceOfTicker.rotatemsg()}, this.delay) //update container
}
// -------------------------------------------------------------------
// fadetransition()- cross browser fade method for IE5.5+ and Mozilla/Firefox
// -------------------------------------------------------------------
domticker.prototype.fadetransition=function(fadetype, timerid){
var contentdiv=this.contentdiv
if (fadetype=="reset")
this.opacitysetting=0.2
if (contentdiv.filters && contentdiv.filters[0]){
if (typeof contentdiv.filters[0].opacity=="number") //IE6+
contentdiv.filters[0].opacity=this.opacitysetting*100
else //IE 5.5
contentdiv.style.filter="alpha(opacity="+this.opacitysetting*100+")"
}
else if (typeof contentdiv.style.MozOpacity!="undefined" && this.opacitystring!=""){
contentdiv.style.MozOpacity=this.opacitysetting
}
else if (typeof contentdiv.style.opacity!="undefined" && this.opacitystring!="" &&!contentdiv.filters){
contentdiv.style.opacity=this.opacitysetting
}
else
this.opacitysetting=1
if (fadetype=="up")
this.opacitysetting+=0.2
if (fadetype=="up" && this.opacitysetting>=1)
clearInterval(this[timerid])
}
</script>
</head>
<body>
<script type="text/javascript">
//new domticker(name_of_message_array, CSS_ID, CSS_classname, pause_in_miliseconds, optionalcontrols[0 or 1], optionalfadeswitch["fadeit"])
new domticker(tickercontent, "domticker", "someclass", 10000, 1, "fadeit")
document.write("<br />")
new domticker(tickercontent2, "domticker2", "someclass", 3000, 1)
</script>
</body>
</html>
Bookmarks