Log in

View Full Version : Looking for script for continuous step carousel



MacGirl
04-06-2010, 03:27 PM
Hello, I am looking for a script to create a continuous step carousel, similar to the carousel on the hootsuite.com website. I have seen a script at http://www.dynamicdrive.com/dynamicindex4/stepcarousel.htm but I want the panels to rotate continuously. I have never done anything like this before and hopefully it's not beyond me. Any help or suggestions would be greatly appreciated. Thanks in advance.

davelf
04-07-2010, 10:05 AM
here you go

http://cssglobe.com/lab/easyslider1.7/01.html

good luck...:)

vwphillips
04-07-2010, 10:41 AM
in principle


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<title></title>
<style type="text/css">
/*<![CDATA[*/
#tst {
position:relative;overflow:hidden;left:100px;width:400px;height:200px;border:solid black 1px;
}

.slide {
position:absolute;left:0px;top:0px;width:1100px;
}

.slide .frame{
margin-Left:10px;float:left;
}
/*]]>*/
</style>
<script type="text/javascript">
// Animate (11-January-2010)
// by Vic Phillips http://www.vicsjavascripts.org.uk

// To progressively change the Left, Top, Width, Height or Opacity of an element over a specified period of time.
// With the ability to scale the effect time on specified minimum/maximum values
// and with three types of progression 'sin' and 'cos' and liner.

// **** Application Notes

// **** The HTML Code
//
// when moving an element the inline or class rule style position of the element should be assigned as
// 'position:relative;' or 'position:absolute;'
//
// The element would normally be assigned a unique ID name.
//

// **** Initialising the Script.
//
// The script is initialised by assigning an instance of the script to a variable.
// e.g A = new zxcAnimate('left','id1')
// where:
// A = a global variable (variable)
// parameter 0 = the mode(see Note 1). (string)
// parameter 1 = the unique ID name or element object. (string or element object)
// parameter 1 = the initial value. (digits, default = 0)

// **** Executing the Effect
//
// The effect is executed by an event call to function 'A.animate(10,800 ,5000,[10,800]);'
// where:
// A = the global referencing the script instance. (variable)
// parameter 0 = the start value. (digits, for opacity minimum 0, maximum 100)
// parameter 1 = the finish value. (digits, for opacity minimum 0, maximum 100)
// parameter 2 = period of time between the start and finish of the effect in milliseconds. (digits or defaults to previous or 0(on first call) milliSeconds)
// parameter 3 = (optional) to scale the effect time on a specified minimum/maximum. (array, see Note 3)
// field 0 the minimum value. (digits)
// field 1 the maximum value. (digits)
// parameter 3 = (optional) the type of progression, 'sin', 'cos' or 'liner'. (string, default = 'liner')
// 'sin' progression starts fast and ends slow.
// 'cos' progression starts slow and ends fast.
//
// Note 1: Examples modes: 'left', 'top', 'width', 'height', 'opacity.
// Note 2: The default units(excepting opacity) are 'px'.
// For hyphenated modes, the first character after the hyphen must be upper case, all others lower case.
// Note 3: The scale is of particular use when re-calling the effect
// in mid progression to retain an constant rate of progression.
// Note 4: The current effect value is recorded in A.data[0].
// Note 5: A function may be called on completion of the effect by assigning the function
// to the animator intance property .Complete.
// e.g. [instance].Complete=function(){ alert(this.data[0]); };
//



// **** Functional Code(1.58K) - NO NEED to Change

function zxcAnimate(mde,obj,srt){
this.to=null;
this.obj=typeof(obj)=='object'?obj:document.getElementById(obj);
this.mde=mde.replace(/\W/g,'');
this.data=[srt||0];
return this;
}

