jquery组件(jquery.picsign中如何使用图片标注组件)

本文目录
jquery.picsign中如何使用图片标注组件
这篇文章主要介绍了jquery.picsign 自己封装的第一个开源组件,需要的朋友可以参考下
经过几天的尝试和学习,封装了自己的第一个js组件,有很多不足之处还请赐教。
因为一些业务需求,需要给图片添加一些标注,从网上找了一些但都不能满足需求,并且存在一些bug,坑太多
因此就有想法自己封装一个,学习了其他类似组件的实现思路,以及js组件的开发思路,开发了jquery.picsign组件
jQuery图片标注组件(jquery.picsign)
***隐藏网址***
***隐藏网址***
1. 组件依赖
jquery
***隐藏网址***
***隐藏网址***
***隐藏网址***
***隐藏网址***
***隐藏网址***
***隐藏网址***
***隐藏网址***
《link href="css/jquery.picsign.css" rel="external nofollow" rel="stylesheet" /》
《script src="js/jquery.picsign.js"》《/script》3. 使用
在页面中加入一个p
《p id="picsign"》《/p》初始化组件
$("#picsign").picsign(option);
//option为组件参数,详细说明见option参数说明option参数说明
var option={
picurl: null,//图片地址
signdata: ,//初始数据,详细说明参见基本数据格式
editable: {//是否可(默认可 设置为false则禁用所有)
add: true,//是否可添加
update: true,//是否可修改
del: true,//是否可删除
move: true//是否可移动
},
signclass: ’signdot’,//标注点样式
popwidth: 400,//标注内容显示窗口宽
popheight: 247,//标注内容显示窗口高
inputwidth: 400,//标注内容窗口宽
inputheight: 247,//标注内容窗口高
beforeadd: function (data) {//在添加保存前执行的方法,返回false阻断添加
},
onadd: function (data) {//添加完成执行的方法
},
beforeupdate: function (data) {//在修改保存前执行的方法,返回false阻断修改
},
onupdate: function (data) {//修改完成执行的方法
},
beforedel: function (data) {//在删除保存前执行的方法,返回false阻断删除
},
ondel: function (data) {//删除完成执行的方法
}
};基本数据格式
[{
left:’50%’,
top:’50%’,
msg:’这是标注信息’,
signid:’这是标注唯一标识符,用户无需赋值,与组件逻辑相关,请不要使用此关键字’
}]用户添加的数据中必须包含left、top、msg属性
用户可自行扩展其他属性
特殊说明:请不要添加和使用signid关键字
方法调用
$("#picsign").picsign(’functionName’,parameter);
//functionName为方法名称,parameter为方法参数,详细说明参见方法说明方法说明
获取标注数据
方法名称:getData
参数:无
$("#picsign").picsign(’getData’);添加标注数据
方法名称:addSign
参数:基本数据Json,是否触发事件(默认为true)
$("#p_picsign").picsign("addSign",
[{ left: ’50%’, top: ’10%’, msg: "123"},
{ left: ’80%’, top: ’10%’, msg: "456"}],
true
)切换标注显示状态
方法名称:toggle
参数:无
$("#p_picsign").picsign("toggle")组件销毁
方法名称:destroy
参数:无
$("#p_picsign").picsign("destroy")上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
在JS中命令模式概念与用法(详细教程)
使用selenium抓取淘宝数据信息
使用百度地图如何实现地图网格
jQueryUI如何自定义组件实现代码_jquery
如何开始使用
首先用$.widget()方法开始定义你的组件,它只接收三个参数:第一个是组件名称,第二个是可选的基类组件(默认的基类是$.Widget),第三个是组件的原型。
组件名称必须包含命名空间,要注意的是,官方组件的命名空间是以‘ui’开头的,比如:‘ui.tabs’。我在下面的用‘我’的拼音(‘wo’)。
代码如下:
$.widget("yourNamespace.yourWidgetName",,yourWidgetPrototype)
$.Widget基类含有一个重要的属性‘options’,它用来定义公有参数,组件初始化时外部调用的参数会覆盖内部定义的参数;以及三个重要的私有的方法‘_create’、‘_init’、‘’,前两个相当于构造函数的作用,按顺序执行,_create()方法执行之后会触发’create’事件。 _trigger()方法会将参数中的指定函数标准化为W3C事件,并且触发这个自定义事件。
另外还有三个公有方法‘enable’,‘disable’,‘destroy’,分别表示启用、禁用和销毁组件。
这里很有意思的,是私有方法和公有方法的实现。jQuerUI Widget暴露的方法都是不以‘_’开头的:
代码如下:
// prevent calls to internal methods
if ( isMethodCall && options.charAt( 0 ) === "_" ) {
return returnValue;
}
实际上,jQueryUI Widget还是保留了原始的API,比如这样使用:
代码如下:
var $div = $(’.demo:first’);
var api = $div.data(’divZoom’);
// console.dir(api);
api.zoomIn();
// 对比
$div.divZoom(’zoomIn’);
一个实现完全私有变量的小技巧:
代码如下:
(function($) {
var privateVar = ’’;
$.widget("wo.divZoom",{});
})(jQuery)
所有代码
代码如下:
/*
* @by ambar
* @create 2010-10-20
* @update 2010-10-25
*/
(function($) {
var html = ’\
zoom in\
zoom out\
’;
$.widget("wo.divZoom",{
_init : function() {
var self = this, opt = self.options, tgt = opt.target, $el = self.element ;
// 初始一次
if($(’div.icon-zoom’,$el).length) return;
$el.append(html);
self.target = ( tgt == ’’ ? $el : $el.find(tgt) );
// 检测初始值
var level = self.target.attr(opt.dataPrefix);
self.target.attr(opt.dataPrefix,level || opt.level);
self.btnZoomIn = $el.find(’span.zoom-in’).click( $.proxy(self.zoomIn,self) );
self.btnZoomOut = $el.find(’span.zoom-out’).click( $.proxy(self.zoomOut,self) );
},
destroy : function(){
this.element.find(’div.icon-zoom’).remove();
},
options : {
level : ,
target : ’’,
speed : ’normal’,
dataPrefix : ’data-zoom-level’,
zooming : null,
select : null,
show : null
},
currentLevel : function(){
var self = this, opt = self.options, lvl = Number(self.target.attr(opt.dataPrefix));
return $.inArray(lvl,opt.level);
},
zoomIn : function() {
this.zoom(this.currentLevel() + 1);
},
zoomOut : function() {
this.zoom(this.currentLevel() - 1);
},
zoom : function(i){
var self = this, opt = self.options,lvls = opt.level,$tgt = self.target;
if( i=lvls.length ) return;
var value = lvls,
originalValue = lvls,
style = { width:value, height:value };
var data = { target : $tgt, css : style, originalCss : {width:originalValue,height:originalValue} };
var goon = self._trigger(’start’,null,data);
if(!goon) return;
$tgt.animate(style,
{
duration : opt.speed,
step : function(val) {
var css = { width:val, height:val };
self._trigger(’zooming’,null,$.extend({},data,{css:css}));
},
complete : function(){
$tgt.attr(opt.dataPrefix,value);
self._trigger(’stop’,null,data);
}
});
}
});
})(jQuery)
在页面上调用
代码如下:
$(function() {
$(’div.demo’).divZoom({
target : ’》a’,
level : ,
zooming : function(e,ui){
// console.log(e,ui.css);
},
start : function(e,ui){
console.log(’开始’,this,e.type,ui);
},
stop : function(e,ui) {
console.log(’结束’,ui.css);
}
});
});
示例代码:
代码如下:
jQueryUI
#receptacle{width:800px;height:500px;background:#cde;position:relative;}
#receptacle .demo{width:80px;height:80px;position:absolute;}
.demo .cont{width:80px;height:80px;display:block;background:#07a;}
.demo-a{top:30px;left:122px;}
.demo-b{top:100px;left:400px;}
.icon-zoom {
position:absolute; width:63px; height:20px; overflow:hidden;
***隐藏网址***
}
.icon-zoom span { width:20px; display:block; text-indent:-999em; float:left; }
$(function() {
$(’div.demo’).divZoom({
target : ’》a’,
level : ,
zooming : function(e,ui){
// console.log(e,ui.css);
},
start : function(e,ui){
console.log(’开始’,this,e.type,ui);
},
stop : function(e,ui) {
console.log(’结束’,ui.css);
}
});
});
原文
a
b
如何理解Jquery插件
在实际开发工作中,总会碰到像滚动,分页,日历等展示效果的业务需求,对于接触过jQuery以及熟悉jQuery使用的人来说,首先想到的肯定是寻找现有的jQuery插件来满足相应的展示需求。目前页面中常用的一些组件,都有多种jQuery插件可供选择,网络上也有很多专门收集jQuery插件的网站。利用jQuery插件确实可以给我们的开发工作带来便捷,但是如果只是会简单使用,而对其中的原理不甚了解,那么在使用过程中碰到问题或者对插件进行定制开发时就会有诸多疑惑。本文的目的就是可以快速了解jQuery插件的开发原理以及掌握jQuery开发的基本技能。
进行jQuery插件开发前,首先要知道两个问题:什么是jQuery插件?jQuery插件如何使用?
第一个问题,jQuery插件就是用来扩展jQuery原型对象的一个方法,简单来说就是jQuery插件是jQuery对象的一个方法。其实回答了第一个问题,也就知道第二个问题的答案了,jQuery插件的使用方式就是jQuery对象方法的调用。
我们先看个例子:$("a").css("color","red")。我们知道每个jQuery对象都会包含jQuery中定义的DOM操作方法,这里使用$方法来选择a元素,返回一个a元素的jQuery对象,这个对象就可以使用jQuery中定义的DOM操作方法。那么jQuery对象是如何获取这些方法的呢?其实jQuery内部定义了一个jQuery.fn对象,查看jQuery源码可以发现jQuery.fn=jQuery.prototype,也就是说jQuery.fn对象是jQuery的原型对象,jQuery的DOM操作方法都在jQuery.fn对象上定义的,然后jQuery对象就可以通过原型继承这些方法。
1.基础版jQuery插件知道了上面这些知识,我们就可以来写一个简单的jQuery插件。假如我现在需要一个jQuery插件用来改变标签内容颜色,就可以按下面的方式来实现这个插件:
$.fn.changeStyle = function(colorStr){
this.css("color",colorStr);
}然后按下面的方式来使用插件:
$("p").changeStyle("red");插件调用的时候,插件内部的this就是当前调用插件的jQuery对象,这样的话每个使用$()方法选择的标签,在调用changeStyle()插件时都会使用css()方法重设color样式。
2.满足链式调用的jQuery插件链式调用时jQuery的一大特色,一个通用的插件应该遵循jQuery风格,满足链式调用要求。实现链式调用的方式也很简单:
$.fn.changeStyle = function(colorStr){
this.css("color",colorStr);
return this;
}然后使用的时候就可以链式调用其他方法了:
$("p").changeStyle("red").addClass("red-color");实现链式调用的关键点就一行代码return this,插件中加了这行代码,那么在插件执行完之后,就会把当前的jQuery对象返回,然后就可以在插件方法后面继续调用其它jQuery方法。
3.防止$符号污染的jQuery插件有很多js库都会使用$符号,虽然jQuery可以使用jQuery.noConflict()方法交出$符号的使用权,但是如果定义插件的时候,使用$.fn对象来定义的,那么这些插件使用的时候就会受到其它使用$变量的js库的影响。对于这种情况,我们可以使用立即执行函数通过传参的方式封装插件。形式如下:
(function($){
$.fn.changeStyle = function(colorStr){
this.css("color",colorStr);
return this;
}
}(jQuery));因为使用了立即执行函数,所以此时的$只属于这个立即执行函数的函数作用域,这样就可以避免$符号的污染。
4.可以接受参数的jQuery插件继续上面的例子,假如我还想为这个插件添加一个设置标签元素内容文字大小的功能,那么我可以这么来实现:
(function($){
$.fn.changeStyle = function(colorStr,fontSize){
this.css("color",colorStr).css("fontSize",fontSize+"px");
return this;
}
}(jQuery));上面这种插件传参方式适用于参数比较少的情况,如果需要传给插件内部的参数比较多,我们可以定义一个参数对象,然后把需要传给插件的参数放在参数对象中。插件定义时如下:
(function($){
$.fn.changeStyle = function(option){
this.css("color",option.colorStr).css("fontSize",option.fontSize+"px");
return this;
}
}(jQuery));使用方式:
$("p").changeStyle({colorStr:"red",fontSize:14});
把参数放到一个对象中传给插件还有一个好处就是我们可以在插件内部为一些参数定义一些缺省值,例如:
(function($){
$.fn.changeStyle = function(option){
var defaultSetting = { colorStr:"green",fontSize:12};
var setting = $.extend(defaultSetting,option);
this.css("color",setting.colorStr).css("fontSize",setting.fontSize+"px");
return this;
}
}(jQuery));上面的代码用到了$.extend方法,这个方法在这里的用法就是合并两个对象,即把后面一个对象的存在的属性值赋值给第一个对象,具体用法可以参考这里。$.extend方法还有一种作用是用来扩展jQuery对象本身。
这样定义的插件,我们在使用时如果不传fontSize,那么使用这个插件的jQuery对象标签的内容会被设置成默认的12px。
使用方式:
$("p").changeStyle({colorStr:"red"});
注意:在为插件定义默认参数时,一定要把默认参数写在插件方法内部,这样默认参数的作用域就在插件内部。
总结定义插件的方式除了上面说的用$.fn来定义,还有另外一种方式来定义插件,那就是使用$.fn.extend方法。类似下面的写法:
//注意为了更好的兼容性,开始前有个分号;(function($){
$.fn.extend({
changeStyle:function(option){
var defaultSetting = { colorStr:"green",fontSize:12};
var setting = $.extend(defaultSetting,option);
this.css("color",setting.colorStr).css("fontSize",setting.fontSize+"px");
return this;
}
});
}(jQuery));//这里将Jquery作为实参传递给匿名函数PS: $.extend方法和$.fn.extend方法都可以用来扩展jQuery功能,通过阅读jQuery源码我们可以发现这两个方法的本质区别,那就是$.extend方法是在jQuery全局对象上扩展方法,$.fn.extend方法是在$选择符选择的jQuery对象上扩展方法。所以扩展jQuery的公共方法一般用$.extend方法,定义插件一般用$.fn.extend方法。
Angular与JQuery之间的区别是什么
Angular与JQuery之间的区别有:Angular是框架,用于创建SPA且具有双向数据绑定功能,适用大规模项迹亏目;而jQuery是一个js库,与模型无关不具备数据绑定但容易入手。
现如今,随着前端技术的不断更新,越来越多的新技术开始出现。它们的出现给我们的开发人员带来了极大的好处。它们可以帮助我们用更少的代码实现更强大的功能。今天就将介绍前端技术中的Angular与JQuery之间的区别。具有一定参考价值,希望对大家有所帮助
【推荐课程:Angular教程、JQuery教程】
Angular与JQuery的区别
(1)Jquery是一个用于DOM操作的库,而Angular是一个框架
(2)Jquery与模型无关; Angular用于创建SPA(单页面应用程序)
注:SPA称为单页应用程序,是单页HTML和JavaScript的应用程序从HTTP服务器下载页面,看起来它有多个页面,从一个页面转换到另一个页面但通常它是模板的替换进入DOM,使一个页面是一个模板而另一个页面是其他页面
(3)Jquery没有双向绑定功能,而Angular具有路由,指令,双向数据绑定,模型,依赖注入,单元测试等关键功能
(4)当项目告罩规模庞大时,jQuery会变得复杂而且难以维护。而且在很多时候需要编写很多的代码才能实现一个功能。而Angular在大项目的情况下是可管理的,实现相同的功能代码会比jQuery少很多
(5)虽然Angular比jQuery有很多优点,但是就学习方面来说,jQuery更加容易入手和理解。
(6)jQuery提供了一致的DOM API,它在所有支持的浏览器中都是一致的 ,而Angular提供了一流的支持,可以使用JavaScript,CSS和HTML创建Web应用程序
(7)jQuery组件是jquery UI,它是一组策划用户界面交互,效果,小部件以及构建在JavaScript库之上的主题,Angular组件是应用程序中UI的构建块; 它是组件的层次袜州闹结构。这些组件具有模板,并且模板中每个元素只能实例化一个组件
总结:

更多文章:
jfreechart 极坐标设置线条颜色(各位,怎样修改 matlab 中极坐标生成的图像线条的宽度求程序指导! 谢谢了!!!)
2025年8月9日 12:00
appear后面可以加名词吗(高考英语备考之 appear的用法)
2025年9月17日 03:30
django框架安装过程(京东云擎怎么搭建django 框架)
2025年7月24日 02:00
index加match函数出错(excel中INDEX和MATCH函数出现的问题)
2026年1月3日 23:00
routes插件(模拟火车2019机车插件和线路插件安装在哪里怎么激活求大神解答!!)
2025年7月11日 16:45
手机java运行库下载(三星C3300K手机下载JAVA游戏详细方法)
2026年1月12日 09:00
雅马哈音响portable(为什么存储卡里的歌在可插卡蓝牙音响上有些能放,有些不能放)
2026年8月5日 16:15
易语言源码忘记保存奔溃怎么找回(易语言源码丢失,用什么恢复软件恢复后可以用)
2025年12月9日 05:45














