进阶版轮播图

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{
                padding: 0;
                margin: 0;
            }
            li{
                list-style: none;
            }
            body{
                background: #CCCCCC;
            }
            #box{
                width: 400px;
                margin: 50px auto;
                height: 426px;
                overflow: hidden;
                border: 1px solid yellow;
            }
            #top{
                position: relative;
                height: 320px;

            }
            #top li{
                position: absolute;
                top: 0;
                left: 0;
            }
            #left{
                position: absolute;
                width: 200px;
                top: 0;
                left: 0;
                height: 320px;
                z-index: 1000;
            }
            #right{
                position: absolute;
                width: 200px;
                height: 320px;
                top: 0;
                right: 0;
                z-index: 1000;
            }
            #btn_l{
                position: absolute;
                background: url(img/btn.gif) no-repeat;
                height: 60px;
                width: 60px;
                left: 10px;
                top: 130px;
                z-index: 1001;
                opacity: 0;
                filter: alpha(opacity=0);
            }
            #btn_r{
                position: absolute;
                background: url(img/btn.gif) no-repeat 0 -60px;
                height: 60px;
                width: 60px;
                right: 10px;
                top: 130px;
                z-index: 1001;
                opacity: 0;
                filter: alpha(opacity=0);
            }
            #bottom{
                position: relative;

            }
            #small_ul{
                position: absolute;
                top: 0;
                left: 0;
            }
            #small_ul li{
                float: left;
            }
            #small_ul img{
                height: 90px;
                width: 120px;
                padding: 6px;
            }
        </style>
        <script src="sport.js"></script>
        <script type="text/javascript">

        </script>
    </head>
    <body>
        <div id="box">
            <ul id="top">
                <div id="left"></div>
                <div id="right"></div>
                <a href="javascript:;" id="btn_l"></a>
                <a href="javascript:;" id="btn_r"></a>
                <li style="z-index: 1 ";><img src="img/1.jpg" /></li>
                <li><img src="img/2.jpg"/></li>
                <li><img src="img/3.jpg"/></li>
                <li><img src="img/4.jpg"/></li>
                <li><img src="img/5.jpg"/></li>
                <li><img src="img/6.jpg"/></li>
            </ul>
            <div id="bottom">
                <ul id="small_ul">
                    <li><img src="img/1.jpg"/></li>
                    <li><img src="img/2.jpg"/></li>
                    <li><img src="img/3.jpg"/></li>
                    <li><img src="img/4.jpg"/></li>
                    <li><img src="img/5.jpg"/></li>
                    <li><img src="img/6.jpg"/></li>
                </ul>
            </div>
        </div>
    </body>
</html>
<script src="public.js"></script>
<script>
    /*
     实现思路
     1、页面加载  大图自动切换      当中间的小图高亮显示时,小图开始自动轮播
         显示的大图和下面高亮显示的小图有对应
     2、 鼠标移入移出到大box上,启动和停止定时器
     3、鼠标点击 左侧/右侧  按钮  大图自动切换   小图自动轮播    循环播放
     4、鼠标移入  移出   点击到小图上
         移入 : 当前小图高亮
         移出:  当前小图恢复高亮(但是注意如果是定时器控制的高亮小图 不恢复,仍然保持高亮状态)
         点击 : 大图 小图  自动轮播
     */
    window.onload = function(){
        //第一步 :查找要操作的元素
        var box = $id("box"), //大容器
            oUl = $id("small_ul"),//运动的ul
            smallImg = oUl.children,//所有小图
            bigImg = $id("top").getElementsByTagName("li"),//所有大图
            leftDiv = $id("left"),//左侧div
            rightDiv = $id("right"),//右侧div
            leftBtn = $id("btn_l"),//左按钮
            rightBtn = $id("btn_r"),//右按钮
            len = smallImg.length,//小图个数
            timer = null,//控制轮播定时器
            index = 0;//控制小图和大图的对应
        //第二步 : 控制轮播函数
        autoPlay();//页面打开后 初始化特效
        function autoPlay(){
            //排他
            //所有大图隐藏  小图透明度50%
            for( var i = 0 ; i < len ; i++ ){
                bigImg[i].style.display = "none";
                sport( smallImg[i] , { opacity : 50 } );
            }
            //边界处理
            if( index == len ){
                index = 0;
            }

            //控制index对应的小图和大图高亮显示
            bigImg[index].style.display = "block";
            sport( smallImg[index] , { opacity : 100 } );

            //根据不同条件 控制ul的移动
            if( index == 0 ){
                sport( oUl , { left : 0 } );
            }else if( index == len - 1 ){
                sport( oUl , { left : -smallImg[0].offsetWidth*3 } );
            }else{
                sport( oUl , { left : -smallImg[0].offsetWidth*(index-1) } );
            }
        }
        //第三步 :使用定时器完成自动轮播
        timer = setInterval( function(){
            index++;
            autoPlay();
        },2000 )
        //第四步 : 由于运动的过程中 小图区会有留白  说明 ul的宽度 不够导致的
        //设置运动的ul的宽度
        oUl.style.width = len * smallImg[0].offsetWidth + "px";

        //第五步 : 鼠标操作大容器 启动和停止定时器
        box.onmouseenter = function(){
            clearInterval( timer );
        }
        box.onmouseleave = function(){
            timer = setInterval( function(){
                index++;
                autoPlay();
            },2000 )
        }
        //第六步 : 鼠标移入到左侧 显示左侧箭头  离开左侧部分,隐藏左侧箭头
        //当鼠标离开左侧容器时 会导致按钮消失 按钮不能被点击 所以要为按钮添加鼠标移入移出事件
        leftDiv.onmouseenter = leftBtn.onmouseenter = function(){
            sport( leftBtn , { opacity : 100 } );
        }

        leftDiv.onmouseleave = leftBtn.onmouseleave = function(){
            sport( leftBtn , { opacity : 0 } );
        }
        //右侧移入和移出 同左侧操作
        rightDiv.onmouseenter = rightBtn.onmouseenter = function(){
            sport( rightBtn , { opacity : 100 } );
        }

        rightDiv.onmouseleave = rightBtn.onmouseleave = function(){
            sport( rightBtn , { opacity : 0 } );
        }

        //第七步 :点击左右按钮 控制大图和小图的轮播
        rightBtn.onclick = function(){
            index++;
            autoPlay();
        }
        leftBtn.onclick = function(){
            index--;
            if( index == -1 ){
                index = len - 1;
            }
            autoPlay();
        }
        //第八步 :小图的事件操作 移入  移出  点击
        for( let i = 0 ; i < len ; i++ ){
            smallImg[i].onclick = function(){
                //获取当前点击的小图的下标 赋值给index
                index = i;
                autoPlay();
            }
            smallImg[i].onmouseenter = function(){
                //当前操作的小图高亮显示
                sport( this , { opacity : 100 } );
            }
            smallImg[i].onmouseleave = function(){
                //离开时  小图恢复
                //获取当前操作的小图的下标
                if( index != i ){ //说明当前操作的小图是高亮的 和大图对应
                    sport( this , { opacity : 50 } );
                }
            }
        }
    }