zxcAnimate.prototype.animate=function(srt,fin,ms,scale,c){
clearTimeout(this.to);
this.time=ms||this.time||0;
this.neg=srt<0||fin<0;
this.data=[srt,srt,fin];
this.mS=this.time*(!scale?1:Math.abs((fin-srt)/(scale[1]-scale[0])));
this.c=typeof(c)=='string'?c.charAt(0).toLowerCase():this.c?this.c:'';
this.inc=Math.PI/(2*this.mS);
this.srttime=new Date().getTime();
this.cng();
}

zxcAnimate.prototype.cng=function(){
var oop=this,ms=new Date().getTime()-this.srttime;
this.data[0]=(this.c=='s')?(this.data[2]-this.data[1])*Math.sin(this.inc*ms)+this.data[1]:(this.c=='c')?this.data[2]-(this.data[2]-this.data[1])*Math.cos(this.inc*ms):(this.data[2]-this.data[1])/this.mS*ms+this.data[1];
this.apply();
if (ms<this.mS) this.to=setTimeout(function(){oop.cng()},10);
else {
this.data[0]=this.data[2];
this.apply();
if (this.Complete) this.Complete(this);
}
}

zxcAnimate.prototype.apply=function(){
if (isFinite(this.data[0])){
if (this.data[0]<0&&!this.neg) this.data[0]=0;
if (this.mde!='opacity') this.obj.style[this.mde]=Math.floor(this.data[0])+'px';
else zxcOpacity(this.obj,this.data[0]);
}
}

function zxcOpacity(obj,opc){
if (opc<0||opc>100) return;
obj.style.filter='alpha(opacity='+opc+')';
obj.style.opacity=obj.style.MozOpacity=obj.style.KhtmlOpacity=opc/100-.001;
}


</script>


</head>

<body>
<div id="tst" >
<div class="slide" >
<div class="frame" ><img src="http://www.dynamicdrive.com/dynamicindex4/fruits.jpg" /></div>
<div class="frame" ><img src="http://www.dynamicdrive.com/dynamicindex4/cave.jpg"/></div>
<div class="frame" ><img src="http://www.dynamicdrive.com/dynamicindex4/pool.jpg"/></div>
<div class="frame" ><img src="http://www.dynamicdrive.com/dynamicindex4/autumn.jpg"/></div>
<div class="frame" ><img src="http://www.dynamicdrive.com/dynamicindex4/dog.jpg" /></div>
</div>
</div>

<script> vic=0; </script>
<form name=Show id=Show style="position:absolute;visibility:visible;top:420px;left:0px;" >
<input size=100 name=Show0 >
<input size=10 name=Show1 >
<input size=10 name=Show2 >
<input size=10 name=Show3 >
<input size=10 name=Show4 >
<input size=10 name=Show5 >
<input size=10 name=Show6 >
<input size=10 name=Show7 >
<input size=10 name=Show8 >
<input size=10 name=Show9 ><br>
<textarea name=TA rows=1 cols=100 ></textarea>
</form>
<input type="button" name="" value="Rotate" onclick="C.Rotate(-1);"/>
<input type="button" name="" value="Rotate" onclick="C.Rotate(1);"/>
<script type="text/javascript">
/*<![CDATA[*/

function zxcCC(o){
var w=o.Width;
this.ms=o.Duration||1000;
this.moveby=o.MoveBy;
var p=document.getElementById(o.ID);
var slide=p.getElementsByTagName('DIV')[0];
this.slide=[slide];
for (var lft,z0=0;z0<3;z0++){
lft=w*z0-w;
if (z0>0){
this.slide[z0]=slide.cloneNode(true);
p.appendChild(this.slide[z0]);
}
this.slide[z0].style.width=w+'px';
this.slide[z0].style.left=lft+'px';
this.slide[z0]=new zxcAnimate('left',this.slide[z0],lft);
this.slide[z0].run=true;
this.slide[z0].w=w;
this.slide[z0].Complete=function(){
var ud=this.data[1]>this.data[2]
if ((ud&&this.data[0]<-this.w)||(!ud&&this.data[0]>this.w)){
this.data[0]+=this.w*3*(ud?1:-1);
}
this.run=true;
}
}
}

