当前位置: 首页 > news >正文

尝试写第一个js插件 图片轮播

最近在看怎么写js插件,尝试写了一个简单的图片轮播插件 jqury.picPlay.js 。

基本html框架为<div class="picPanel"><div class="slider"></div></div>,根据需要往里添加class为.pic、.num、.txt的div来分别放置图片列表,数字列表和文字列表。

调用方式:$.fn.jsPicPlay(setting);

setting可以设置三个参数

type: 图片切换方向,默认为横向切换,值为2的时候为垂直切换

intervalTime:设置图片多久切换一次,默认为3000ms

speed:图片切换的速度,默认为200ms

 

插件源码

JS

View Code
(function($){
    $.fn.extend({
        jsPicPlay:function(setting){
            var setting = setting || {};
            var config = {
                type:1, //默认横向切换
                intervalTime:3000,
                speed:400
            };
            $.extend(config,setting);
            var panel =  this.length ? this : $(".picPanel");
            panel.each(function(){
                var panel = $(this),pic = $(".pic",panel),num = $(".num",panel),txt = $(".txt",panel),cn="on",intervalTime = config.intervalTime,speed = config.speed,type=config.type,curIndex=0,myTime = 0;
                var picList = $("ul",pic),picItem = $("li",pic),numItem=$("li",num),txtItem = $("li",txt);
                var flash = {
                    setStyle:function(){
                        switch(type){
                            case 2:
                                picList.css({position:"absolute"});    
                                break;
                            default:
                                picList.css({position:"absolute","width":picItem.width()*picItem.length});
                                picItem.css({"float":"left"});
                        }
                    },
                    setNum:function(){
                        var ht="";
                        for(var i=1;i<picItem.length+1;i++){
                            ht+="<li>"+i+"</li>";
                        }
                        num.append("<ul>"+ht+"</ul>");
                        numItem = $("li",num);
                        numItem.first().addClass("on");
                    },
                    play:function(){
                        ++curIndex >= picItem.length && (curIndex=0);
                        switch(type){
                            case 2:
                                picList.animate({
                                    top:-curIndex*picItem.height()
                                },speed);
                                break;
                            default:
                                picList.animate({
                                    left:-curIndex*picItem.width()
                                },speed);
                        }
                        numItem.removeClass(cn).eq(curIndex).addClass(cn);    
                        txt.length && txtItem.eq(curIndex).show().siblings().hide();
                    },
                    start:function(){
                        myTime = picItem.length && setInterval(flash.play,3000);
                    },
                    stop:function() {
                        clearInterval(myTime);
                    }
                    
                };
                flash.setStyle();
                pic.length && num.length && flash.setNum();
                flash.start();
                num.delegate("li",'click',function(){
                    flash.stop();
                    curIndex=numItem.index($(this))-1;
                    flash.play();
                    flash.start();
                });
            });
            return panel;
        }
    });
})(jQuery);

CSS

View Code
.picPanel ul,.picPanelul li{
    padding:0;
    margin:0;
    list-style:none;
}

.picPanel {
    
    font-size:12px;
    font-family:arial,simsun;
}
.slider{
    width:400px;
    height:300px;
    padding:2px;
    border:1px solid #ccc;
    overflow:hidden;
    position:relative;
}
.pic {
    width:400px;
    height:300px;
    overflow:hidden;
    position:absolute;
}
.num {
    position:absolute;
    bottom:20px;
    right:10px;
    height:20px;
}
.num li {
    width:14px;
    height:14px;
    background:#000;
    color:#fff;
    margin:0 3px;
    text-align:center;
    line-height:14px;
    font-size:10px;
    cursor:pointer;
    float:left;
}
.num .on {
    font-weight:bold;
    background:#ff0000;
}
.txt {
    position:absolute;
    bottom:2px;
    height:20px;
    width:400px;
    opacity:0.6;
    filter:alpha(opacity=60);
    background:#000;
    overflow:hidden;
}
.txt li {
    color:#fff;
    height:20px;
    line-height:20px;
    padding-left:8px;
    z-index:99;
}

示例:

完整的带有数字和文字的轮播

 
  • 风景1
  • 风景2
  • 风景3
  • 风景4

html

<div id="picOne" class="picPanel">
            <div class="slider">
                <div class="pic">
                    <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>
                    </ul>
                </div>
                <div class="num"></div>
                <div class="txt">
                    <ul>
                        <li>风景1</li>
                        <li>风景2</li>
                        <li>风景3</li>
                        <li>风景4</li>
                    </ul>
                </div>
            </div>
        </div>

执行JS

$("#picOne").jsPicPlay();

 

仅有图片的轮播

html

<div class="picPanel" id="picTwo">
            <div class="slider">
                <div class="pic">
                    <ul>
                        <li><img src="img/4.jpg"/></li>
                        <li><img src="img/1.jpg"/></li>
                        <li><img src="img/2.jpg"/></li>
                        <li><img src="img/3.jpg"/></li>
                    </ul>
                </div>
            </div>
        </div>

执行JS

$("#picTwo").jsPicPlay({type:2});

 

如果当前页面的一个或多个轮播都使用同样的设置直接写$.fn.jsPicPlay()来执行;

转载于:https://www.cnblogs.com/blackwood/archive/2013/04/03/2998186.html

相关文章:

  • 确定字符串互异
  • errno含义
  • 将满二叉树转换为求和树
  • JavaBean的学习
  • 排版页数
  • 最长回文串
  • 分享:Sersync试用
  • pstreegdb
  • 一点正则表达式的学习碎片
  • 链表分割
  • void*
  • python requests.session 与 requests
  • 爬虫_urlencode问题
  • 如何实现MySQL的自动备份
  • 魔术索引
  • 2017-09-12 前端日报
  • Git初体验
  • Invalidate和postInvalidate的区别
  • java第三方包学习之lombok
  • Laravel Mix运行时关于es2015报错解决方案
  • Lucene解析 - 基本概念
  • Meteor的表单提交:Form
  • spring security oauth2 password授权模式
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 高性能JavaScript阅读简记(三)
  • 如何学习JavaEE,项目又该如何做?
  • 如何优雅地使用 Sublime Text
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • Java总结 - String - 这篇请使劲喷我
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​Java并发新构件之Exchanger
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (七)Knockout 创建自定义绑定
  • (转载)虚函数剖析
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET 8.0 发布到 IIS
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net 流——流的类型体系简单介绍
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET中 MVC 工厂模式浅析
  • @AliasFor注解
  • @Resource和@Autowired的区别
  • [<事务专题>]
  • [20170705]diff比较执行结果的内容.txt
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [Android Studio] 开发Java 程序
  • [AutoSar NVM] 存储架构
  • [C#]DataTable常用操作总结【转】
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】
  • [delphi]保证程序只运行一个实例
  • [Excel VBA]单元格区域引用方式的小结
  • [Flex] PopUpButton系列 —— 控制弹出菜单的透明度、可用、可选择状态
  • [hdu 2826] The troubles of lmy [简单计算几何 - 相似]