好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

工作中碰到的一些东西【弹出窗口】【拖放】【异步文件上传】

工作中碰到的一些东西【弹出窗口】【拖放】【异步文件上传】

久不出技术类文章,我都忘了自己是一程序员啦......今天写一点工作中遇到的东西,大家共同学习,反正也比较浅显了。

弹出窗口

  我们在工作中,经常会碰到弹出窗口类应用,有时候还需要一点遮盖层:

 

这类圆角弹出框其实用得还是很广泛的,用CSS3可以很容易的出现,但是考虑到浏览器兼容问题,这类还是需要用图片实现了

主要代码如下:

?

//弹出层剧中

        function   popup(popupName) {

            var   _scrollHeight = $(document).scrollTop(); //获取当前窗口距离页面顶部高度

            _windowHeight = $(window).height(); //获取当前窗口高度

            _windowWidth = $(window).width(); //获取当前窗口宽度

            _popupHeight = popupName.height(); //获取弹出层高度

            _popupWeight = popupName.width(); //获取弹出层宽度

            //            _posiTop = (_windowHeight - _popupHeight) / 2 + _scrollHeight - 50;

            _posiTop = _scrollHeight + 120;

            _posiLeft = (_windowWidth - _popupWeight) / 2;

            popupName.css({ "left" : _posiLeft + "px" , "top" : _posiTop + "px" , "display" : "block"   }); //设置position

        }

 

        function   dragFunc(dragDiv, dragBody) {

            if   (dragDiv[0] && dragBody[0]) {

                var   dragAble = false ;

                var   x1 = 0;

                var   y1 = 0;

                var   l = 0;

                var   t = 0;

                var   divOffset = dragBody.offset();

                dragDiv.mousedown( function   (e) {

                    var   ss = this ;

                    //                    var rootId =

 

                    dragDiv.css( "cursor" , "move" );

                    dragAble = true ;

                    // 当前鼠标距离div边框的距离

                    // 当前鼠标坐标,减去div相对左边的像素

                    l = parseInt(dragBody.css( "left" ));

                    t = parseInt(dragBody.css( "top" ));

                    x1 = e.clientX - l;

                    y1 = e.clientY - t;

                    x1 = x1 > 0 ? x1 : 0;

                    y1 = y1 > 0 ? y1 : 0;

                    this .setCapture && this .setCapture();

                });

                dragDiv.mousemove( function   (e) {

                    if   (!dragAble)

                        return ;

                    // 当前div左边的坐标

                    // 当前鼠标坐标,减去鼠标拖动量

                    var   x2 = 0;

                    var   y2 = 0;

                    //需要考虑滚动条问题!!!

                    var   top = $(document).scrollTop() ? $(document).scrollTop() - 15 : 0;

                    var   left = $(document).scrollLeft() ? $(document).scrollLeft() - 15 : 0;

                    x2 = e.clientX - x1 + left;

                    y2 = e.clientY - y1 + top;

                    x2 = x2 > 0 ? x2 : 0;

                    y2 = y2 > 0 ? y2 : 0;

                    //要移动一定数量才移动

                    if   (Math.abs(l - x2) > 10 || Math.abs(t - y2) > 10) {

                        dragBody.css( "left" , x2 + "px" );

                        dragBody.css( "top" , y2 + "px" );

                    }

                });

                dragDiv.mouseup( function   (event) {

                    if   (!dragAble)

                        return ;

                    dragAble = false ;

                    // dragDiv.css("position", "relative");

                    this .releaseCapture && this .releaseCapture();

                });

            }

        }

 

        var   MyDialog = function   (cfg) {

            this .config = {

                id: ( new   Date()).getTime().toString(),

                el: null ,

                bodyId: null ,

                cover: true ,

                boxHtm: '<div class="dialog"  >  '   +

        '<table>   '   +

        '    <tr class="top">  '   +

        '       <td class="tl"> '   +

        '        </td> '   +

        '        <td class="c"> '   +

        '        </td> '   +

        '        <td class="tr"> '   +

        '        </td> '   +

        '    </tr> '   +

        '    <tr> '   +

        '        <td class="c"> '   +

        '          <div style="10px;"></div>'   +

        '        </td> '   +

        '        <td class="main"> '   +

        '            <div class="title"> '   +

        '                <h3> '   +

        '                    <span class="title_text">请输入标题</span> <a class="cls" href="javascript:;"></a> '   +

        '                </h3> '   +

        '            </div> '   +

        '            <div class="content"> '   +

        '             请输入内容   '   +

        '            </div> '   +

        '        </td> '   +

        '        <td class="c"> '   +

        '        </td> '   +

        '    </tr> '   +

        '    <tr class="bottom"> '   +

        '        <td class="bl"> '   +

        '        </td> '   +

        '        <td class="c"> '   +

        '          <div style="10px;"></div>'   +

        '        </td> '   +

        '        <td class="br"> '   +

        '        </td> '   +

        '    </tr> '   +

        '</table> '   +

    '</div>'

            };

            var   scope = this ;

            if   (cfg) {

                $.each(cfg, function   (key, value) {

                    scope.config[key] = value;

                });

            }

            this .box = null ;

            this .cover = null ;

            this .tmpBody = null ;

        }

 

 

        MyDialog.prototype.show = function   () {

            var   scope = this ;

            var   cover = null ;

            var   box = null ;

            if   ( this .config.cover) {

                if   ( this .config.id && $( '#'   + this .config.id + '_cover' )[0]) {

                    cover = $( '#'   + this .config.id + '_cover' );

                    cover.show();

                } else   {

                    cover = $( '<div style=" display:block; " id="'   + this .config.id + '_cover" class="coverDiv" ></div>' );

                    $( 'body' ).append(cover);

                }

                scope.cover = cover;

            }

            if   (!$( '#'   + this .config.id)[0]) {

                box = $( this .config.boxHtm);

                $( 'body' ).append(box);

                box.attr( 'id' , this .config.id);

                if   ( this .config.title) {

                    box.find( '.title_text' ).html( this .config.title);

                }

                if   ( this .config.bodyId) {

                    var   body = $( '#'   + this .config.bodyId);

                    var   tmp = $( '<div></div>' ).append(body);

                    var   initBody = tmp.html();

                    scope.tmpBody = $(initBody);

                    tmp = null ;

                    if   (body[0]) {

                        var   con = box.find( '.main .content' );

                        body.show();

                        con.html( '' );

                        con.append(body);

                    }

                }

                if   ( this .config.el && this .config.el[0]) {

                    var   con = box.find( '.main .content' );

                    con.html( this .config.el);

                }

                //居中

                popup(box);

                //关闭dialog

                box.find( '.title .cls' ).click( function   (e) {

                    scope.close();

                    e.preventDefault();

                    return   false ;

                });

 

                dragFunc($( '#'   + this .config.id + ' .main .title' ), $( '#'   + this .config.id));

                box.show();

                this .box = box;

            }

        }

 

        MyDialog.prototype.close = function   () {

            //这里有问题

            var   box = this .box;

            var   tmpBody = this .tmpBody;

            var   cover = this .cover;

            if   (tmpBody && tmpBody[0]) {

                $( 'body' ).append(tmpBody);

            }

            if   (box && box[0]) {

                box.remove();

            }

            if   (cover && cover[0]) {

                cover.hide();

            }

        };