zxcCC.prototype.Rotate=function(ud){
if (this.slide[0].run){
this.slide[0].run=false;
for (var z0=0;z0<this.slide.length;z0++){
this.slide[z0].animate(this.slide[z0].data[0],this.slide[z0].data[0]+this.moveby*(ud>0?1:-1),this.ms);
}
}
}


var C=new zxcCC({
ID:'tst',
Width:1300,
MoveBy:260,
Duration:1000
});
/*]]>*/
</script>
</body>

</html>

MacGirl
04-07-2010, 10:54 AM
Thank you so much David and Vic.

charlie10
04-17-2010, 11:19 AM
Vic,
do you know how to add the auto rotation to your code ?
thank you !

vwphillips
04-17-2010, 03:25 PM
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<title></title>
<style type="text/css">
/*<![CDATA[*/
#tst {
position:relative;overflow:hidden;left:100px;width:800px;height:200px;border:solid black 1px;
}

.slide {
position:absolute;left:0px;top:0px;width:1300px;background-Color:#FFCC66;border:solid red 0px;
}

.slide .frame{
width:130px;height:100px;margin-Left:0px;float:left;
}

.slide .frame IMG{
width:120px;height:100px;
}

/*]]>*/
</style>
<script type="text/javascript">
// Animate (11-January-2010)
// by Vic Phillips http://www.vicsjavascripts.org.uk

// To progressively change the Left, Top, Width, Height or Opacity of an element over a specified period of time.
// With the ability to scale the effect time on specified minimum/maximum values
// and with three types of progression 'sin' and 'cos' and liner.

// **** Application Notes

// **** The HTML Code
//
// when moving an element the inline or class rule style position of the element should be assigned as
// 'position:relative;' or 'position:absolute;'
//
// The element would normally be assigned a unique ID name.
//

// **** Initialising the Script.
//
// The script is initialised by assigning an instance of the script to a variable.
// e.g A = new zxcAnimate('left','id1')
// where:
// A = a global variable (variable)
// parameter 0 = the mode(see Note 1). (string)
// parameter 1 = the unique ID name or element object. (string or element object)
// parameter 1 = the initial value. (digits, default = 0)

// **** Executing the Effect
//
// The effect is executed by an event call to function 'A.animate(10,800 ,5000,[10,800]);'
// where:
// A = the global referencing the script instance. (variable)
// parameter 0 = the start value. (digits, for opacity minimum 0, maximum 100)
// parameter 1 = the finish value. (digits, for opacity minimum 0, maximum 100)
// parameter 2 = period of time between the start and finish of the effect in milliseconds. (digits or defaults to previous or 0(on first call) milliSeconds)
// parameter 3 = (optional) to scale the effect time on a specified minimum/maximum. (array, see Note 3)
// field 0 the minimum value. (digits)
// field 1 the maximum value. (digits)
// parameter 3 = (optional) the type of progression, 'sin', 'cos' or 'liner'. (string, default = 'liner')
// 'sin' progression starts fast and ends slow.
// 'cos' progression starts slow and ends fast.
//
// Note 1: Examples modes: 'left', 'top', 'width', 'height', 'opacity.
// Note 2: The default units(excepting opacity) are 'px'.
// For hyphenated modes, the first character after the hyphen must be upper case, all others lower case.
// Note 3: The scale is of particular use when re-calling the effect
// in mid progression to retain an constant rate of progression.
// Note 4: The current effect value is recorded in A.data[0].
// Note 5: A function may be called on completion of the effect by assigning the function
// to the animator intance property .Complete.
// e.g. [instance].Complete=function(){ alert(this.data[0]); };
//



// **** Functional Code(1.58K) - NO NEED to Change

function zxcAnimate(mde,obj,srt){
this.to=null;
this.obj=typeof(obj)=='object'?obj:document.getElementById(obj);
this.mde=mde.replace(/\W/g,'');
this.data=[srt||0];
return this;
}

