• 讲解版的自动轮播(新手福利)样式和js就不分离了为了看的方便


    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>讲解版的自动轮播(新手福利)</title>
    <style>
    /*现在来写样式*/
    /*公共样式*/
    *{
    margin: 0;
    padding: 0;
    }
    li{
    list-style: none;
    }
    /*底层样式*/
    #det{
    100%;
    background: #fff;
    }
    /*轮播的总的区域的样式*/
    .banner{
    100%;
    position: relative;/*轮播区域要给按钮定位,故此给它绝对定位*/
    z-index:0;/*轮播区域按钮要在图片上,故此要分层*/
    }
    /*大图区域样式*/
    #banner{
    100%;
    height: 563px;/*根据自己的情况设置*/
    margin: 0 auto;/*可有可无,习惯呆着*/
    position: relative;/*大图区域要给每张图片定位,故此它绝对定位*/
    overflow: hidden;/*图片超出隐藏,这个不用解释了吧*/
    }
    /*大图所在UL*/
    #bannerimg{
    400%;/*banner全屏四张*/
    height: 100%;/*高度适应父级高度*/
    position: absolute;/*定位到左上角*/
    left:0;
    top:0;
    }
    /*每张大图*/
    #bannerimg li{
    float: left;/*浮动向左*/
    25%;/*宽为父级的25%*/
    height:100%;/*高度适应父级高度*/
    }
    #bannerimg li img{
    100%;
    height: 100%;
    }
    /*左边按钮*/
    #bannerleft{
    z-index: 10;/*在顶层,高于底层高于图片*/
    position: absolute;/*相对于父级的绝对定位*/
    left: 0;/*距离左边为0*/
    top:50%;/*距离父级顶部为父级高度的50%*/
    margin-top: -23px;/*再往上移动自身高度的一半,刚好居中*/
    25px;/*自身宽度*/
    height: 46px;/*自身高度*/
    background: rgba(0,0,0,0.4);/*背景颜色为40%透明度的黑色*/
    border-radius: 5px;/*设置圆角*/
    margin-left: 20px;/*再往右移动个20像素*/
    padding: 20px 10px;/*通过内边距将左边按钮的箭头所在区域撑大*/
    }
    /*右边按钮(和左边设置相同,不过left换成right)*/
    #bannerright{
    z-index: 10;
    position: absolute;
    right:0;
    top:50%;
    margin-top: -23px;
    25px;
    height: 46px;
    margin-right: 20px;
    padding: 20px 10px;
    background: rgba(0,0,0,0.4);
    border-radius: 5px;
    }
    /*左右按钮区域的箭头图片100%填充*/
    #bannerleft img,#bannerright img{
    100%;
    height: 100%;
    }
    /*底部小按钮所在区域*/
    .smallbuttom{
    position: absolute;/*相对于父级的绝对定位*/
    bottom: 30px;/*距离父级的底部30像素*/
    left: 50%;/*距离左边50%*/
    100px;/*设置自身宽度*/
    margin-left: -50px;/*50%+“-自身宽度的一半”=相对于父级的绝对定位的居中*/
    z-index: 10;/*和左右按钮在同一层,高于底层高于图片*/
    }
    /*底部小按钮的样式*/
    #smallimg li{
    float: left;/*浮动向左*/
    padding: 6px;/*内边距6像素*/
    border-radius: 50%;/*设置成为圆形*/
    margin-left:3px;/*距离左边为3像素*/
    }
    .fff{
    background:#fff;/*默认设置第一个为白色*/
    }
    .d6000f{
    background:#d6000f;/*默认设置其他为红色*/
    }
    </style>
    </head>
    <body>
    <!--通常写网站都有个banner轮播现在写个banner轮播-->
    <!--写代码先给底层-->
    <div id="det">
    <!--轮播开始(这个区域包含左右按钮+大图区域+小按钮区域)-->
    <div class="banner">
    <!--这个是大图区域-->
    <div id="banner">
    <ul id="bannerimg">
    <li class="i1"><a href="#"> <img src="http://pic.90sjimg.com/back_pic/00/00/52/00/444e0feebdb0040ff0f020c6a0954eb4.jpg" title="" alt=""/></a></li>
    <li class="i1"><a href="#"> <img src="http://pic.90sjimg.com/back_pic/00/00/69/40/fee699a5cddea0d569dc996e097365d3.jpg" title="" alt=""/></a></li>
    <li class="i1"><a href="#"> <img src="http://pic.90sjimg.com/back_pic/qk/back_origin_pic/00/01/94/3776f58b6e6386fd60de8a349ec4b966.jpg" title="" alt=""/></a></li>
    <li class="i1"><a href="#"> <img src="http://pic.90sjimg.com/back_pic/00/00/69/40/2c928e73f7aa4746b4600e3f0190e535.jpg" title="" alt=""/></a></li>
    </ul>
    </div>
    <!--这个是左边按钮-->
    <div id="bannerleft">
    <img src="http://thumbnail0.baidupcs.com/thumbnail/9ec3636cd55b6ed532673a67425a4e15?fid=2838135596-250528-989737401132161&time=1481526000&rt=pr&sign=FDTAER-DCb740ccc5511e5e8fedcff06b081203-QFOE4uMM6PWpnM8ej38bjGF7qF0%3d&expires=8h&chkbd=0&chkv=0&dp-logid=8039323154389339445&dp-callid=0&size=c10000_u10000&quality=90"/>
    </div>
    <!--这个是右边按钮-->
    <div id="bannerright">
    <img src="http://thumbnail0.baidupcs.com/thumbnail/d4bd30e50ed014d1c25d26c4a7c194fa?fid=2838135596-250528-813959071055462&time=1481526000&rt=pr&sign=FDTAER-DCb740ccc5511e5e8fedcff06b081203-YsNe2xa%2bPelVK2rL8fozsDan4G0%3d&expires=8h&chkbd=0&chkv=0&dp-logid=8039323154389339445&dp-callid=0&size=c10000_u10000&quality=90"/>
    </div>
    <!--这个是地下的小按钮-->
    <div class="smallbuttom">
    <ul id="smallimg">
    <li class="fff"></li>
    <li class="d6000f"></li>
    <li class="d6000f"></li>
    <li class="d6000f"></li>
    </ul>
    </div>
    </div>
    </div>
    <script type="text/javascript">
    /*加载完成后执行函数队列(封装一个加载完成后执行的函数)*/
    function addLoadEvent(func) {
    /*创建一个变量,接收加载完成*/
    var oldonload = window.onload;
    /* 判断如果检测到的类型不是是function,则将传的函数赋给加载完成后执行*/
    if(typeof window.onload != 'function') {
    window.onload = func;
    } else {/*若是function,则先执行*/
    window.onload = function(){
    oldonload();
    func();
    }
    }
    }
    /*看完上面的是不是迷迷糊糊的好吧,那用一句话来说就是:
    *先用oldonload变量把现有的window.onload存下来
    *然后应该先执行现有函数(oldonload)再执行自己的新的func
    *或者也可以理解为:window.onload = function () {};
    */

    /*第二个写运动函数(封装好的运动函数)*/
    /*运动函数(传参数:元素,属性,结束位置)*/
    function motion(obj, att, end) {
    /*清除定时器*/
    clearInterval(obj.time);
    /*创建定时器*/
    obj.time = setInterval(function() {
    /*创建变量用来接收元素对应的值*/
    var curr = 0;
    var bStop = true;
    /*判断属性为“opacity”时,利用getStyle函数获取元素的值,然后返回浮点数,再取整*/
    if(att == 'opacity') {
    curr = parseInt(parseFloat(getStyle(obj, att)));
    } else {
    /*直接获取值后取整*/
    curr = parseInt(getStyle(obj, att));
    }
    /*声明变量seed接收速度,(结束位置-当前位置)/4,得到的速度为缓冲运动速度速度匀减速*/
    var seed = (end-curr)/4;
    /*解决不能到达目标的bug,速度>0时,上取整,速度小于0时下取整*/
    seed = seed > 0 ? Math.ceil(seed) : Math.floor(seed);
    /*如果达到终止位置则清除定时器*/
    if( curr == end ) {
    clearInterval(obj.time);
    } else {
    /*没有达到终点的话接着计算*/
    /*如果样式为opacity则计算付样式得出结果除以10*/
    if(att == 'opacity'){
    obj.style.opacity = (seed + curr)/10;
    } else {
    /*其他样式直接计算,赋值*/
    obj.style[att] = seed + curr + 'px';
    }
    }
    },30);
    }
    /*通过属性获取元素对应的值*/
    function getStyle(obj, att) {
    /*获取外部(使用<link>)和内部(使用<style>)样式表中的样式(判断兼容IE)*/
    if (obj.currentStyle) {
    return obj.currentStyle[att];
    } else {
    return getComputedStyle(obj,false)[att];
    }
    }

    /*banner轮播(创建banner轮播函数)*/
    function banner() {
    /*声明变量index*/
    var index = 0;
    /*声明变量接收大图所在区域*/
    var banner = document.getElementById('banner');
    /*声明变量接收左边按钮*/
    var bannerleft = document.getElementById('bannerleft');
    /*声明变量接收右边按钮*/
    var bannerright = document.getElementById('bannerright');
    /*声明变量接收大图所在ul*/
    var bigimg = document.getElementById('bannerimg');
    /*声明变量接收底部按钮所在ul*/
    var smallimg = document.getElementById("smallimg");
    /*声明变量接收大图所在的每个li*/
    var bigimgli = bigimg.getElementsByTagName('li');
    /*声明变量接收小按钮所在的每个li*/
    var smallimgli = smallimg.getElementsByTagName('li');
    /*点击按钮(小图)显示对应大图*/
    /*因为大图和小按钮数量一致,故此用小的作为基准遍历*/
    for(var i = 0;i < smallimgli.length;i++){
    /*将当前索引值赋予小按钮对应的每个*/
    smallimgli[i].index = i;
    /*当点击当前按钮的时候:将当前的索引赋值给变量index并执行函数tab()*/
    smallimgli[i].onclick = function() {
    index = this.index;
    tab();
    }
    }
    /*鼠标悬停到大图所在区域停止运动,移开继续运动*/
    var timer = setInterval(free, 3000);
    banner.onmousemove = function() {
    clearInterval(timer);
    };
    banner.onmouseout = function() {
    timer = setInterval(free, 3000);
    };
    /*左右按钮点击事件*/
    bannerleft.onclick = function() {
    index--;
    if (index == -1) {
    index = smallimgli.length - 1;
    }
    tab();
    };
    bannerright.onclick = function() {
    index++;
    if (index == smallimgli.length) {
    index = 0;
    }
    tab();
    };
    /*小图(小按钮)与大图(banner)联动*/
    function tab() {
    /*按钮自动运动对应样式*/
    /*当前对应按钮添加一个内部样式为背景白色*/
    smallimgli[index].style.background = '#fff';
    /*声明一个变量来接收父节点*/
    var par = smallimgli[index].parentNode;
    /*通过父节点找到所有的子节点*/
    var lis=par.children;
    /*遍历同级包括自身的每个元素*/
    for(var i=0;i<lis.length;i++){
    /*判断同级下非本身的所有元素,给他添加一个样式为红色*/
    if(lis[i]!=smallimgli[index]){
    lis[i].style.background = "red";
    }
    }
    /*传值给运动函数:大图所在ul,属性为left,终止位置为:-((index) * bigimgli[0].offsetWidth)
    * 第一张:index=0,终止位置为0
    * 第二张:index=1,终止位置为第一张图片的宽度即为:-100%
    * 第三张:index=2,终止位置为第一张图片的宽度即为:-200%
    * 第四张:index=3,终止位置为第一张图片的宽度即为:-300%
    * */
    motion(bigimg, 'left', -((index) * bigimgli[0].offsetWidth));
    /*第一张*/
    if (index == 0) {
    motion(smallimg, 'left', 0);
    }
    /*第二张开始*/
    else if (index == smallimgli.length - 1) {
    motion(smallimg,'left', -((index-2) * smallimgli[0].offsetWidth));
    }
    /*最后一张*/
    else {
    motion(smallimg,'left', -((index-1) * smallimgli[0].offsetWidth));
    }
    }
    /*图片自行运动函数*/
    function free() {
    /*index初始等于0,自动每次自加1*/
    index++;
    /*如果索引等于图片的数量的时候将0赋给它
    * index=0,
    * index=1,
    * index=2,
    * index=3,
    * index=4=bigimgli.length--->index=0,
    * index=2,
    * ...
    * */
    if (index == bigimgli.length) {
    index = 0;
    }
    tab();
    }
    }
    /*调用函数addLoadEvent*/
    addLoadEvent(banner);
    </script>
    </body>
    </html>
  • 相关阅读:
    nginx win10 配置启动bat脚本
    linux ctrl + s 导致锁死 解决
    linux 执行shell 不小心导致无限死循环解决
    linux vim 意外退出导致下次vim进入报错提示恢复
    vue 自定义组件使用vmodel属性的具体说明,重点说明参数的定义
    echarts 官网首页能进去,但是演示和文档地址进不去的 win10解决办法
    mysql 报错 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled
    elementui h5 引入elementui 报错提示没有字体
    .net 中文传参
    ASP.NET, IE6下URL中文乱码问题 ASP.NET程序,当URL后缀包含奇数个中文字符
  • 原文地址:https://www.cnblogs.com/thongyan/p/6164610.html
Copyright © 2020-2023  润新知