调用方法:

?

var   dia = new   MyDialog({

                 title : title,

                 bodyId : id,

                 id : id + '_box'

             });

             dia.show();

 具体可能还需要一定函数回调,各位可以自己封装一番。

拖放

工作中也经常会出现拖放效果的一些需求:

代码如下:

?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">

< html   xmlns = " http://www.w3.org/1999/xhtml " >

< head >

     < title ></ title >

     < script   src = " http://www.cnblogs.com/scripts/jquery-1.7.1.js "   type = "text/javascript" ></ script >

     < script   type = "text/javascript" >

 

         function dragFunc(dragDiv, dragBody, dropBody) {

             if (!dropBody[0]) {

                 dropBody = $(document);

             }

             if (dragDiv[0] && dragBody[0]) {

                 var dragAble = false;

                 var x1 = 0;

                 var y1 = 0;

                 var l = 10;

                 var t = 10;

 

                 var init_position = '';

                 var init_cursor = '';

                 var tmp_body = null;

 

                 dragDiv.mousedown(function (e) {

                     var ss = this;

 

                     init_position = dragBody.css("position");

                     init_cursor = dragBody.css("init_cursor");

                     dragBody.css("position", "absolute");

                     dragDiv.css("cursor", "move");

 

                     tmp_body = $('< div   class = "tmp_div" ></ div >');

                     tmp_body.css('width', dragBody.css('width'));

                     tmp_body.css('height', dragBody.css('height'));

                     tmp_body.insertAfter(dragBody);

                     $(document).bind("selectstart", function () { return false; }); 

 

 

                     dragAble = true;

                     // 当前鼠标距离div边框的距离

                     // 当前鼠标坐标,减去div相对左边的像素

                     l = parseInt(dragBody.css("left")) ? parseInt(dragBody.css("left")) : 10;

                     t = parseInt(dragBody.css("top")) ? parseInt(dragBody.css("top")) : 10;

 

                     var offset = dragBody.offset();

 

                     l = parseInt(offset.left);

                     t = parseInt(offset.top);

 

                     x1 = e.clientX - l;

                     y1 = e.clientY - t;

                     x1 = x1 > 0 ? x1 : 0;

                     y1 = y1 > 0 ? y1 : 0;

                     this.setCapture && this.setCapture();

                 });

                 dragDiv.mousemove(function (e) {

                     if (!dragAble)

                         return;

                     // 当前div左边的坐标

                     // 当前鼠标坐标,减去鼠标拖动量

                     var x2 = 0;

                     var y2 = 0;

                     //需要考虑滚动条问题!!!

                     var top = $(document).scrollTop() ? $(document).scrollTop() - 15 : 0;

                     var left = $(document).scrollLeft() ? $(document).scrollLeft() - 15 : 0;

                     x2 = e.clientX - x1 + left;

                     y2 = e.clientY - y1 + top;

                     x2 = x2 > 0 ? x2 : 0;

                     y2 = y2 > 0 ? y2 : 0;

                     //要移动一定数量才移动

                     if (Math.abs(l - x2) > 10 || Math.abs(t - y2) > 10) {

                         dragBody.css("left", x2 + "px");

                         dragBody.css("top", y2 + "px");

                     }

 

                     //红 #993300

                     //灰 #DBEAF9

                     //移动结束后判断拖放

                     var w = parseInt(dragBody.css('width'));

                     var h = parseInt(dragBody.css('height'));

                     $.each(dropBody, function () {

                         var el = $(this);

                         el.css('background-color', 'Gray');

                         var offset = el.offset();

 

                         var _l = offset.left || 0;

                         var _t = offset.top || 0;

                         var _w = parseInt(el.css('width'));

                         var _h = parseInt(el.css('height'));

 

                         if (x2 > _l && x2 + w < _l   + _w && y2 > _t && y2 + h < _t   + _h) {

                             el.css('background-color', '#DBEAF9');

                              

                             el.append(tmp_body);

 

                         }

 

                         var s   = '' ;

 

                     });

 

                 });

                 dragDiv.mouseup(function (event) {

                     if (!dragAble)

                         return;

 

                     $(document).unbind("selectstart"); 

 

                     //还原position 与 cursor

                     dragBody.css("position", init_position);

                     dragBody.css("cursor", init_cursor);

 

                     //dragBody.css("left", '0');

                     //dragBody.css("top", '0');

                     if (tmp_body) {

                         dragBody.insertAfter(tmp_body);

                         var offset   = tmp_body .offset();

                         l   = parseInt (offset.left);

                         t   = parseInt (offset.top);

                         dragBody.css("left", l);

                         dragBody.css("top", t);

                         tmp_body.remove();

 

                     }

                     dragAble   = false ;

                     // dragDiv.css("position", "relative");

                     this.releaseCapture && this.releaseCapture();

                 });

             }

         }

 

 

 

         $(document).ready(function () {

             var d1 = $('#d1');

             var c = $('.c');

 

             dragFunc(d1, d1, c);

 

 

         });

      

      

     </script>

     < style   type = "text/css" >

         div

         {

             100px;

             height: 100px;

             border: 1px solid black;

            

         }

         .tmp_div

         {

             border-style: dashed;

              

         }

          

         #c1

         {

             background-color:  Gray;

             300px;

             height:300px;

             float:left;

             margin:20px;

         }

          

          #c2

         {

             background-color:  Gray;

             300px;

             height:300px;

             float:left;

             margin:20px;

         }

          

          

         

          

     </ style >