zxcAnimate.prototype.animate=function(srt,fin,ms,scale,c){
clearTimeout(this.to);
this.time=ms||this.time||0;
this.neg=srt<0||fin<0;
this.data=[srt,srt,fin];
this.mS=this.time*(!scale?1:Math.abs((fin-srt)/(scale[1]-scale[0])));
this.c=typeof(c)=='string'?c.charAt(0).toLowerCase():this.c?this.c:'';
this.inc=Math.PI/(2*this.mS);
this.srttime=new Date().getTime();
this.cng();
}

zxcAnimate.prototype.cng=function(){
var oop=this,ms=new Date().getTime()-this.srttime;
this.data[0]=(this.c=='s')?(this.data[2]-this.data[1])*Math.sin(this.inc*ms)+this.data[1]:(this.c=='c')?this.data[2]-(this.data[2]-this.data[1])*Math.cos(this.inc*ms):(this.data[2]-this.data[1])/this.mS*ms+this.data[1];
this.apply();
if (ms<this.mS) this.to=setTimeout(function(){oop.cng()},10);
else {
this.data[0]=this.data[2];
this.apply();
if (this.Complete) this.Complete(this);
}
}

zxcAnimate.prototype.apply=function(){
if (isFinite(this.data[0])){
if (this.data[0]<0&&!this.neg) this.data[0]=0;
if (this.mde!='opacity') this.obj.style[this.mde]=Math.floor(this.data[0])+'px';
else zxcOpacity(this.obj,this.data[0]);
}
}

function zxcOpacity(obj,opc){
if (opc<0||opc>100) return;
obj.style.filter='alpha(opacity='+opc+')';
obj.style.opacity=obj.style.MozOpacity=obj.style.KhtmlOpacity=opc/100-.001;
}


</script>


</head>

<body>
<div id="tst" >
<div class="slide" >
<div class="frame" ><img src="http://www.dynamicdrive.com/dynamicindex4/fruits.jpg" /></div>
<div class="frame" ><img src="http://www.dynamicdrive.com/dynamicindex4/cave.jpg"/></div>
<div class="frame" ><img src="http://www.dynamicdrive.com/dynamicindex4/pool.jpg"/></div>
<div class="frame" ><img src="http://www.dynamicdrive.com/dynamicindex4/autumn.jpg"/></div>
<div class="frame" ><img src="http://www.dynamicdrive.com/dynamicindex4/dog.jpg" /></div>
</div>
</div>
<input type="button" name="" value="GoTo 0" onclick="C.GoTo(0);"/>
<input type="button" name="" value="GoTo 1" onclick="C.GoTo(1);"/>
<input type="button" name="" value="GoTo 2" onclick="C.GoTo(2);"/>
<input type="button" name="" value="GoTo 3" onclick="C.GoTo(3);"/>
<input type="button" name="" value="GoTo 4" onclick="C.GoTo(4);"/>

<input type="button" name="" value="< Rotate" onclick="C.Rotate(1);"/>
<input type="button" name="" value="Auto" onclick="C.Auto(true);"/>
<input type="button" name="" value="Auto Stop" onclick="C.Auto(false);"/>
<input type="button" name="" value="Rotate >" onclick="C.Rotate(-1);"/>
<script type="text/javascript">
/*<![CDATA[*/

