项目:极客学院部分页面及友推、起点学院主页。
因为极客学院部分页面难度较低,且无特效,这里暂不评论。
起点学院主页效果图:
主要特效:
一、轮播图:
css代码:
<div class="banner_bigbox">
<ul id="bigbox_img">
<li style="background: url(img/qidian/banner_1.jpg) no-repeat center;display: block;opacity: 1;filter: alpha(opacity:100);">
<a href="#"></a>
</li>
<li style="background: url(img/qidian/banner_2.jpg) no-repeat center;">
<a href="#"></a>
</li>
<li style="background: url(img/qidian/banner_3.jpg) no-repeat center;">
<a href="#"></a>
</li>
<li style="background: url(img/qidian/banner_4.jpg) no-repeat center;">
<a href="#"></a>
</li>
</ul>
<div class="arr">
<div id="arr_prev"></div>
<div id="arr_next"></div>
</div>
<div id="banner_button">
<ul>
<li class="active"></li>
<li></li>
<li></li>
<li></li>
</ul>
</div>
</div>
样式:
.banner_bigbox{width: 100%;height: 640px;margin: 0 auto;position: relative;overflow: hidden;}
#bigbox_img{width: 100%;height: 640px;}
#bigbox_img li{width: 100%;height: 640px;position: absolute;display: none;opacity: 0;filter: alpha(opacity:0);}
.arr{width: 1000px;height: 106px;position: absolute;top: 250px;left: 13%;}
#arr_prev{width: 60px;height: 106px;background: url(../img/qidian/arr_prev.png) no-repeat center white;border-radius: 3px;float: left;opacity: 0.3;filter: alpha(opacity:30);cursor: pointer;}
#arr_prev:hover{opacity: 0.8;filter: alpha(opacity:80);}
#arr_next{width: 60px;height: 106px;background: url(../img/qidian/arr_next.png) no-repeat center white;border-radius: 3px;float: right;opacity: 0.3;filter: alpha(opacity:30);cursor: pointer;}
#arr_next:hover{opacity: 0.8;filter: alpha(opacity:80);}
#banner_button{width: 1024px;position: absolute;left: 50%;margin-left: -512px;bottom: 20px;padding: 0 365px;}
#banner_button li{width: 60px;height: 5px;background: #FFFFFF;float: left;margin: 0 10px;opacity: 0.5;filter: alpha(opacity:50);cursor: pointer;}
#banner_button .active{opacity: 1;filter: alpha(opacity:100);}
js文件:
var oBigbox_img = document.getElementById('bigbox_img');
var aBig_img = oBigbox_img.getElementsByTagName('li');
var oBigbox_btn = document.getElementById('banner_button');
var aBig_btn = oBigbox_btn.getElementsByTagName('li');
var oBtn_prev = document.getElementById('arr_prev');
var oBtn_next = document.getElementById('arr_next');
var now = 0;
var timer = setInterval(next, 4000);
oBigbox_btn.onmouseover = function() {
clearInterval(timer);
}
oBigbox_btn.onmouseout = function() {
timer = setInterval(next, 4000);
}
oBtn_prev.onclick = function() {
now = now - 1;
if(now < 0) {
now = aBig_img.length - 1;
}
tab();
}
oBtn_next.onclick = function() {
now = now + 1;
if(now == aBig_img.length) {
now = 0;
}
tab();
}
for(var i = 0; i < aBig_btn.length; i++) {
aBig_btn[i].index = i;
aBig_btn[i].onclick = function() {
now = this.index;
tab();
};
};
function next() {
now++;
if(now == aBig_img.length) {
now = 0;
}
tab();
}
function tab() {
for(var i = 0; i < aBig_btn.length; i++) {
aBig_btn[i].className = '';
}
aBig_btn[now].className = 'active';
for(var i = 0; i < aBig_img.length; i++) {
change(aBig_img[i], {
opacity: 0
},30);
if(aBig_img[i].style.opacity == 0) {
aBig_img[i].style.display = 'none';
}
aBig_img[now].style.display = 'block';
if(aBig_img[i].style.display == 'block') {
change(aBig_img[now], {
opacity: 100
},30)
}
}
}
二、无缝滚动
css代码:
<div class="student">
<h3 class="student_title">部分优秀学员</h3>
<div class="student_line"></div>
<div id="student_banner">
<ul id="student_ul">
<li class="student_box">
<div class="student_img"><img src="img/qidian/cbl.png"/></div>
<div class="student_name">陈滨淋</div>
<div class="student_job">惠买集团产品总监</div>
<div class="student_l"></div>
<p>在起点,能与各路大神进行思维碰撞、分享,学习自己不足的,助人助己创造一个新的起点!!</p>
</li>
li*n
</div>
<div id="arr_left"></div>
<div id="arr_right"></div>
</div
css样式:
.student{width: 100%;height: 667px;background-color: #FFFFFF;position: relative;}
.student_title{width: 1024px;height: 80px;line-height:80px;margin: 0 auto;text-align: center;font-size: 42px;color: #000027;font-family: "微软雅黑";font-weight: lighter;margin-top: 47px;}
.student_line{width: 100px;height: 3px;background-color: #2eab23;margin: 17px auto 40px;}
#student_banner{width: 929px;height: 389px;margin: 59px auto 0;overflow: hidden;position: relative;}
#student_banner ul{width: 3824px;height:389px;padding-top: 57px;box-sizing: border-box;position: absolute;left: 0;top: 0;}
.student_box{width: 210px;height: 330px;border: 1px solid #e9e9e9;position: relative;background-color: #f5f5f5;margin-right: 27px;float: left;}
.student_img{width: 124px;height: 124px;position: absolute;left: 47px;top: -57px;}
.student_name{width: 190px;height: 21px;line-height:21px;color: #2EAB23;font-family: "微软雅黑";font-size: 20px;text-align: center;margin: 85px auto 0;}
.student_job{width: 190px;height: 25px;line-height:25px;color: #666666;font-family: "微软雅黑";font-size: 14px;text-align: center;margin: 0 auto 0;}
.student_l{width: 190px;height: 10px;background: url(../img/qidian/line.png) no-repeat center;margin: 17px auto;}
.student_box p{width: 190px;height: 150px;line-height:24px;color: #666666;font-family: "微软雅黑";font-size: 14px;margin: 0 auto;}
#arr_left{width: 28px;height: 50px;background: url(../img/qidian/jian_icon.png) no-repeat 0 -83px;position: absolute;left: 10%;top: 52%;cursor: pointer;}
#arr_left:hover{background: url(../img/qidian/jian_icon.png) no-repeat 0 0}
#arr_right{width: 28px;height: 50px;background: url(../img/qidian/jian_icon.png) no-repeat -75px -83px;position: absolute;left: 88%;top: 52%;cursor: pointer;}
#arr_right:hover{background: url(../img/qidian/jian_icon.png) no-repeat -75px 0}
js文件:
var oStudent_box = document.getElementById('student_banner');
var oStudent_ul = document.getElementById('student_ul');
var aStudent_li = oStudent_ul.getElementsByTagName('li');
var oBtn_left = document.getElementById('arr_left');
var oBtn_right = document.getElementById('arr_right');
var speed = 956;
oStudent_ul.innerHTML = oStudent_ul.innerHTML+oStudent_ul.innerHTML;
oStudent_ul.style.width = (aStudent_li[0].offsetWidth+27)*aStudent_li.length+'px';
timer2=setInterval(next2,5000);
function next2(){
if(oStudent_ul.offsetLeft<=-oStudent_ul.offsetWidth/2 && speed == -956){
oStudent_ul.style.left='0px';
}
else if(oStudent_ul.offsetLeft>=0 && speed == 956){
oStudent_ul.style.left=-oStudent_ul.offsetWidth/2+'px';
}
change(oStudent_ul,{left:oStudent_ul.offsetLeft+speed},30);
}
oBtn_left.οnclick=function(){
if(oStudent_ul.offsetLeft % 956 == 0){
speed = 956;
clearInterval(timer2);
next2();
timer2=setInterval(next2,5000);
}
}
oBtn_right.οnclick=function(){
if(oStudent_ul.offsetLeft % 956 == 0){
speed = -956;
clearInterval(timer2);
next2();
timer2=setInterval(next2,5000);
}
}
三、缓慢回到顶部特效
css代码:
<div class="sidebar">
<ul>
<li>Lisa</li>
<li>Zooey</li>
<li>Mary</li>
<li>Liya</li>
<li>小雪</li>
<li>Simon</li>
<p id="to_top"></p>
</ul>
</div>
css样式:
.sidebar{width: 58px;height: auto;position: fixed;right: 40px;top: 150px;z-index: 9999;}
.sidebar li{width:58px;height:58px;line-height:83px;text-align:center;color:#ffffff;font-family:"微软雅黑";font-size:12px;background: url(../img/qidian/sidebar_qq.png) no-repeat;margin-bottom: 4px;cursor: pointer;float: left;}
.sidebar li:hover{background: url(../img/qidian/sidebar_qq_a.png)}
.sidebar p{width:58px;height:58px;background: url(../img/qidian/sidebar_arr.png) no-repeat;cursor: pointer;opacity: 0;filter: alpha(opacity:0);float: left;}
.sidebar p:hover{background: url(../img/qidian/sidebar_arr_a.png)}
js文件:
var oTo_top = document.getElementById('to_top');
var timer3 = null;
oTo_top.οnclick=function(){
timer3=setInterval(function(){
var scrolltop = document.documentElement.scrollTop || document.body.scrollTop;
var speed = Math.ceil(scrolltop/15);
if(scrolltop==0){
clearInterval(timer3);
}
document.documentElement.scrollTop = document.body.scrollTop=scrolltop-speed;
},10)
}
难点:
无缝滚动使用了自写的原生JS,所以在动画执行时同时点击按钮会导致计时器清空,从而使运动距离不在两端超出距离。
解决方法:
使用JQ插件或者写一个开关,判断动画是否完成,完成时点击按钮才能移动UL的位置。
友推主页效果图:
主要特效:
一、:
css代码:
<div class="feature">
<div id="feature_box">
<span>
<div>
<img src="img/youtui/function1.png"/>
<h4>轻巧</h4>
<h4>light</h4>
<p>集成后安装包大小增加不到200k</p>
</div>
</span>
<span>
<div>
<img src="img/youtui/function2.png"/>
<h4>开源</h4>
<h4>open</h4>
<p>源代码开放,随时按需修改</p>
</div>
</span>
<span>
<div>
<img src="img/youtui/function3.png"/>
<h4>多模板</h4>
<h4>mutil-suit</h4>
<p>提供多套分享模板、图标素材</p>
</div>
</span>
<span>
<div>
<img src="img/youtui/function4.png"/>
<h4>多维度统计</h4>
<h4>statistics</h4>
<p>用户属性、行为、效果、一目了然</p>
</div>
</span>
</div>
</div>
样式:
.feature{width: 100%;height: 238px;border-top: 1px solid #dddddd;border-bottom: 1px solid #dddddd;}
#feature_box{width: 1350px;height: 150px;line-height: 141px;margin: 40px auto 40px;}
#feature_box span{width: 0px;height: 150px;margin-top: 15px;float: left;}
#feature_box div{width: 330px;height: 150px;overflow: hidden;display: block;}
#feature_box img{width: 135px;float: left;}
#feature_box h4{width:100px;height: 20px;line-height: 20px;color: #787878;font-family: "微软雅黑";font-size: 20px;font-weight:lighter;margin-top: 10px;float: left;}
#feature_box p{width:180px;height:40px;line-height:40px;color: #969696;font-family: "微软雅黑";font-size: 12px;margin-top:20px;float: left;}
js文件:
window.οnscrοll=function(){
//特点与回到顶部特效
var oBox=document.getElementById('feature_box');
var aSpan=oBox.getElementsByTagName('span');
var scrolltop=document.documentElement.scrollTop || document.body.scrollTop;
if(scrolltop>300){
for(i=0;i<aSpan.length;i++){
aSpan[i].style.display='block';
change(aSpan[i],{width:330},30);
}
}
else if(scrolltop<300){
for(i=0;i<aSpan.length;i++){
aSpan[i].style.display='none';
change(aSpan[i],{width:0},30);
}
}
}
二、无缝滚动
css代码:
<div class="banner">
<div id="banner_img">
<div class="banner_box">
<img src="img/youtui/bokeyuan.png"/>
<p>博客园</p>
</div>
div*n
</div>
<div class="empty"></div>
<div id="banner_button">
<div class="banner_btn">
<span style="opacity: 1; filter: alpha(opacity:100);"></span>
</div>
<div class="banner_btn">
<span></span>
</div>
<div class="banner_btn">
<span></span>
</div>
<div class="banner_btn">
<span></span>
</div>
</div>
</div>
css样式:
.banner{width: 900px;height: 122px;margin: 0 auto 78px;position: relative;overflow: hidden;}
#banner_img{width: 3840px;height: 92px;position: absolute;left: 0px;top: 0px;}
.banner_box{width: 60px;height: 92;margin-right: 60px;float: left;}
.banner_box img{width: 60px;margin-bottom: 14px;}
.banner_box p{color: #333333;font-family: "微软雅黑";font-size: 11px;font-weight: bold;text-align: center;margin: 0 -20px;}
.empty{height: 0;width: 0;}
#banner_button{width: 56px;height: 10px;margin: 112px auto 0}
.banner_btn{width: 10px;height: 10px;background: url(../img/youtui/yuanquan.png) no-repeat;border-radius: 5px;float: left;margin-right: 4px;cursor: pointer;}
.banner_btn span{width: 10px;height: 10px;border-radius: 5px;display: block;opacity: 0;filter: alpha(opacity:0);background: url(../img/youtui/yuanquan1.png) no-repeat;}
js文件:
var oBanner=document.getElementById('banner_img');
var oButton=document.getElementById('banner_button');
var aBtn=oButton.getElementsByTagName('span');
var timer=setInterval(next,4000);
var now=0;
for(i=0;i<aBtn.length;i++){
aBtn[i].index=i;
aBtn[i].οnclick=function(){
now=this.index;
tab();
}
}
function tab(){
for(i=0;i<aBtn.length;i++){
change(aBtn[i],{opacity:0},30);
}
change(aBtn[now],{opacity:100},30);
change(oBanner,{left:now*-960},30)
}
function next(){
now++;
if(now==aBtn.length){
now=0;
}
tab();
}
oBanner.οnmοuseοver=function(){
clearInterval(timer);
}
oBanner.οnmοuseοut=function(){
timer=setInterval(next,4000);
}
难点:
展开处原网站效果为从中间放大式的展开。即CSS的transition属性。
解决方法:
使用了JS的改变盒子宽度去解决
附上JS中使用的change函数的js样式:
function getstyle(obj, name) {
if(obj.currentStyle) {
return obj.currentStyle[name];
} else {
return getComputedStyle(obj, false)[name];
}
}
function change(obj, json,time,fn) {
clearInterval(obj.timer);
obj.timer = setInterval(function() {
// var at=parseInt(getstyle(obj,att));
var stop=true;
for(var i in json){
var at = 0;
if(i == 'opacity') {
at = Math.round(parseFloat(getstyle(obj, i)) * 100);
} else {
at = parseInt(getstyle(obj, i));
}
var speed = (json[i] - at) / 15;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if(at != json[i]){
stop=false;
}
// obj.style[att]=at+speed+'px';
if(i == 'opacity') {
obj.style[i] = (at + speed) / 100;
obj.style.filter = 'alpha(opacity:' + (at + speed) + ')';
} else {
obj.style[i] = at + speed + 'px';
}
}
if(stop){
clearInterval(obj.timer);
if(fn){fn()};
}
}, time)
}