</ head >

< body >

     < div   id = "c1"   class = "c" >1

         < div   id = "d1" >me

         </ div >

     </ div >

     < div   id = "c2"   class = "c" >2

     </ div >

 

    

 

 

</ body >

</ html >

异步文件上传

我们所谓的AJAX异步文件上传事实上用js技术好像暂时还不能实现,就我所谓的异步上传事实上还是表单提交,而将form的target指向一

隐藏的iframe,然后成功后回调即可,真是十分坑爹的做法。。。。。

若是要更好的体验,便需要借助flash或者XX框架了,但是我也没有研究过.

?

< form   id = "formImg"   name = "formImg"   enctype = "multipart/form-data"   method = "post"   action = "" >

< input   type = "hidden"   name = "MAX_FILE_SIZE"   value = "800000"   id = "max_size" />

< input   type = "hidden"   name = "callback"   value = "parent.add_img_input"   id = "callback" />

< a   class = "upbtn" >< input   type = "file"   name = "userfile"   id = "userfile"   title = "支持JPG、GIF、PNG格式,文件小于1M"

name = "pic"   value = ""   onchange = "javascript:up_img(17);" >上传</ a >

</ form >

document.charset='utf-8';

                 var form = $('#formImg');

                 var frame = $('#frame_img');

                 if (!frame[0]) {

                     frame = $('< iframe   id = "frame_img"   name = "frame_img"   style = "display:none;"   ></ iframe >');

                 }

                 form.append(frame);

                 form.attr('target', 'frame_img');

                 form.attr('action', url);

                 form.submit();

                  

                 document.charset='gbk';

 但是回调会涉及一点跨域的问题,需要在同一大域名下才行。

现况

爱生活,爱工作,今年继续努力吧!

 

 

分类:  Web前端

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于工作中碰到的一些东西【弹出窗口】【拖放】【异步文件上传】的详细内容...

  阅读:36次