function zxcStepCarousel(o){
var p=document.getElementById(o.ID);
var slide=p.getElementsByTagName('DIV')[0];
for (var clds=slide.childNodes,fst,lst,z0=0;z0<clds.length;z0++){
if (clds[z0].nodeType==1){
if (!fst){
fst=clds[z0];
}
lst=clds[z0];
}
}
this.moveby=o.MoveBy||fst.offsetLeft+fst.offsetWidth;
var mde=o.Mode.charAt(0).toUpperCase()=='V'?['top','height','offsetTop','offsetHeight']:['left','width','offsetLeft','offsetWidth'];
this.ms=o.Duration||1000;
this.hold=o.Hold||this.ms*4;
this.to=null;
this.ud=o.Direction||-1;
this.os=o.Offset||0;
var wh=lst[mde[2]]+lst[mde[3]];
this.slide=[slide];
var nu=Math.floor(p[mde[3]]/wh)+3;
for (var max,z1=0;z1<nu;z1++){
max=wh*z1-wh+this.os;
if (z1>0){
this.slide[z1]=slide.cloneNode(true);
p.appendChild(this.slide[z1]);
}
this.slide[z1].style[mde[1]]=wh+'px';
this.slide[z1].style[mde[0]]=max+'px';
this.slide[z1]=new zxcAnimate(mde[0],this.slide[z1],max);
this.slide[z1].run=true;
this.slide[z1].Complete=function(){ this.run=true; }
}
this.min=wh;
this.max=max;
this.lgth=this.slide.length;
this.maxcnt=Math.round(this.min/this.moveby-1);
this.cnt=0;
//document.Show.Show0.value=this.maxcnt;
}

zxcStepCarousel.prototype.Rotate=function(ud){
clearTimeout(this.to);
if (this.slide[0].run){
this.ud=ud||this.ud;
this.slide[0].run=false;
this.rotate(this.moveby*(this.ud<0?-1:1));
}
}

zxcStepCarousel.prototype.GoTo=function(nu){
clearTimeout(this.to);
var goto=this.moveby*nu;
if (this.slide[0].run&&goto<this.min){
this.slide[0].run=false;
for (var ary=[],z0=0;z0<this.slide.length;z0++){
ary.push(this.slide[z0].data[0]+goto+this.os)
}
ary=ary.sort(function(a,b){ return Math.abs(a)-Math.abs(b); });
this.rotate(ary[0]);
}
}

zxcStepCarousel.prototype.rotate=function(moveby){
this.cnt+=(moveby>0?1:-1);
this.cnt=this.cnt<0?this.maxcnt:this.cnt>this.maxcnt?0:this.cnt;
for (var z0=0;z0<this.lgth;z0++){
if ((moveby>0&&this.slide[z0].data[0]<=-this.min)||(moveby<0&&this.slide[z0].data[0]>=this.max)){
this.slide[z0].data[0]+=this.min*this.lgth*(moveby>0?1:-1);
}
this.slide[z0].animate(this.slide[z0].data[0],this.slide[z0].data[0]-moveby,this.ms);
}
}

zxcStepCarousel.prototype.Auto=function(run){
var oop=this;
clearTimeout(this.to);
if (run){
this.Rotate();
this.to=setTimeout(function(){ oop.Auto(true); },this.hold);
}
}



var C=new zxcStepCarousel({
Mode:'Horizontal',
ID:'tst',
// MoveBy:520, // (optional) the distance to move each rotation. (digits, default = one frame)
Offset:0, // (optional) the left offset. (digits, default = 0)
Duration:1000, // (optional) the duration of each rotation in milli seconds. (digits, default = 1000)
Direction:1, // (optional) -1 = rotate left, 1 = rotate right. (digits 1 or -1, default = -1)
Hold:3000 // (optional) the dutation between each auto rotation in milliseconds. (digits, default = Duration*4)
});

C.Auto(true);
/*]]>*/
</script>
</body>

</html>

charlie10
04-17-2010, 03:49 PM
very nice !
thank you!

charlie10
04-17-2010, 04:49 PM
I try to make a margin between images (frame width:140px, instead of 130px), but the result is not good :(
when I try with a 'margin-right:10px', I have the same problem

I see that with your code there is a space between the images, but I don't understand how it works.

thanks

the css

#tst {
position:relative;
overflow:hidden;
left:100px;
width:800px;
height:200px;
border:solid black 1px;
}

.slide {
position:absolute;
left:0px;top:0px;
width:1300px;
background-Color:#FFCC66;
border:solid red 0px;
}

.slide .frame{
width:140px;
height:100px;
margin-Left:0px;
float:left;
}

.slide .frame IMG{
width:120px;
height:100px;
}

