模拟电子签章盖章效果的jQuery插件源码


Posted in Javascript onJune 24, 2013

客户提了个需求,需要在已审核的文档上加盖公章,网上找了找没有现成的,自己动手丰衣足食

老规矩,上图看效果:

模拟电子签章盖章效果的jQuery插件源码

   
     可以内嵌在各种容器中,已包装成jQuery插件,调用方便。点击“盖章”按钮添加一个新章,可以自由拖动位置,点击确定后保存并触发回调函数方便处理保存,有需要的下载试试。

[javascript]

/*
    desc:jQuery模拟盖章
    author:hyf
    date:2012-11-08
*/ 
;$.fn.zSign = function (options) { 
    var _s = $.extend({ 
        img: '', 
        width: 120, 
        height: 120, 
        offset: 8,           //边界值 
        callBack: null 
    }, options || {});     var _parent = $(this).addClass('zsign'); 
    var range = { 
        minX: _s.offset, 
        minY: _s.offset, 
        maxX: _parent.width() - _s.width - _s.offset - 18,      //扣去2个padding=8px以及2个边框1px 
        maxY: _parent.height() - _s.height - _s.offset - 18 
    }; 
    var _btnPanel = $("<div class='panel'><button class='btn add' >盖 章</button><button class='btn cancel'>关 闭</button></div>").appendTo(_parent); 
    var _html = "<div class='sign' style='height:" + _s.height + "px;width:" + _s.width + "px;top:" + _s.offset + "px;left:" + _s.offset + "px'><img src='" + _s.img + "' draggable='false'/><button class='btn ok' >确定</button><button class='btn del' >删除</button></div>"; 
 
    var _add = $('.add', _btnPanel).click(function (e) { 
        _add.attr('disabled', 'disabled'); 
        var sign = $(_html).appendTo(_parent); 
        $('.ok', sign).click(function () { 
            //确定盖章 
            sign.addClass('ok').off('mousedown').find('.btn').remove(); 
            _add.removeAttr('disabled'); 
            if (_s.callBack) { 
                _s.callBack.call(this, { img: _s.img, top: parseInt(sign.css('top')), left: parseInt(sign.css('left')) }); 
            } 
        }); 
        $('.del', sign).click(function () { 
            //取消盖章 
            sign.remove(); 
            _add.removeAttr('disabled'); 
        }); 
        //绑定移动事件 
        sign.on('mousedown', function (e) { 
            sign.data('x', e.clientX); 
            sign.data('y', e.clientY); 
            var position = sign.position(); 
            $(document).on('mousemove', function (e1) { 
                var x = e1.clientX - sign.data('x') + position.left; 
                var y = e1.clientY - sign.data('y') + position.top; 
                x = x < range.minX ? range.minX : x; 
                x = x > range.maxX ? range.maxX : x; 
                y = y < range.minY ? range.minY : y; 
                y = y > range.maxY ? range.maxY : y; 
                sign.css({ left: x, top: y }); 
            }).on('mouseup', function () { 
                $(this).off('mousemove').off('mouseup'); 
            }); 
        }); 
    }); 
    $('.cancel', _btnPanel).click(function () { 
        var r = true; 
        if (_add.attr('disabled') == 'disabled') { 
            if (!confirm("未确定的盖章将被取消,确定要关闭吗?")) { 
                r = false; 
            } 
        } 
        if (r) { 
            //删除未确定位置的盖章 
            $('.sign:not(.ok)', _parent).remove(); 
            _btnPanel.remove(); 
        } 
    }); 
};

