昨天晚上写日志的时候顺便看了看QQ阅读,发现这个翻页效果支持鼠标滚轮,今天在百般无聊的情况下,把这效果写了一下。
JS:
function QQRead(){this.init.apply(this,arguments)};
QQRead.prototype = {
init:function(opts){
var _this = this;
var set = {
prev : 'prev',
next : 'next',
slide : 'slide',
page:'page',
slideWidth:800
}
opts = opts || {};
this.opt = this.extend(set,opts);
this.count = 0;
this.activePage = 0;
this.sliding = false;
this.prev = this.getId(this.opt.prev);
this.next = this.getId(this.opt.next);
this.slide = this.getId(this.opt.slide);
this.page = this.getId(this.opt.page);
this.pageNum = this.page.getElementsByTagName('li');
this.len = this.slide.getElementsByTagName('li').length;
this.pageNum[this.activePage].className = 'current';
this.addEvent(this.prev,'click',function(){_this.go(-1)});
this.addEvent(this.next,'click',function(){_this.go(1)});
this.mousewheel();
},
mousewheel:function(e){
var isFireFox = (function(){
var x = navigator.userAgent.toLowerCase()
return /firefox/.test(x) ? 'firefox': false;
})();
var _this = this;
var mousewheel = isFireFox ? 'DOMMouseScroll' : 'mousewheel';
this.addEvent(document,mousewheel,function(e){
e = e || window.event;
var delta = e.wheelDelta ? e.wheelDelta /120 : -e.detail/3;
_this.stopEvent(e)
delta > 0 ? _this.go(-1) : _this.go(1);
});
},
stopEvent:function(e){
if(!e.stopPropagation){
e.stopPropagation = function(){
e.cancelBubble = true;
}
e.preventDefault = function(){
e.returnValue = false;
}
}
e.stopPropagation();
e.preventDefault();
},
go:function(n){
if(this.sliding) return;
var nOld = this.count * this.opt.slideWidth;
if(n<0){
if(this.count ==0) return;
this.count--;
}else{
if(this.count == this.len -1) return;
this.count++;
}
var nNew = this.count * this.opt.slideWidth;
this.scroll(n,nOld,nNew);
},
scroll:function(n,nOld,nNew){
var _this = this;
this.fx(nOld,nNew,function(x){
_this.sliding = true;
_this.slide.style.left = -x + 'px';
},function(){
_this.sliding = false;
_this.pageNum[_this.activePage].className = '';
_this.activePage = _this.count
_this.pageNum[_this.count].className = 'current';
})
},
fx:function (f,t,fn,callback){
var D=Date,d=+new D,e,T=480,ed=ed||D,F=function(x) {return (x /= 0.5) < 1 ? (0.5 * Math.pow(x, 2)) : (-0.5 * ((x -= 2) * x - 2))};
return e=setInterval(function (){
var z=Math.min(1,(new D-d)/T);
if(false===fn(+f+(t-f)*F(z),z)||z==1)ed(clearTimeout(e),callback());
},10)
},
getId:function(el){
return el = typeof el == 'string' ? document.getElementById(el) : el;
},
extend:function(baseObj,extendObj){
for(var i in extendObj) baseObj[i] = extendObj;
return baseObj;
},
addEvent:function(el,type,fn){
if(typeof el.addEventListener != 'undefined'){
el.addEventListener(type,fn,false);
}else if(typeof el.attachEvent){
el.attachEvent('on'+type,function(){
fn.call(el,window.event);
})
}else{
el['on'+type] = fn;
}
}
}
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
* { margin:0; padding:0; font-family:Arial, Helvetica, sans-serif; font-size:12px;}
ul { list-style:none;}
#QQRead { width:800px; margin:100px auto;}
#QQRead_box { width:800px; height:300px; overflow:hidden; position:relative;}
#QQRead_box ul { width:5600px;height:300px; position:absolute; top:0; left:0;}
#QQRead_box ul li { width:800px; height:300px; float:left; background:#000; color:#fff; font-size:100px; line-height:300px; text-align:center;}
#control { height:20px; line-height:20px; padding-left:300px; padding-top:10px;}
#control a { display:inline; float:left; width:40px; text-align:center; background:#333; color:#fff; text-decoration:none; font-weight:bold; margin-right:1px;}
#control ul { float:left;}
#control li { width:20px; height:20px; float:left; text-align:center; margin-right:1px; display:inline;}
#control li.current { background:#333; color:#fff;}
</style>
</head>
<body>
<div id="QQRead">
<div id="QQRead_box">
<ul id="slide">
<li>page1</li>
<li>page2</li>
<li>page3</li>
<li>page4</li>
<li>page5</li>
<li>page6</li>
<li>page7</li>
</ul>
</div>
<div id="control">
<a href="#" id="prev">prev</a>
<ul id="page">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
</ul>
<a href="#" id="next">next</a>
</div>
</div>
<script type="text/javascript" src="QQRead.js"></script>
<script type="text/javascript">
new QQRead()
</script>
</body>
</html>