#leftnav {
z-Index:50;
position:absolute;
left:-2px;
top:52px;
cursor:hand;
cursor:pointer;
}

#rightnav {
z-Index:50;
position:absolute;
left:40px;
top:52px;
cursor:hand;
cursor:pointer;
}

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<title></title>
<link rel="stylesheet" href="templates/rhuk_milkyway/css/vic.css" type="text/css" />

<script type="text/javascript">
// Animate (11-January-2010)
// by Vic Phillips http://www.vicsjavascripts.org.uk

// To progressively change the Left, Top, Width, Height or Opacity of an element over a specified period of time.
// With the ability to scale the effect time on specified minimum/maximum values
// and with three types of progression 'sin' and 'cos' and liner.

// **** Application Notes

// **** The HTML Code
//
// when moving an element the inline or class rule style position of the element should be assigned as
// 'position:relative;' or 'position:absolute;'
//
// The element would normally be assigned a unique ID name.
//

// **** Initialising the Script.
//
// The script is initialised by assigning an instance of the script to a variable.
// e.g A = new zxcAnimate('left','id1')
// where:
// A = a global variable (variable)
// parameter 0 = the mode(see Note 1). (string)
// parameter 1 = the unique ID name or element object. (string or element object)
// parameter 1 = the initial value. (digits, default = 0)

// **** Executing the Effect
//
// The effect is executed by an event call to function 'A.animate(10,800 ,5000,[10,800]);'
// where:
// A = the global referencing the script instance. (variable)
// parameter 0 = the start value. (digits, for opacity minimum 0, maximum 100)
// parameter 1 = the finish value. (digits, for opacity minimum 0, maximum 100)
// parameter 2 = period of time between the start and finish of the effect in milliseconds. (digits or defaults to previous or 0(on first call) milliSeconds)
// parameter 3 = (optional) to scale the effect time on a specified minimum/maximum. (array, see Note 3)
// field 0 the minimum value. (digits)
// field 1 the maximum value. (digits)
// parameter 3 = (optional) the type of progression, 'sin', 'cos' or 'liner'. (string, default = 'liner')
// 'sin' progression starts fast and ends slow.
// 'cos' progression starts slow and ends fast.
//
// Note 1: Examples modes: 'left', 'top', 'width', 'height', 'opacity.
// Note 2: The default units(excepting opacity) are 'px'.
// For hyphenated modes, the first character after the hyphen must be upper case, all others lower case.
// Note 3: The scale is of particular use when re-calling the effect
// in mid progression to retain an constant rate of progression.
// Note 4: The current effect value is recorded in A.data[0].
// Note 5: A function may be called on completion of the effect by assigning the function
// to the animator intance property .Complete.
// e.g. [instance].Complete=function(){ alert(this.data[0]); };
//



// **** Functional Code(1.58K) - NO NEED to Change

function zxcAnimate(mde,obj,srt){
this.to=null;
this.obj=typeof(obj)=='object'?obj:document.getElementById(obj);
this.mde=mde.replace(/\W/g,'');
this.data=[srt||0];
return this;
}

zxcAnimate.prototype.animate=function(srt,fin,ms,scale,c){
clearTimeout(this.to);
this.time=ms||this.time||0;
this.neg=srt<0||fin<0;
this.data=[srt,srt,fin];
this.mS=this.time*(!scale?1:Math.abs((fin-srt)/(scale[1]-scale[0])));
this.c=typeof(c)=='string'?c.charAt(0).toLowerCase():this.c?this.c:'';
this.inc=Math.PI/(2*this.mS);
this.srttime=new Date().getTime();
this.cng();
}

zxcAnimate.prototype.cng=function(){
var oop=this,ms=new Date().getTime()-this.srttime;
this.data[0]=(this.c=='s')?(this.data[2]-this.data[1])*Math.sin(this.inc*ms)+this.data[1]:(this.c=='c')?this.data[2]-(this.data[2]-this.data[1])*Math.cos(this.inc*ms):(this.data[2]-this.data[1])/this.mS*ms+this.data[1];
this.apply();
if (ms<this.mS) this.to=setTimeout(function(){oop.cng()},10);
else {
this.data[0]=this.data[2];
this.apply();
if (this.Complete) this.Complete(this);
}
}

