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

来源:互联网 发布:js实现视频播放 编辑:程序博客网 时间:2024/05/24 01:45

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

弹出窗口


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

 

这类圆角弹出框其实用得还是很广泛的,用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="width: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="width: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        {            width: 100px;            height: 100px;            border: 1px solid black;                  }        .tmp_div         {            border-style: dashed;                    }                #c1        {            background-color:  Gray;            width: 300px;            height:300px;            float:left;            margin:20px;        }                 #c2        {            background-color:  Gray;            width: 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';

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

 

现况


 

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

 

 

 

 

 

 

 

 

 

原创粉丝点击