ふたたびごめん。べんりなきのうがつまったやつをつかえば
かんたんかもしれないけど、けっきょくそれさえもつかいこなせないなら、
いらいしたほうがよいとおもう。
こじんてきには、そういうのはつかいたくないし、
つかわなくたって、うごかせるようになると、それはそれで、
おもしろいよ。
さいしょにあげたこーどをつかったら、ながくなっちゃった
うごかしたり、とめたりのとりがーは、ぐちゃぐちゃ。
だめだなこれ。(ぜんかくくうはくははんかくに)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Script-Type" content="application/javascript">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>TEST</title>
<style type="text/css">
#MLIST {
width : 600px;
height: 230px;
border: 1px #800 solid;
list-style : none;
margin : 0;
padding : 0;
overflow : auto;
}
.part {
width : 200px;
height: 240px;
margin : 0;
padding : 0;
float: left;
}
.part ol {
list-style : none;
}
.photo {
width : 200px;
height : 200px;
}
.photo img {
width : 200px;
height : 200px;
}
.comment {
width : 200px;
height : 40px;
text-align: center;
font-size: 12px;
padding-top:10px;
}
</style>
</head>
<body>
<ul id="MLIST" onMouseover="MLIST.stop()" onMouseout="MLIST.start(MLIST.move)">
<li class="part">
<ol>
<li class="photo"><img src="./img/0.gif" alt="photo0" ></li>
<li class="comment">せつめい1</li>
</ol>
</li>
</ul>
<script type="text/javascript"><!--
function Locator (x) {
this.left = x + 'px';
}
function Starter (callbackfn) {
this.timerID = (function (o) {
return setInterval(function () { return callbackfn.call(o); }, o.interval);
})(this);
}
function Stopper () {
clearInterval(this.timerID);
}
function Timer ( n ) {
this.timerID = null;
this.interval = n;
}
Timer.prototype.start = function (listener) {
return Starter.call(this, listener);
};
Timer.prototype.stop = function () {
return Stopper.call(this);
};
var Hoge = function ( ) {
this.init.apply( this, arguments );
};
Hoge.prototype = new Timer;
Hoge.prototype.constructor = Hoge;
Hoge.prototype.init = function ( tid, step, interval ) {
var e = document.getElementById( tid );
if(! e) return;
e.style.overflow = 'hidden';
e.style.position = 'relative';
this.e = e;
this.s = step;
this.interval = interval;
this.reset();
};
Hoge.prototype.addPart = (function ( tag ) {
return function ( ary ) {
var cnt = 0, o, p, i;
while( o = ary[ cnt++ ] ) {
i = tag( 'img' ), i.src = o[0], i.alt = o[1];
this.e.appendChild(
tag( 'li', 'part',
tag( 'ol', '',
tag( 'li', 'photo', i),
tag( 'li', 'comment', o[2] )
)
)
);
}
this.reset();
};
})(
function ( tag, cs, c1, c2 ) {
var d = document;
var e = d.createElement( tag );
cs && (e.className = cs);
c1 && e.appendChild( 'string' == typeof c1 ? d.createTextNode( c1 ): c1 );
c2 && e.appendChild( 'string' == typeof c2 ? d.createTextNode( c2 ): c2 );
return e;
}
);
Hoge.prototype.reset = (function ( get ) {
return function ( ) {
this.min = this.max = this.e.offsetWidth;
var cnt = 0, o;
this.ch = get( this.e );
while( o = this.ch[ cnt++ ] ) {
o.style.position = 'absolute';
Locator.call( o.style, this.min -= o.offsetWidth);
}
};
})(
function ( e ) {
var cnt = 0, ch = [ ], o;
while( o = e.childNodes[ cnt++ ] ) o.nodeType == 1 && ch.push( o );
return ch;
}
);
Hoge.prototype.move = function ( ) {
var cnt = 0, o, x;
while( o = this.ch[ cnt++ ] ) {
if( (x = o.offsetLeft + this.s) >= this.max ) x = this.min;
Locator.call( o.style, x);
}
}
var ary = [
[ './img/1.gif', '*', 'せつめい1' ],
[ './img/2.gif', '*', 'せつめい2' ],
[ './img/3.gif', '*', 'せつめい3' ],
[ './img/4.gif', '*', 'せつめい4' ],
[ './img/5.gif', '*', 'せつめい5' ],
[ './img/6.gif', '*', 'せつめい6' ]
];
var MLIST = new Hoge( 'MLIST', 4, 50 );
MLIST.addPart( ary );
MLIST.start( MLIST.move );
//-->
</script>
</body>
</html>
お礼
すばらしいです。汎用性もあり、リバースまで追加していただけるなんて。 これで思ったものが実現できました。 度々のコーディングありがとうございました。