</script>

引入的public.js文件

//函数功能根据id查找页面元素
function $id(id){
    return document.getElementById(id);
}
//定义一个函数  功能是创建某个元素
function create(ele){
    return document.createElement(ele);
}
//根据标签查找页面元素
function $tagName(tagname){
    return document.getElementsByTagName(tagname);
}

//写一个函数 功能获取任意区间值公式
function rand(min,max){
    return Math.round(  Math.random()*(max-min) + min );
}

//获取六位十六进制颜色值
function getColor(){
    var str = "0123456789abcdef";
    var color = "#";//拼接六位十六进制字符
    for( var i = 1 ; i <= 6 ; i++ ){
        color += str.charAt( rand(0,15) );
    }
    return color;
}
function dataToString( now , sign ){
    //sign表示日期的拼接符号
    //设置sign的默认值  如果用户传递sign参数 就使用用户传递的参数
    //否则就使用默认值
    sign = sign || "-";

    //获取日期的年月日
    var y = now.getFullYear();
    var m = now.getMonth() + 1;
    var d = now.getDate();
    //获取日期的时分秒
    var h = toTwo( now.getHours() );
    var mi = toTwo( now.getMinutes() );
    var s = toTwo( now.getSeconds() );
    //定义自己的时间格式
    var str = y + sign + m + sign + d + " " + h + ":" + mi + ":" + s;
    return str;
}
//定义一个函数 功能是在小于10的数字前拼接0
function toTwo( num ){
    return num < 10 ? "0" + num : num;
}

//定义一个时间差函数
function diff(start,end){
    return (end.getTime() - start.getTime())/1000;
}

//字母数字验证码
function yzm(){
    var str = "";//用来存放验证码
    for( var i = 1 ; i <= 6 ; i++ ){
        var code = rand(48,122);
        if( code >= 58&&code <= 64 ||code >= 91 && code <= 96 ){
            i--;
        }else{
            var ch = String.fromCharCode( code );
            str += ch;
        }
    }
    //console.log( str );
    return str;
}
//碰撞
function pz(obj1,obj2){
    var L1 = obj1.offsetLeft;
    var R1 = obj1.offsetLeft + obj1.offsetWidth;
    var T1 = obj1.offsetTop;
    var B1 = obj1.offsetHeight + obj1.offsetTop;

    var L2 = obj2.offsetLeft;
    var R2 = obj2.offsetLeft + obj2.offsetWidth;
    var T2 = obj2.offsetTop;
    var B2 = obj2.offsetHeight + obj2.offsetTop;

    //如何碰不上 返回false   碰上返回true
    if( R1<L2||L1>R2||B1<T2||T1>B2 ){//碰不上
        return false;
    }else{
        return true;
    }
}

引入的sport.js文件

