zoukankan      html  css  js  c++  java
  • 轮播图—运动框架来实现(拥有透明度效果)


    <!DOCTYPE html>
    <html>
    <head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
    *{
    padding:0;
    margin: 0;
    list-style: none;
    }
    #wrap{
    590px;
    height:340px;
    border:1px solid #000;
    margin: 50px auto;
    position: relative;
    }
    #wrap a{
    30px;
    height: 30px;
    line-height: 30px;
    background: #000;
    opacity: 0.3;
    filter: alpha(opacity=30);
    text-align: center;
    text-decoration: none;
    color:#fff;
    font-size: 16px;
    position: absolute;
    top: 150px;
    }
    #wrap #prev{
    left:0;
    }
    #wrap #next{
    right:0;
    }
    #wrap ol{
    position: absolute;
    bottom:10px;
    left:50%;
    margin-left: -50px;
    }
    #wrap ol li{
    15px;
    height:15px;
    border-radius: 50%;
    float: left;
    margin-left: 5px;
    background: #fff;
    }
    #wrap ol li.active{
    background: red;
    }
    #wrap ul{
    590px;
    height:auto;
    position: absolute;
    left:0;
    }
    #wrap ul li{
    590px;
    height:340px;
    position: absolute;
    top:0;
    left:0;
    }
    </style>
    </head>
    <body>
    <div id="wrap">
    <ul id="box">
    <li><img src="img/1.jpg" alt=""/></li>
    <li><img src="img/2.jpg" alt=""/></li>
    <li><img src="img/3.jpg" alt=""/></li>
    <li><img src="img/4.jpg" alt=""/></li>
    <li><img src="img/5.jpg" alt=""/></li>
    </ul>
    <a id="prev" href="javascript:;">←</a>
    <a id="next" href="javascript:;">→</a>
    <ol id="btn">
    <li class="active"></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    </ol>
    </div>
    </body>
    </html>
    //这里引用了一个封装好的运动框架
    <script src="move1.js"></script>
    <script>
    window.onload=function(){
    var wrap=document.getElementById("wrap");
    var box=document.getElementById("box");
    var aLi=box.getElementsByTagName("li");
    var aBtn=document.getElementById("btn").getElementsByTagName("li");
    var next=document.getElementById("next");
    var prev=document.getElementById("prev");
    var timer=null;
    var iNow=0;

    function demo(){
    for(var i=0;i<aBtn.length;i++){
    aBtn[i].className='';
    move(aLi[i],{opacity:0});
    }
    move(aLi[iNow],{opacity:1});
    aBtn[iNow].className="active";
    }
    for(var i=0;i<aBtn.length;i++){
    aBtn[i].index=i;
    aBtn[i].onclick=function(){
    iNow=this.index;
    demo();
    }
    }
    next.onclick=oNext;
    function oNext(){
    iNow++;
    if(iNow==aLi.length)
    iNow=0;
    demo();
    }
    prev.onclick=function(){
    iNow--;
    if(iNow==-1)
    iNow=aLi.length-1;
    demo();
    };
    timer=setInterval(oNext,2000);

    wrap.onmouseover=function(){
    clearInterval(timer);
    };
    wrap.onmouseout=function(){
    timer=setInterval(oNext,2000);
    }
    }
    </script>

    //js封装库
    function getStyle(obj,name){
    if(obj.currentStyle){
    return obj.currentStyle[name];
    }else{
    return getComputedStyle(obj,false)[name];
    }
    }
    //complete-->{}:{time:500,ease:ease-in,fn:}
    function move(obj,json,complete){
    clearInterval(obj.timer);
    complete=complete || {};
    complete.time=complete.time || 1000;
    complete.ease=complete.ease || "linear";
    var start={}; //开始的位置
    var dis={}; //距离

    for(var name in json){
    start[name]=parseFloat(getStyle(obj,name)); //开始的位置
    dis[name]=json[name]-start[name]; //距离
    }

    var count=Math.floor(complete.time/30); //次数
    var n=0; //当前的的次数
    obj.timer=setInterval(function(){
    n++;
    for(var name in json){
    switch (complete.ease){
    case "linear": //匀速
    var a=n/count;
    var cur=start[name] + dis[name]*a;
    break;
    case 'ease-in': //加速
    var a=n/count;
    var cur=start[name] + dis[name]*a * a * a;
    break;
    case 'ease-out': //减速
    var a=1-n/count;
    var cur=start[name] + dis[name]*(1-a * a * a);
    break;
    }

    if(name=="opacity"){ //透明度
    obj.style.opacity=cur;
    obj.style.filter="alpha(opacity:"+cur*100+")";
    }else{
    obj.style[name]=cur + "px";
    }
    }
    if(n==count){
    clearInterval(obj.timer);
    complete.fn && complete.fn();
    }
    },30)
    }
  • 相关阅读:
    webpack基础
    LeetCode232. 用栈实现队列做题笔记
    mysql 时间加减一个月
    leetcode 1381. 设计一个支持增量操作的栈 思路与算法
    LeetCode 141. 环形链表 做题笔记
    leetcode 707. 设计链表 做题笔记
    leetcode 876. 链表的中间结点 做题笔记
    leetcode 143. 重排链表 做题笔记
    leetcode 1365. 有多少小于当前数字的数字 做题笔记
    LeetCode1360. 日期之间隔几天 做题笔记
  • 原文地址:https://www.cnblogs.com/wangqiniqn/p/6200783.html
Copyright © 2011-2022 走看看