[css]
.zsign .panel 
{ 
    position: absolute; 
    top: 8px; 
    right: 8px; 
} 
.zsign .btn 
{ 
    display: inline-block; 
    padding: 4px 10px 4px; 
    margin-bottom: 0; 
    font-size: 13px; 
    line-height: 18px; 
    color: #333; 
    text-align: center; 
    text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); 
    vertical-align: middle; 
    background-color: whiteSmoke; 
    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(white), to(#E6E6E6)); 
    background-repeat: repeat-x; 
    border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); 
    border: 1px solid #CCC; 
    border-bottom-color: #B3B3B3; 
    -webkit-border-radius: 4px; 
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 
    cursor: pointer; 
    -webkit-user-select: none; 
} 
.zsign .btn:hover 
{ 
    color: #333; 
    text-decoration: none; 
    background-color: #E6E6E6; 
    background-position: 0 -15px; 
    -webkit-transition: background-position 0.1s linear; 
} 
.zsign .btn[disabled] 
{ 
    cursor: default; 
    background-image: none; 
    background-color: #E6E6E6; 
    opacity: 0.65; 
    filter: alpha(opacity=65); 
    -webkit-box-shadow: none; 
    -moz-box-shadow: none; 
    box-shadow: none; 
} 
.zsign .cursor 
{ 
    cursor: none; 
} 
.zsign .show 
{ 
    display: block; 
} 
.zsign .hide 
{ 
    display: none; 
} .zsign .sign 
{ 
    position: absolute; 
    cursor: move; 
    border: 1px dashed #ccc; 
    padding: 8px; 
    display: -webkit-box; 
    -webkit-box-pack: center; 
    -webkit-box-align: center; 
} 
.zsign .sign.ok 
{ 
    cursor: default; 
    border-color:transparent; 
} 
.zsign .sign img 
{ 
    max-height: 100%; 
    max-width: 100%; 
} 
.zsign .sign .btn 
{ 
    padding: 2px 6px; 
    font-size: 11px; 
    line-height: 14px; 
    position: absolute; 
} 
.zsign .sign .btn.del 
{ 
    bottom: 4px; 
    right: 4px; 
} 
.zsign .sign .btn.ok 
{ 
    bottom: 4px; 
    right: 50px; 
 }
 

[html]

<!DOCTYPE html> 
<html> 
<head> 
    <title>测试</title> 
    <link href="jquery.zsign.css" rel="stylesheet" type="text/css" /> 
    <script src="jquery-1.7.1.min.js" type="text/javascript"></script> 
    <script src="jquery.zsign.js" type="text/javascript"></script> 
</head> 
<body> 
    <div id="test" style="width:800px;height:500px;border:1px solid red;margin:40px auto; position:relative;"></div>     <script> 
        var a =$("#test").zSign({ img: '1.gif'}); 
    </script> 
</body> 
</html>
Javascript 相关文章推荐
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
Oct 23 Javascript
js 通用javascript函数库整理
Aug 14 Javascript
JavaScript html5 canvas绘制时钟效果(二)
Mar 27 Javascript
最佳的JavaScript错误处理实践
Jul 16 Javascript
基于Vue.js实现数字拼图游戏
Aug 02 Javascript
概述如何实现一个简单的浏览器端js模块加载器
Dec 07 Javascript
如何理解jQuery中的ajaxSubmit方法
Mar 13 Javascript
vue-cli webpack 开发环境跨域详解
May 18 Javascript
基于rollup的组件库打包体积优化小结
Jun 18 Javascript
js中的数组对象排序分析
Dec 11 Javascript
细说webpack6 Babel的使用详解
Sep 26 Javascript
vue3.0 自适应不同分辨率电脑的操作
Feb 06 Vue.js
Js注册协议倒计时的小例子
Jun 24 #Javascript
通过JavaScript使Div居中并随网页大小改变而改变
Jun 24 #Javascript
jquery入门必备的基本认识及实例(整理)
Jun 24 #Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
Jun 24 #Javascript
解析js如何获取当前url中的参数值并复制给input
Jun 23 #Javascript
Ajax异步提交表单数据的说明及方法实例
Jun 22 #Javascript
JS localStorage实现本地缓存的方法
Jun 22 #Javascript
You might like
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
PHP模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
JavaScript 基础篇(一)
2012/03/30 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
3kb jQuery代码搞定各种树形选择的实现方法
2016/06/10 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
Vue中的Props(不可变状态)
2018/09/29 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
python复制与引用用法分析
2015/04/08 Python
Python中Class类用法实例分析
2015/11/12 Python
Python多层装饰器用法实例分析
2018/02/09 Python
浅谈pycharm出现卡顿的解决方法
2018/12/03 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
python通过TimedRotatingFileHandler按时间切割日志
2019/07/17 Python
flask框架路由常用定义方式总结
2019/07/23 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
领导证婚人证婚词
2014/01/13 职场文书
安踏广告词改编版
2014/03/21 职场文书
解除劳动合同证明书
2014/09/26 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
创业计划书之水果店
2019/07/18 职场文书