zxcAnimate.prototype.apply=function(){
if (isFinite(this.data[0])){
if (this.data[0]<0&&!this.neg) this.data[0]=0;
if (this.mde!='opacity') this.obj.style[this.mde]=Math.floor(this.data[0])+'px';
else zxcOpacity(this.obj,this.data[0]);
}
}

function zxcOpacity(obj,opc){
if (opc<0||opc>100) return;
obj.style.filter='alpha(opacity='+opc+')';
obj.style.opacity=obj.style.MozOpacity=obj.style.KhtmlOpacity=opc/100-.001;
}


</script>


</head>

<body>
<a href="javascript:;" onClick="C.Rotate(-1);">
<img src="http://www.zwickert.fr/templates/rhuk_milkyway/images/gauche.png" border="0" id="leftnav"/></a>
<div id="tst" >
<div class="slide" >
<div class="frame" ><img src="http://www.dynamicdrive.com/dynamicindex4/fruits.jpg" /></div>
<div class="frame" ><img src="http://www.dynamicdrive.com/dynamicindex4/cave.jpg"/></div>
<div class="frame" ><img src="http://www.dynamicdrive.com/dynamicindex4/pool.jpg"/></div>
<div class="frame" ><img src="http://www.dynamicdrive.com/dynamicindex4/autumn.jpg"/></div>
<div class="frame" ><img src="http://www.dynamicdrive.com/dynamicindex4/dog.jpg" /></div>
</div>
</div>
<a href="javascript:;" onClick="C.Rotate(1);">
<img src="http://www.zwickert.fr/templates/rhuk_milkyway/images/droite.png" border="0" id="rightnav"/></a>

<script type="text/javascript">
/*<![CDATA[*/

function zxcStepCarousel(o){
var p=document.getElementById(o.ID);
var slide=p.getElementsByTagName('DIV')[0];
for (var clds=slide.childNodes,fst,lst,z0=0;z0<clds.length;z0++){
if (clds[z0].nodeType==1){
if (!fst){
fst=clds[z0];
}
lst=clds[z0];
}
}
this.moveby=o.MoveBy||fst.offsetLeft+fst.offsetWidth;
var mde=o.Mode.charAt(0).toUpperCase()=='V'?['top','height','offsetTop','offsetHeight']:['left','width','offsetLeft','offsetWidth'];
this.ms=o.Duration||1000;
this.hold=o.Hold||this.ms*4;
this.to=null;
this.ud=o.Direction||-1;
this.os=o.Offset||0;
var wh=lst[mde[2]]+lst[mde[3]];
this.slide=[slide];
var nu=Math.floor(p[mde[3]]/wh)+3;
for (var max,z1=0;z1<nu;z1++){
max=wh*z1-wh+this.os;
if (z1>0){
this.slide[z1]=slide.cloneNode(true);
p.appendChild(this.slide[z1]);
}
this.slide[z1].style[mde[1]]=wh+'px';
this.slide[z1].style[mde[0]]=max+'px';
this.slide[z1]=new zxcAnimate(mde[0],this.slide[z1],max);
this.slide[z1].run=true;
this.slide[z1].Complete=function(){ this.run=true; }
}
this.min=wh;
this.max=max;
this.lgth=this.slide.length;
this.maxcnt=Math.round(this.min/this.moveby-1);
this.cnt=0;
//document.Show.Show0.value=this.maxcnt;
}

zxcStepCarousel.prototype.Rotate=function(ud){
clearTimeout(this.to);
if (this.slide[0].run){
this.ud=ud||this.ud;
this.slide[0].run=false;
this.rotate(this.moveby*(this.ud<0?-1:1));
}
}

