项目总结 极客学院 2016.11.21

项目:极客学院部分页面及友推、起点学院主页。

因为极客学院部分页面难度较低,且无特效,这里暂不评论。

起点学院主页效果图:


主要特效:


一、轮播图:

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

                    </ul>
                </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)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值