• 图片轮播插件


    刚买了司徒大大的《Javascript框架设计》,准备开始研读。打算在读之前先随便写个图片轮播插件,到读完这本书再来看看现在的自己有多菜。。。。。。。

    顺便做图片轮播的时候用美女照片真影响效率。。。。。

    两三个小时写出来的。。代码略粗糙。。见谅。。

    上代码!

    先是如何使用:

    html:

    <div id='outer' style='591px;height:862px;overflow:hidden;margin-left:100px;'>
        <ul id='try-slide' style='list-style:none;top:0px;'>
            <li><img src="./slide/1.jpg"/></li>
            <li><img src="./slide/3.jpg"/></li>
            <li><img src="./slide/4.jpg"/></li>
            <li><img src="./slide/5.jpg"/></li>
        </ul>
        <button id='left_btn' style='position:absolute;'>left</button>
        <button id='right_btn' style='position:absolute;left:100px;'>right</button>
        <ul id='list' unsel='url(./slide/dot.jpg) -71 0' sel='url(./slide/dot.jpg) 0 0' style='position:absolute;bottom:120px;'></ul>
    </div>

    js:

    $(function(){
        $('#try-slide').cy_slide({is_control: true,delay:5000,is_list:true,is_mouse:true});
    });

    至于具体参数的话,如果你们真的不介意这么简陋的代码,可以看源码里的default_opt里面的设置,想要改的话都可以在cy_slide()里面传入

    下面是轮播源码:

    (function($,w,undefined){
        // 初始化设置
        var default_opt = {
            direct: 'left',
            speed: '50',
            delay: '1000',
            content: 'li',
            is_list: false,
            is_control: false,
            left_btn: '#left_btn',
            right_btn: '#right_btn',
            list: '#list',
            time: false,
            step: 1,
            is_mouse: false
        },opt;
    
        // slide入口函数
        function slide_init(options){
            var elements;
            opt = $.extend(default_opt,options);
            opt.target = $(this);
            opt.width = opt.target.parent().width();
            opt.count = $(opt.content,opt.target).length;
            opt.contentWidth = $(opt.content+':eq(0)',opt.target).outerWidth();
            opt.target.css({'position':'absolute','left':'0px','font-size': '0px','width':(opt.contentWidth)*(opt.count+1)+'px'});
            opt.target.parent().css('position','relative');
            $(opt.content+':eq(0)',opt.target).clone().appendTo(opt.target);
            opt.target.width();
            control();
            opt.time = setTimeout(play,opt.delay);
        }
    
        function control(){
            if (opt.is_control) {
                $(opt.left_btn).bind('click',function(){step('left');});
                $(opt.right_btn).bind('click',function(){step('right')});
                function step(direct){
                    if(opt.time){
                        clearTimeout(opt.time);
                        opt.time = false;
                    }
                    play(direct);
                }
            };
            if (opt.is_list) {
                var list = $(opt.list),html;
                opt.sel = list.attr('sel');
                opt.unsel = list.attr('unsel');
                html = '<li style="background:'+opt.sel+'" class="sel"></li>';
                for (var i = opt.count - 2; i >= 0; i--) {
                    html += '<li style="background:'+opt.unsel+'"></li>';
                };
                list.html(html);
                $('li',list).each(function(){
                    $(this).bind('click',jump);
                });
            };
            if (opt.is_mouse) {
                opt.target.parent().bind('mouseenter',function(){
                    if(opt.time){
                        clearTimeout(opt.time);
                        opt.time = false;
                        opt.mousein = true;
                    }
                }).bind('mouseleave',function(){
                    if(!opt.time){
                        opt.time = setTimeout(play,opt.delay);
                        opt.mousein = false;
                    }
                })
            };
        }
    
        // 多步step跳转,有list上点击触发
        function jump(event){
            event = event? event : w.event;
            var tar = $(event.target? event.target : event.srcElement) ,
                ind = tar.index();
            if(ind != $('li.sel',list).index()){
                if(opt.time){
                    clearTimeout(opt.time);
                    opt.time = false;
                }
                var steps = ind - ($('li.sel',list).index()),
                direct = steps > 0 ? 'left' : 'right';
                pos_adjust(direct);
                opt.target.animate({'left':'-='+(opt.width)*steps+'px'},opt.speed,'linear',show_list);
            };
        }
    
        //主函数
        function play(direct){
            direct = direct? direct : opt.direct;
            opt.time = false;
            pos_adjust(direct);
            animation(direct);
        }
    
        // 动画轮播前图片位置调整
        function pos_adjust(direct){
            var left = opt.target.css('left')? opt.target.css('left').slice(0,-2):0;
            if(direct == 'left' && (opt.contentWidth)*opt.count <= (-left)){
                opt.target.css('left','0px');
            }
            if(direct == 'right' && left >= 0){
                opt.target.css('left','-'+(opt.contentWidth)*(opt.count)+'px');
            }
        }
    
        //animation
        function animation(direct){
            if(direct == 'right')
                opt.target.animate({'left':'+='+(opt.width)*(opt.step)+'px'},opt.speed,'linear',show_list);
            else
                opt.target.animate({'left':'-='+(opt.width)*(opt.step)+'px'},opt.speed,'linear',show_list);
        }
    
        // 图片轮播动画后,list调整
        function show_list(){
            if (opt.is_list) {
                var left =  opt.target.css('left')? opt.target.css('left').slice(0,-2):0,
                index = parseInt(-left/(opt.contentWidth)),
                list = $(opt.list);
                index = index >= opt.count ? 0 : index;
                $('li.sel',list).removeAttr('class').css('background',opt.unsel);
                $('li:eq('+index+')',list).attr('class','sel').css('background',opt.sel);
            };
            if(!(opt.is_mouse && opt.mousein))
                opt.time = setTimeout(play,opt.delay);
        }
    
        $.fn.extend({
            cy_slide: slide_init
        });
    
    })(jQuery,window);

    上完代码,回去继续一边搞毕设一边看代码,匿了~

  • 相关阅读:
    python ddt数据驱动框架
    yarn的安装和使用【转】
    辅助色选取思路
    echarts y轴起始坐标值设置
    mapbox 图层视角设置
    vue-cli2使用store存储全局变量
    vue 数组不响应解决办法
    echarts之dataZoom配置项【转】
    Vue中使用地图平台MapboxGL【转载】
    快速入门MapboxGL【转载】
  • 原文地址:https://www.cnblogs.com/cyITtech/p/3726661.html
Copyright © 2020-2023  润新知