• 基于jQuery开发的焦点图插件

    同事找帮忙需要写一个普通的焦点图,切换效果是渐变,默认不自动切换,图片有小点,点击小点可以切换图片。花了三个多小时写好,贴出来的目的是让那些开发jQuery插件的童鞋做个参考。

    源码

    focus.js

    /**
     * 焦点图
     * 2013-03-11
     */
    (function($) {
      $.fn.focus = function(param){   
        // 默认高度
        var height = param.height || 200;   
        // 默认宽度
        var width = param.width || 100; 
        var _this = null;
    
        // jQuery的对象选择器是多个,所以这里使用each遍历每一个节点对象
        $(this).each(function(){
    
          // 把每一个节点对象赋给一个变量,这有助于程序效率
          _this = $(this);
    
          $('body').css({margin: 0, padding: 0});
    
          // 改变盒子大小 
          _this.css({
            width: width + 'px',
            height: height+'px',
            position: 'relative',
            padding: 0
          });
        
    
          var fock_png_width = 16;            // png宽度(px)
          var fock_png_margin_sx = 8;         // png 小图标上下间距(px)
          var ul_height = fock_png_width + fock_png_margin_sx * 2; // 底部黑条的高度(px)
          var box_height = _this.height();            
          var box_width = _this.width();
          var fock_png_margin_zy = 10;            // png 小图标左右间距
          var js = document.scripts;
          var speed = 500;
          var sper_url = '';              // js路径
          var sper_file_name = 'sper.png';        // png 文件名
          var last_index = 0;
          var lock = false;
    
          var objImg = _this.find('>img');     // 查找所有图片
    
          if (objImg.length === 0) {
            return false;   
          }else{
            var img_length = objImg.length; 
          }
    
          // 获取js文件路径 目的是为了使用png图片
          for (var i = js.length; i>0; i--) {
            if (js[i-1].src.indexOf('lee_plug')>-1) {
              sper_url = js[i-1].src.substring(0, js[i-1].src.lastIndexOf("/") + 1) + sper_file_name;
            }
          }
    
          // 底部黑条     
          _this.append('<div style="position:absolute;top:'+(height-ul_height)+'px;background:#000;opacity:0.7;height:'+ul_height+'px;margin:0 auto;padding:0;width:100%;"></div>');
    
          // 创建小图标
          var html = '<ul style="position:absolute;top:'+(height-ul_height)+'px;height:'+ul_height+'px;margin:0 auto;padding:0;width:100%;opacity:0.7;">';
          for (var i=0; i < img_length; i++) {
            $(objImg[i]).css({
              width: '100%',
              height: '100%',
              position: 'absolute',
              margin: 0,
              padding: 0
            });
    
            if (i >= 1) {
              $(objImg[i]).hide();        
              var sper_weizhi = 0;
            }else{
              var sper_weizhi = '-' + fock_png_width + 'px';
            }
    
            var left = parseInt((box_width - img_length*(fock_png_width+fock_png_margin_zy*2)) /2) + i*(fock_png_width+fock_png_margin_zy);
    
            html += '<li style="display:block;position:absolute;width:'+fock_png_width+'px;height:'+fock_png_width+'px;background:url('+sper_url+') 0 '+sper_weizhi+' no-repeat;margin:0; padding:0;cursor:pointer; top:'+parseInt((ul_height-fock_png_width)/2)+'px;left:'+left+'px;"></li>';
          }
          html += '</ul>';
    
          _this.append(html);
    
          // 绑定单击事件
          _this.find('>ul>li').each(function(i){
            // 这里使用的js原生事件绑定,因为jQuery 的 click怎么闭包传入i没有弄明白,所以使用原生函数处理
            $(this).get(0).onclick = function (num, obj) {
              return function(){
                if (num === last_index || lock) {
                  return false;
                }
                lock = true;
                obj.find('>ul>li').each(function (i) {
                  $(this).css('background', 'url(' + sper_url + ') 0 0 no-repeat');
                });
                obj.find('>ul>li:eq(' + num + ')').css('background','url(' + sper_url + ') 0 -' + fock_png_width + 'px no-repeat');
                obj.find('>img:visible').fadeOut(speed);
                obj.find('>img:eq(' + num + ')').fadeIn(speed, function () {
                  lock = false;
                  last_index = num;   
                });
              }
            }(i, _this); 
          });
        }); 
      };      
      
    })(jQuery);
    

    ...

    READ ALL

  • SQLServer CONVERT()用法疑问

    SQLServer CONVERT()函数是格式化时间,在做时间对比时很有用。但CONVERT()函数的第二个参数虽然是日期类型,但不接受字符串拼接的格式

    什么是CONVERT()

    CONVERT()函数是把日期转换为新数据类型的通用函数。此函数可以用不同的格式显示日期/时间数据。

    语法

    CONVERT(data_type(length),data_to_be_converted,style)

    • data_type(length) 规定目标数据类型(带有可选的长度)
    • data_to_be_converted 含有需要转换的值
    • style规定日期/时间的输出格式。

    ...

    READ ALL

  • PHP系统函数eval()使用介绍

    什么是eval

    eval()函数把字符串按照PHP代码来运算。 该字符串必须是合法的PHP代码,且必须以分号结尾。 如果没有在代码字符串中调用return语句,则返回NULL。如果代码中存在解析错误,则eval()函数返回false

    语法

    eval(phpcode)

    例子1

    <?php
    $string = "beautiful";
    $time = "winter";
     
    $str = 'This is a $string $time morning!';
    echo $str. "<br />";
     
    eval("\$str = \"$str\";");
    echo $str;
    ?>
    

    ...

    READ ALL

  • SQLServer读取库里所有表名

    在SQLServer里要获取库中所有表名,并不能像MySQL那样直接show table就搞定

    mysql> use demo
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
     
    Database changed
    mysql> show tables;
    +----------------+
    | Tables_in_demo |
    +----------------+
    | a              |
    | b              |
    | c              |
    +----------------+
    3 rows in set (0.00 sec)
    

    ...

    READ ALL

  • SQLServer巧用datediff获得时间戳

    找了大半天,发现SQLServer貌似没有内建函数读取时间戳。只好自己动手写了一个

    1> SELECT datediff(ss,'1970-01-01',GETDATE()) as time
    2> go
    time
    1361988498
    (1 row affected)
    1>
    

    datediff取差函数

    • ss 表示以秒为单位
    • 1970-01-01 时间戳都从这个日期计算
    • getdate() 当前时间

    既读取当前时间与1970-01-01之间的秒数就是当前时间戳

    datediff函数很强大,比如要算出两个日期之间的月数

    ...

    READ ALL

  • Python对象的深拷贝与浅拷贝

    本文内容是在《Python核心编程2》上看到的,感觉很有用便写出来,给大家参考参考!

    浅拷贝

    首先我们使用两种方式来拷贝对象,一种是切片,另外一种是工厂方法。然后使用id函数来看看它们的标示符

    # encoding=UTF-8
     
    obj = ['name',['age',18]]
    a = obj[:]
    b = list(obj)
    for x in obj,a,b:
      print id(x)
    

    Output:

    35217032
    35227912
    29943304
    

    他们的id都不同,按照正常的判断,三个不同id的对象应该都是独立的。那么我们先给他们改改名看看

    ...

    READ ALL

  • SQL计算排名

    通常我们读取排行榜的时候很容易,直接按照字段倒叙查询出来就好,但如果要取得某条记录的排名,需要动下脑筋,因为MySQL本身不能算出这样的需求,需要变动一下即可算出记录在表中的名次。

    比如有一个表:

    mysql> desc c;
    +-------+---------+------+-----+---------+----------------+
    | Field | Type    | Null | Key | Default | Extra          |
    +-------+---------+------+-----+---------+----------------+
    | id    | int(10) | NO   | PRI | NULL    | auto_increment |
    | fen   | int(10) | NO   |     | NULL    |                |
    +-------+---------+------+-----+---------+----------------+
    2 rows in set (0.01 sec)
     
    mysql> select * from c;
    +----+------+
    | id | fen  |
    +----+------+
    |  1 |  300 |
    |  2 |  200 |
    |  3 |  500 |
    |  4 |  600 |
    |  5 |  800 |
    |  6 | 1000 |
    |  7 |  200 |
    |  8 |  400 |
    |  9 |  700 |
    | 10 |  600 |
    | 11 |  100 |
    +----+------+
    11 rows in set (0.00 sec)
     
    mysql> 
    

    ...

    READ ALL

  • Python如何声明只有一个元素的元祖

    调试程序的时候,就吃过这个亏,不知道为何Python使用括号做元祖声明边界符,估计是找不到合适的符号了。中括号用来声明列表,花括号用来声明字典,元祖号只能用括号来声明了。有编程经历的朋友都清楚括号在其它语言里都是表示优先级,而Python也可以用来表示优先级,所以也就引发了以下白痴的问题

    # encoding=UTF-8
     
    obj = ('tuple')
     
    print obj
    print type(obj)
    print len(obj)
    

    Output:

    tuple
    <type 'str'>
    5
    

    我本来是想声明只有一个元素的元祖,而Python估计以为你只是声明一个字符串所以结果以obj变量就变成元祖了。这个错误非常隐形,不好调试

    ...

    READ ALL

  • Linux防火墙指定端口范围

    通常我们设置防火墙的时候都是以限定单个端口访问为目的,然而有时候这样显的有点麻烦。比如有这样一个需求,我需要700至800之间的端口都能tcp访问,总不能在iptables里添加八百条

    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 700 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 701 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 702 -j ACCEPT
    ...
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 800 -j ACCEPT
    

    ...

    READ ALL

  • PHP如何读取照片的Exif信息

    什么是Exif

    Exif是一种图象文件格式,它的数据存储与JPEG格式是完全相同的。实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及全球定位系统(GPS)、缩略图等。简单地说,Exif=JPEG+拍摄参数。因此,你可以利用任何可以查看JPEG文件的看图软件浏览Exif格式的照片,但并不是所有的图形程序都能处理Exif信息。

    例子

    读取照片的Exif在很多时候都没有必要,但相对于一些探讨摄影技术的站点,那么读取照片的Exif信息就显得尤为重要了,比如摄影论坛蜂鸟。

    ...

    READ ALL