zoukankan      html  css  js  c++  java
  • jQuery插件实例五:手风琴效果[动画效果可配置版]

    昨天写了个jQuery插件实例四:手风琴效果[无动画版]那个是没有动画效果的,且可配置性不高,本篇为有动画效果。对于一些数据做了动态的计算,以实现自适应。

    欢迎大家入群258387392相互交流,学习,新群初建,欢迎各位的光临

    效果图预览

    插件JS

    accordionB.js

      1 ;
      2 (function ($, window, document, undefined) {
      3     var defaults = {
      4         'isajax': false, //是否从ajax加载数据
      5         'isDom': true, //是否是DOM数据,即直接写在DOM结构中,为默认项
      6         'isConfiguration': false,//是否是配置数据
      7         'imglist': [],//配置数据
      8         'ajaxurl': '',//Ajax()获取数据时的地址
      9         'isanimate':true,//是否有动画效果
     10         'sped':100,//动画速度
     11         'showwidth':252,//当前选中项的宽度
     12         'isClear':true,//当鼠标移出DIV时,是否还原初始显示状态
     13         'firstShow':false//初次加载时,第一项是否展开
     14     };
     15 
     16     $.fn.nhsdAccordion = function (options) {
     17         var $parentDiv = $(this);
     18         var $opts = $.extend({}, defaults, options);
     19         var $mouseoverTile = "";
     20         var $a_width = parseInt($parentDiv.width());
     21         if($opts.isanimate==true){
     22             $a_width = $a_width-2;//尽可能的保证样式的正确性
     23         }
     24         var $quantity;//li的数量
     25         var $p_width;//收缩时的平均宽度
     26         var $o_width;//当一个展开时,剩下的项li的平均宽度
     27         var $cli;//记录当前选中项
     28 
     29         function initDom() {
     30             $parentDiv.html("");
     31             $p_width = $a_width/$quantity;
     32             $o_width = ($a_width-parseInt($opts.showwidth))/($quantity-1);
     33             
     34             var $ul = $('<ul></ul>', { 'class': 'acdul' }).appendTo($parentDiv);
     35             for (var i = 0, j = $opts.imglist.length; i < j; i++) {
     36                 var temp = $opts.imglist[i];
     37                 var $li;
     38                 if($opts.firstShow==true){
     39                     if(i==0){
     40                         $li = $('<li></li>').css({
     41                             $opts.showwidth+'px'
     42                         }).appendTo($ul);
     43                     }else{
     44                         $li = $('<li></li>').css({
     45                             $o_width+'px'
     46                         }).appendTo($ul);
     47                     }
     48                 }
     49                 else{
     50                     $li = $('<li></li>').css({
     51                         $p_width+'px'
     52                     }).appendTo($ul);
     53                 }
     54                 var $img = $('<img />', { 'src': temp.src, 'title': temp.title }).appendTo($li);
     55                 var $tit = $('<span class="pspan"></span>').html(temp.title).appendTo($li);
     56             }
     57             liEvent();
     58         }
     59 
     60         function liEvent() {
     61             $(".acdul li").bind("click mouseover", function () {
     62                 $mouseoverTile = $(this).find('img').attr('title');
     63                 $(this).find('img').removeAttr('title');
     64                 if($opts.isanimate==true){
     65                     $(this).siblings('li').stop(true,false).animate({$o_width+'px'},$opts.sped);
     66                     $(this).stop(true,false).animate({$opts.showwidth+'px'},$opts.sped);
     67                 }else{
     68                     $(this).siblings('li').attr('style',''+$o_width+'px');
     69                     $(this).attr('style','width'+$opts.showwidth+'px');
     70                 }
     71                 $(this).find('span').removeClass().addClass('cspan');
     72                 $cli = $(this);
     73             }).bind('mouseout', function () {
     74                 $(this).find('img').attr('title', $mouseoverTile);
     75                 $(this).find('span').removeClass().addClass('pspan')
     76             });
     77             
     78             $parentDiv.bind('mouseout',function(){
     79                 if($opts.isClear){
     80                     if($opts.isanimate==true){
     81                         $(this).find('ul li').stop(true,false).animate({$p_width+'px'},$opts.sped);
     82                     }else{
     83                         $(this).find('ul li').css({
     84                             $p_width+'px'
     85                         });
     86                     }
     87                 }else{
     88                     $(this).find('span').removeClass().addClass('pspan');
     89                     $cli.find('span').removeClass().addClass('cspan');
     90                 }
     91             });
     92         }
     93 
     94         function initAjax() {
     95             $.ajax({
     96                 type: 'get',
     97                 url: $opts.ajaxurl,
     98                 cache: false,
     99                 dataType: 'json',
    100                 beforeSend: function () { },
    101                 success: function (d) {
    102                     $opts.imglist = d;
    103                     $quantity = d.length;
    104                     initDom();
    105                 },
    106                 error: function () { }
    107             });
    108         }
    109         
    110         if ($opts.isajax == true) {
    111             initAjax();
    112         } else if ($opts.isConfiguration == true) {
    113             $quantity = $opts.imglist.length;
    114             initDom();
    115         } else if ($opts.isDom == true) {
    116             $quantity = $parentDiv.find('li').length;
    117             $p_width = $a_width/$quantity;
    118             $o_width = ($a_width-parseInt($opts.showwidth))/($quantity-1);
    119             liEvent();
    120         }
    121 
    122         return this;//用于保证当前元素还能实现链式编程
    123     }
    124 })(jQuery, window, document);

    CSS样式

    accordionB.css

     1 /* CSS Document */
     2 
     3 /*手风琴效果CSS*/
     4 .accordionDiv {
     5 /*     658px;*/
     6 /*     400px;*/
     7     width: 500px;
     8     height: 400px;
     9     margin: 0 auto;
    10     position: relative;
    11     overflow: hidden;
    12     top: 50px;
    13 }
    14 
    15 .acdul {
    16     position: absolute;
    17 }
    18 
    19     .acdul li {
    20         display: inline-block;
    21         float: left;
    22         cursor: pointer;
    23         position: relative;
    24         overflow: hidden;
    25         font-size: 20px;
    26         font-weight: bold;
    27     }
    28     
    29     .pspan{
    30         color: #ffffff;
    31         height: 100%;
    32     }
    33     .cspan{
    34         color: red;
    35         height: 100%;
    36     }
    37 
    38     .acdul img {
    39         float: left;
    40         position: relative;
    41         display: inline-block;
    42     }
    43 
    44     .acdul span {
    45         float: left;
    46         position: absolute;
    47         display: block;
    48         width: 22px;
    49         margin: 5px 0 0 5px;
    50         z-index: 100;
    51     }
    52 
    53     .redspan{
    54         color:red;
    55     }
    56     
    57     .laselirevise{
    58     
    59     }

    HTML页面

     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2 <html xmlns="http://www.w3.org/1999/xhtml">
     3 <head>
     4 <meta name="viewport" http-equiv="Content-Type" content="charset=utf-8" />
     5 <title>无标题文档</title>
     6 <link rel="stylesheet" type="text/css" href="../CSS/global.css"/>
     7 <link rel="stylesheet" type="text/css" href="../CSS/accordionB.css"/>
     8 <script type="text/javascript" src="../Script/jquery-1.9.1.min.js"></script>
     9 <script type="text/javascript" src="../Script/accordionB.js"></script>
    10 <script type="text/javascript">
    11         $(document).ready(function () {
    12            var dataimglist = [
    13                     {
    14                         'title':'手风琴效果图一',
    15                         'src':'../Images/accordion/1.png',
    16                         'href':'http://www.cnblogs.com/nhsd/'
    17                     }, {
    18                         'title': '手风琴效果图二',
    19                         'src': '../Images/accordion/2.png',
    20                         'href':'http://www.cnblogs.com/nhsd/'
    21                     }, {
    22                         'title': '手风琴效果图三',
    23                         'src': '../Images/accordion/3.png',
    24                         'href':'http://www.cnblogs.com/nhsd/'
    25                     }, {
    26                         'title': '手风琴效果图四',
    27                         'src': '../Images/accordion/4.png',
    28                         'href':'http://www.cnblogs.com/nhsd/'
    29                     }, {
    30                         'title': '手风琴效果图五',
    31                         'src': '../Images/accordion/5.png',
    32                         'href':'http://www.cnblogs.com/nhsd/'
    33                     }, {
    34                         'title': '手风琴效果图六',
    35                         'src': '../Images/accordion/6.png',
    36                         'href':'http://www.cnblogs.com/nhsd/'
    37                     }
    38             ];
    39 
    40             $("#accordionDiv").nhsdAccordion({
    41                 'imglist': dataimglist, 'interval': 'slow','isConfiguration':true
    42             });
    43             //上面是把数据写在配置项中
    44             //这是直接写在DOM结构中
    45             //$("#accordionDiv").nhsdAccordion({});
    46             //下面是从Ajax()中获取数据的形式,ajaxur后跟的是获取数据源地址
    47             //$("#accordionDiv").nhsdAccordion({'ajaxur':'/plug/accordiionB/'});
    48         });
    49 </script>
    50 </head>
    51 <body>
    52     <div>
    53         <div id="accordionDiv" class="accordionDiv">
    54            <ul class="acdul">
    55                <li style=" 83px;">
    56                     <img src="../Images/accordion/1.png" title="手风琴效果图一">
    57                     <span class="pspan">手风琴效果图一</span>
    58                </li>
    59                <li style=" 83px;">
    60                    <img src="../Images/accordion/2.png" title="手风琴效果图二">
    61                    <span class="pspan">手风琴效果图二</span>
    62                </li>
    63                <li style=" 83px;">
    64                     <img src="../Images/accordion/3.png" title="手风琴效果图三">
    65                     <span class="pspan">手风琴效果图三</span>
    66                </li>
    67                <li style=" 83px;">
    68                   <img src="../Images/accordion/4.png" title="手风琴效果图四">
    69                   <span class="pspan">手风琴效果图四</span>
    70                </li>
    71                <li style=" 83px;">
    72                   <img src="../Images/accordion/5.png" title="手风琴效果图五">
    73                   <span class="pspan">手风琴效果图五</span>
    74                </li>
    75                <li style=" 83px;">
    76                   <img src="../Images/accordion/6.png" title="手风琴效果图六">
    77                   <span class="pspan">手风琴效果图六</span>
    78                </li>
    79            </ul>
    80         </div>
    81     </div>
    82 </body>
    83 </html>

    另global.css

     1 * {
     2     margin: 0;
     3     padding: 0;
     4 }
     5 
     6 html, body {
     7     color: #000;
     8     background: #fff;
     9 }
    10 
    11 p {
    12     display: block;
    13     -webkit-margin-before: 1em;
    14     -webkit-margin-after: 1em;
    15     -webkit-margin-start: 0px;
    16     -webkit-margin-end: 0px;
    17 }
    18 
    19 body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td {
    20     margin: 0;
    21     padding: 0;
    22     list-style: none;
    23 }
    24 
    25 div {
    26     display: block;
    27 }
    28 
    29 a {
    30     text-decoration: none;
    31     color: #333;
    32 }
    33 
    34     a:hover {
    35         color: #14a0cd;
    36         text-decoration: underline;
    37     }
    38 
    39 img {
    40     border: none;
    41     line-height: 0;
    42     margin: 0;
    43     padding: 0;
    44     vertical-align: bottom;
    45 }
    46 
    47 table {
    48     border-collapse: collapse;
    49 }
    50 /*td {
    51 padding: 3px;
    52 }*/
    53 input {
    54     padding: 1px;
    55     vertical-align: middle;
    56     line-height: normal;
    57 }
    58 
    59 a:link, a:visited {
    60     text-decoration: none;
    61     color: #1F376D;
    62 }
    63 
    64 a:hover, a:active {
    65     text-decoration: underline;
    66     color: #BD0A01;
    67     border: none;
    68 }
    69 
    70 ul {
    71     clear: both;
    72     overflow: hidden;
    73     width: 100%;
    74 }
    75 
    76 ul, li {
    77     list-style: none;
    78 }
  • 相关阅读:
    只有APE文件的情况下自己制作CUE文件的方法转,经过本人验证真实可靠good!20101128终极解决版
    无法加载登录用户界面DLL MyGina.dll 解决
    sql2000_简单入门,以前的笔记
    dell_又一例:raid的变化(断电后,可能没有电池造成)
    MSSQL使用帮助租赁空间后的数据库链接
    PS创建动作并利用批处理命令自动处理多图片转
    office2003修复安装,缺少SKU011.CAB文件_解决
    使用双wan口的企业/校园网解决方案初探
    我机也中病毒MS Driver Management Service(原创)
    win2003开机有问题:Windows 无法查询 {7B849a69220F451EB3FE2CB811AF94AE} 的 DllName 注册表项,它将不会被加载。最有可能的原因是注册错误。
  • 原文地址:https://www.cnblogs.com/nhsd/p/3769731.html
Copyright © 2011-2022 走看看