//获取CSS样式
function getStyle(obj,attr){
    return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj,1)[attr];
}
//完美运动
function sport(obj,json,fn){
    clearInterval(obj.timer);
    obj.timer = setInterval(function(){
        var stop = true; //检测停止的开关
        for(var attr in json){
            //获取初值
            var cur = 0;
            if(attr == "opacity"){
                cur = parseInt(parseFloat(getStyle(obj,attr)) * 100);
            }else{
                cur = parseInt(getStyle(obj,attr));
            }
            //设置速度
            var speed = (json[attr] - cur) / 8;
            speed = speed > 0? Math.ceil(speed) : Math.floor(speed);
            //检测停止
            if(json[attr] != cur){
                stop = false;
            }
            //运动
            if(attr == "opacity"){
                obj.style.opacity = (cur + speed ) / 100;
                obj.style.filter = "alpha(opacity=" + (cur + speed) + ")";
            }else{
                obj.style[attr] = cur + speed + "px";
            }
        }
        if(stop){
            clearInterval(obj.timer);
            if(fn){
                fn();
            }
        }
    },30);
}

原文地址:https://www.cnblogs.com/Leslie-Cheung1584304774/p/10529464.html

时间: 2024-10-01 07:05:06

进阶版轮播图的相关文章

移动版轮播图

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>新型轮播图</title> <link rel="stylesheet" href="index.css"> *{ margin:0px; padding: 0px; } .lunbo{ width: 1000

84JS插件:jQuery版轮播图

一.代码分两个部分:1.HTML部分,根据注释处理即可:2.基于jQuery的play.js插件部分,这里为了展示效果,直接写在<html></html>下的<script></script>标签里.3.效果包含:自动轮播,焦点对齐,前进后退,直走不返,鼠标进入.轮播停止且前进后退图标出现,鼠标离开.轮播重启且前进后退图标隐藏.4.这里可以预览效果.二.轮播图原理说明:(1)轮播图(假设)有7张图片,“一”字排列,把第1张图片复制一次,放到第8张的位置,这样

jq版轮播图

html部分 <div class="banner"> <ul class="img"> <li><img src="login_bj1.jpg" alt=""/></li> <li><img src="login_bj1.jpg" alt="" /></li> <li><i

bootstrapcss3触屏滑块轮播图

插件描述:bootslider响应bootstrapcss3触屏滑块轮播图 小海已经好久没分享技术性文章了,这个基于bootstrap的触屏版轮播图绝对满足大家的胃口,并且支持移动端触摸滑动.功能上,这款bootstrapcss3触屏滑块轮播图支持鼠标滑动.手机端触摸滑动.外观上,这款bootstrap的触屏版轮播图的两侧有淡化处理,因此更显立体效果. 本文由涂志海博客提供,想获取更多的资料请访问www.tuzhihai.com

js - 面向对象 - 小案例:轮播图、随机点名、选项卡、鼠标拖拽

面向对象 对象 : (黑盒子)不了解内部结构, 知道表面的各种操作. 面向对象 : 不了解原理的情况下 会使用功能 . 面向对象是一种通用思想,并非编程中能用,任何事情都能用. 编程语言的面向对象的特点: ? 封装 : 看不到里面的东西 , 用好表面功能. ? 继承 : 从父类继承一些方法 , 属性 , 子类又有一些新的特性. ? 多态 ? 抽象 : 抽取一个功能里面多个核心的功能模块. ? 思想: 高内聚.低耦合 ? 低耦合 :每个功能模块之间耦合度要低 ? 高内聚 :模块内部要紧密相连 面向

【原】运动版的轮播图,有左右按钮和单独分页

运动版的轮播图,有左右按钮和单独分页 这个例子重点在于: 运动框架的复习,要灵活运动回调函数 始终以全局变量iNum来控制oUl的移动目的地,每次有任何动作,都是先判断iNum并改变iNum后去调用运动函数 刚才在复查代码的时候发现个奇怪的现象,在ie11和cent browser打开的时候居然不会滚动,iNum倒是在变化,突然想到之前在看妙味课堂的时候有老师提到一句,给要运动的元素,在加上position:absolute后,如果不加上left:0;top:0会有兼容问题,所以,我给oUl加上

移动端 触屏轮播图(完善版)

<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=320,user-scalable=no" /> <title>ios 轮播图简版<

js学习总结----轮播图之渐隐渐现版

具体代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{ margin:0; padding:0; font-size:14px; -webkit-user-select:none; } ul,li{ list-style } im

轮播图---左右切换无长滚动效果轮播图-中级难度版

左右切换无长滚动轮播图思路:首先设有全局变量position(确定当前图片是第几张),arr数组:存放图片地址,方向:direction, 及lis小圆点数组,prev,记录小圆点的前一个, moveBool是否进入运动函数等1.点击事件:点击左边的leftBn,设置direction="right",position--,在这要确定position不能超出数组长度范围, 超出要重新赋值,点击小圆点把小圆点的当前是lis数组中的第几个赋值给position,然后图片生成2.图片生成:图