用JavaScript实现旋转轮播图

旋转轮播图

最近一直在学习JavaScript,然后看到旋转轮播图的案例,就尝试着用js做了一个简单的轮播图,因为无法显示动态效果,所以就放个截图:
用JavaScript实现旋转轮播图_第1张图片
这个效果是这样的:一共有7张图片,它们会自动地向左滑动,然后左右箭头也可以控制轮播图的左滑和右滑,同时,如果鼠标停在图片上,那么轮播图会停止自动滑动,当鼠标移开时,将会继续向左轮播。
首先,我这里封装了两个函数(因为暂且还没有学jQuery,所以用了封装函数的方法来实现),第一个函数是$函数,调用可以获取html中的元素,代码如下:

`function $(select){
        if (typeof select != 'string') {
            console.log('传入的参数有误');         
            return null;
        }
        var firstChar = select.charAt(0);
        switch(firstChar){
            case '#':
                return document.getElementById(select.substr(1));
            break;
            case '.':
                if (document.getElementsByClassName){
                    return document.getElementsByClassName(select.substr(1));
                } else {
                    var result = [];
                    var allElemnts = document.getElementsByTagName('*');
                    console.log(allElemnts);
                    for (var i = 0; i < allElemnts.length; i++){
                        var e = allElemnts[i];
                        var className = e.className;
                        var classArr = className.split(' ');
                        for (var j = 0; j < classArr.length; j++){
                            var c = classArr[j];
                            if (c == select.substr(1)) {
                                result.push(e);
                                break;
                            }
                        }
                    }
                    return result;
                }
            break;
            default :
                return document.getElementsByTagName(select);
        }
    }`

第二个函数是一个动画函数,用json实现多条样式的动态改变,从而达到一个动画效果,代码如下: `

function animate(element, json, fun) {
    clearInterval(element.timer);
    function getStyle(element, styleName){
        if(element.currentStyle){
            //ie浏览器下 直接通过currentstyle来获取
            //return element.currentStyle.heigh;
            return element.currentStyle[styleName];
        }else{
            var computedStyle = window.getComputedStyle(element,null);
            return computedStyle[styleName];
        }
    }
    var isStop = false;
    element.timer = setInterval(function () {
        isStop = true;
        for (var key in json){
            var target = json[key];
            var current;
            if (key == 'opacity') {
                //当动画的类型为透明度时  获取的值应该是浮点类型
                current = parseFloat(getStyle(element, key)) || 1;
            } else {
                //其他情况  用整数类型
                current = parseInt(getStyle(element, key)) || 0;
            }           
            var step = (target - current) / 10;
            if (key != 'opacity') {
                step = step > 0 ? Math.ceil(step) : Math.floor(step);
            }
            current += step;
            if (key == 'opacity') {
                if (Math.abs(target - current) > 0.01) {
                    isStop = false;
                } else {
                    current = target;
                }
                element.style.opacity = current + '';
            } else {
                if (Math.abs(target-current) > Math.abs(step)) {
                    isStop = false;
                } else {
                    current = target;
                }
                if (key == 'zIndex'){
                    element.style.zIndex = Math.round(current);
                } else {
                    element.style[key] = current + 'px';
                }               
            }           
        }
        if (isStop) {
            clearInterval(element.timer);
            console.log('动画完成');
            if (typeof fun == 'function') {
                fun();
            }
        }
    }, 30);
}`

接下来就要写html的部分了,因为只有几张图片,所以html的部分很简单:

<body>
    <div class="box">
        <div class="content">
            <ul>
                <li><a href="#"><img src="./images/1.jpg">a>li>
                <li><a href="#"><img src="./images/2.jpg">a>li>
                <li><a href="#"><img src="./images/3.jpg">a>li>
                <li><a href="#"><img src="./images/4.jpg" class="current">a>li>
                <li><a href="#"><img src="./images/5.jpg">a>li>
                <li><a href="#"><img src="./images/6.jpg">a>li>
                <li><a href="#"><img src="./images/7.jpg">a>li>
            ul>
        div>
        <div class="control">
            <a href="javascript:;" id="prev">a>
            <a href="javascript:;" id="next">a>
        div>
    div>
body>

css样式的部分也不多做叙述。
下面就是JS是部分啦,代码也很简单,理清楚就好

   window.onload = function(){
    //定位,并给图片设置大小透明度
    var json = [{
        width: 630,
        top: 23,
        left: 0,
        zIndex: 2,
        opacity: 0
    },{
        width: 630,
        top: 23,
        left: 0,
        zIndex: 3,
        opacity: 0
    },{
        width: 630,
        top: 23,
        left: 0,
        zIndex: 4,
        opacity: 0.6
    },{
        width: 730,
        top: 0,
        left: 125,
        zIndex: 5,
        opacity: 1
    },{
        width: 630,
        top: 23,
        left: 350,
        zIndex: 4,
        opacity: 0.6
    },{
        width: 630,
        top: 23,
        left: 350,
        zIndex: 3,
        opacity: 0
    },{
        width: 630,
        top: 23,
        left: 350,
        zIndex: 2,
        opacity: 0
    }];
function refreshImageLocatin(index){
        //默认情况下 第i张图对应第i个位置
        //index=1时 第i个图对应i-1个位置
        //也就是第i个图对应i-index的位置
        var liArr = $('li');
        for(var i = 0; i < liArr.length; i++){
            var li = liArr[i];
            var locationIndex = i - index;
            console.log('i='+i);
            console.log('index='+index);
            console.log('locationIndex='+locationIndex);
            if(locationIndex < 0){
                locationIndex += 7;
            }
            var locationData = json[locationIndex];
            animate(li, locationData, null);
        }
    }

    refreshImageLocatin(0);

    var index = 0;
    $('#next').onclick = function(){
        index++;
        if(index == 7){
            index = 0;
        }
        refreshImageLocatin(index);
    }
    $('#prev').onclick = function(){
        index--;
        if(index < 0){
            index = 6;
        }
        refreshImageLocatin(index);
    }

    var nextImage = $('#next').onclick;
    var contentBox = $('.content')[0];
    //自动播放
    var timer = setInterval(nextImage, 3000);
    //当鼠标移动到图片上,停止播放
    contentBox.onmouseover = function(){
        clearInterval(timer);
    }
    contentBox.onmouseout = function(){
        timer = setInterval(nextImage ,3000)
    }
}

以上就是旋转轮播图的全部内容了,给自己的学习过程做个简单的记录,也顺便巩固一下。

你可能感兴趣的:(web前端)