• 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 }
  • 相关阅读:
    9、Spring Boot 2.x 集成 Thymeleaf
    【专题】Spring Boot 2.x 面试题
    8、Spring Boot 2.x 服务器部署
    7、Spring Boot 2.x 集成 Redis
    6、Spring Boot 2.x 集成 MyBatis
    5、Spring Boot 2.x 启动原理解析
    4、Spring Boot 2.x 自动配置原理
    3、Spring Boot 2.x 核心技术
    2、Spring Boot 2.x 快速入门
    centOS下安装JDK1.8.60,glassfish4.1.1以及MySQL
  • 原文地址:https://www.cnblogs.com/nhsd/p/3769731.html
Copyright © 2020-2023  润新知