zxcStepCarousel.prototype.GoTo=function(nu){
clearTimeout(this.to);
var goto=this.moveby*nu;
if (this.slide[0].run&&goto<this.min){
this.slide[0].run=false;
for (var ary=[],z0=0;z0<this.slide.length;z0++){
ary.push(this.slide[z0].data[0]+goto+this.os)
}
ary=ary.sort(function(a,b){ return Math.abs(a)-Math.abs(b); });
this.rotate(ary[0]);
}
}

zxcStepCarousel.prototype.rotate=function(moveby){
this.cnt+=(moveby>0?1:-1);
this.cnt=this.cnt<0?this.maxcnt:this.cnt>this.maxcnt?0:this.cnt;
for (var z0=0;z0<this.lgth;z0++){
if ((moveby>0&&this.slide[z0].data[0]<=-this.min)||(moveby<0&&this.slide[z0].data[0]>=this.max)){
this.slide[z0].data[0]+=this.min*this.lgth*(moveby>0?1:-1);
}
this.slide[z0].animate(this.slide[z0].data[0],this.slide[z0].data[0]-moveby,this.ms);
}
}

zxcStepCarousel.prototype.Auto=function(run){
var oop=this;
clearTimeout(this.to);
if (run){
this.Rotate();
this.to=setTimeout(function(){ oop.Auto(true); },this.hold);
}
}



var C=new zxcStepCarousel({
Mode:'Horizontal',
ID:'tst',
MoveBy:280, // (optional) the distance to move each rotation. (digits, default = one frame)
Offset:0, // (optional) the left offset. (digits, default = 0)
Duration:1000, // (optional) the duration of each rotation in milli seconds. (digits, default = 1000)
Direction:1, // (optional) -1 = rotate left, 1 = rotate right. (digits 1 or -1, default = -1)
Hold:3000 // (optional) the dutation between each auto rotation in milliseconds. (digits, default = Duration*4)
});

C.Auto(true);
/*]]>*/
</script>
</body>

</html>

charlie10
04-17-2010, 05:40 PM
sorry,
I just found the solution

#tst {
position:relative;
overflow:hidden;
left:100px;
width:800px;
height:200px;
border:solid black 1px;
}

.slide {
position:absolute;
left:0px;
top:0px;
width:1400px;
background-Color:#FFCC66;
border:solid red 0px;
}

.slide .frame{
width:140px;
height:100px;
margin-Left:0px;
float:left;
}

.slide .frame IMG{
width:120px;
height:100px;
}

charlie10
04-17-2010, 08:04 PM
as you can see here http://www.zwickert.fr/
with Internet Explorer there is a problem of display when the carousel moves.
... the animation is unstable, it lags, it's like if IE couldn't calculate fast enough...

I don't know what to do

with Firefox it's ok

any idea ?

vwphillips
04-18-2010, 12:01 PM
I have viewed your page with IE7 and it looks fine to me.

margin-Right is not an option, margin-left is as there a number of sliders the the last object in the slider determins the distance between each slider.

charlie10
04-18-2010, 01:56 PM
ok, thanks

but I tried Internet Explorer (7 and 8) on 3 differents laptops, and there is always this problem with images...

vwphillips
04-18-2010, 03:39 PM
It still looks fine to me(on an old PC) but you could try changing the duration of each rotation in milli seconds, other than that I don't know what may be wrong.

perhaps some one else could try it and provide feedback please?

charlie10
04-18-2010, 09:01 PM
I saw that the bug happens in the bottom of images, then I tried with different heights and I see that the bug happens only with images with an height > 150px or 152 pixels ! ....
150 pixels seems to be the limit, I don't understand why

vwphillips
04-19-2010, 08:37 AM
in your application there are three sliders(with 16 images each) moving across the parent div. This should not be problem for the animation but the browser may have a problem rendering so much graphical content.

edit

I increase my image size to 430*400 and could see the distortion confirming a rendering problem.

Only solution less or smaller images