jquery简单封装
对Raphael画图标的一个jquery简单封装
公司要做一个项目的demo,要求地图上可以插红旗,所以就用到了Raphael。
因为是个demo,所以地图就用了一张图片,效果如下:

所以为了更好的封装一下这个功能,就写了一个简单的插件:jquery-pointpainter.js

/**
* @author Lee<br>
* @since 2013-8-19 <br>
*/
(function($, Raphael) {
$.fn.pointpainter = function(options, params) {
if ( typeof options == 'string') {
if (options == 'setPoint' && params) {
setPoint.call(this, params);
}
return this;
} var opts = $.extend(true, {}, $.fn.pointpainter.defaults, options);
return this.each(function() {
$(this).data('pointpainter.opts', opts);
_init.call($(this));
});
}
//初始化画布
function _init() {
var opts = this.data('pointpainter.opts');
this.dblclick(function(evt) {
var offset = $(this).offset();
var point = {
x : evt.pageX - offset.left,
y : evt.pageY - offset.top
};
opts.onMapDblClick.call(this, evt, point);
}); var paper = Raphael(this[0], opts.width || this.width(), opts.height || this.height());
this.data('pointpainter.paper', paper);
drawing.call(this);
} //开始画图
function drawing() {
var opts = this.data('pointpainter.opts');
var paper = this.data('pointpainter.paper');
paper.clear();
for (var i = 0; i < opts.points.length; i++) {
var point = opts.points[i];
paper.path(opts.icon).attr({
fill : point.fill,
stroke : opts.stroke,
cursor : opts.cursor
}).transform('t' + (point.x + opts.position.left) + ',' + (point.y + opts.position.top)).click(function() {
opts.onIconClick.call(this, this.data());
}).hover(function(evt) {
opts.onIconMouseOver.call(this, evt, this.data());
}, function(evt) {
opts.onIconMouseOut.call(this, evt, this.data());
}).data(point.data);
}
} //添加绘画点
function setPoint(points) {
var opts = this.data('pointpainter.opts');
opts.points.push(points);
drawing.call(this);
} $.fn.pointpainter.defaults = {
//图标
icon : 'M9.5,3V13C17.5,13,17.5,17,25.5,17V7C17.5,7,17.5,3,9.5,3ZM6.5,29H8.5V3H6.5V29Z',
//图标颜色
fill : 'green',
stroke : "none",
//图标的cursor
cursor : 'pointer', //画布宽度和高度,默认为绑定元素的宽度和高度
width : 0,
height : 0, //初始化默认坐标点
points : [{
x : 0,
y : 0,
data : {}//data为绑定到图标的数据,可以在onIconMouseOver和onIconMouseOut事件中获取
}], //定义图标位置,图标位置是以坐标点为基准的定位
position : {
left : -7,
top : -26,
}, onIconMouseOver : $.noop,
onIconMouseOut : $.noop,
onMapDblClick : $.noop, //双击地图时触发的事件,两个参数,第一个为事件对象,第二个为所点击的点相对于地图的位置
onIconClick : $.noop//点击图标事件,两个参数,第一个为点,第二个为该点绑定的数据
}
})(jQuery, Raphael);

再给个调用的例子:

var points=[
{x:193,y:176,fill:'red',data:{name:'济南市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:108,y:193,fill:'green',data:{name:'聊城市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:309,y:354,fill:'green',data:{name:'临沂市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:371,y:172,fill:'yellow',data:{name:'潍坊市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:484,y:241,fill:'red',data:{name:'青岛市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:569,y:83,fill:'green',data:{name:'烟台市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:629,y:84,fill:'red',data:{name:'威海市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:218,y:380,fill:'green',data:{name:'枣庄市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:158,y:310,fill:'yellow',data:{name:'济宁市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:58,y:326,fill:'green',data:{name:'菏泽市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:208,y:227,fill:'red',data:{name:'泰安市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:252,y:224,fill:'yellow',data:{name:'莱芜市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:413,y:316,fill:'green',data:{name:'日照市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:286,y:161,fill:'yellow',data:{name:'淄博市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:138,y:86,fill:'green',data:{name:'德州市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:286,y:94,fill:'yellow',data:{name:'滨州市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}},
{x:326,y:82,fill:'green',data:{name:'东营市',projectName:'吴家堡街道办事处,吴家片区土地整理项目',period:'3期',date:'2013-01-15',money:'550万',content:'道路绿化,宣传标示牌,混凝土路及其它工程',complateDate:'2013-12-15'}}
] $('#container').pointpainter({
points : points,
onIconClick : function(data) {
window.location.href = "sjxmfbgl.html";
},
onMapDblClick : function(evt, point) {
console.log('x:' + point.x + ',y:' + point.y + ',');
$(this).pointpainter('setPoint', point);
},
onIconMouseOver : function(evt, data) {
var offset = {
top : evt.clientY,
left : evt.clientX
};
var content = '项目名称:' + data.projectName + '<br>项目期数:' + data.period + '<br>立项日期:' + data.date + '<br>财政结算:' + data.money + '<br>项目内容:' + data.content + '<br>预计完工日期:' + data.complateDate;
$('#pointTip').empty().html(content).show().offset(offset);
},
onIconMouseOut :function(){$('#pointTip').hide();}
});

各式各样的图标可以从http://raphaeljs.com/icons/获取,点击图标之后,下方会显示该点击图标的值,默认为小红旗:M9.5,3v10c8,0,8,4,16,4V7C17.5,7,17.5,3,9.5,3z M6.5,29h2V3h-2V29z
欢迎大家拍砖^_^
2013-08-21
下载地址:http://pan.baidu.com/share/link?shareid=3942623987&uk=641094506&third=15
jquery简单封装的更多相关文章
- 对Raphael画图标的一个jquery简单封装
公司要做一个项目的demo,要求地图上可以插红旗,所以就用到了Raphael. 因为是个demo,所以地图就用了一张图片,效果如下: 所以为了更好的封装一下这个功能,就写了一个简单的插件:jquery ...
- 模拟jQuery简单封装ajax
/*模拟jQuery的写法 (简单写法)*/ var $={}; /*ajax*/ $.ajax = function (options) { /* * 请求 * 1.请求接口 type get po ...
- Jquery Ajax简单封装(集中错误、请求loading处理)
Jquery Ajax简单封装(集中错误.请求loading处理) 对Jquery Ajax做了简单封装,错误处理,请求loading等,运用到项目中集中处理会很方便. 技术层面没有什么好说的,请求是 ...
- ajax请求原理及jquery $.ajax封装全解析
.ajax原理: Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面.这其中最关键的一步就是从服务器获得 ...
- SignalR简单封装
需求:Asp.Net MVC 开发客户端,实现与服务器端实时通信. 众所周知,Web开发是基于http的请求响应模型,每次刷新都需要客户端(浏览器)主动发起请求,那么,这个问题怎么解?Asp.Net ...
- jQuery的封装
封装,最简单的效果就是一个效果你可以重复的去调用 本来前端之路时间不是很长,但是对封装还是有一点点自己个人的理解,曾经踩过的坑也不在少数,最后总结出我个人风格的封装,听一位大神指点过,每个人都有属 ...
- axios简单封装
写在最前面 新手前端刚刚接触vue,感觉真的好用.项目中需要使用axios,然后学习了一下.借鉴网上一些大佬的经验,现在分享一下axios的简单封装,如果有什么错误的地方,请大家指出. axios安装 ...
- jQuery简单实现iframe的高度根据页面内容自适应的方法(转)
本文实例讲述了jQuery简单实现iframe的高度根据页面内容自适应的方法.分享给大家供大家参考,具体如下: 方式1: //注意:下面的代码是放在和iframe同一个页面中调用 $("#i ...
- jQuery简单的手风琴菜单
查看效果:http://keleyi.com/keleyi/phtml/menu/5.htm 本菜单的HTML代码和JS代码都简洁,完整源代码: <!DOCTYPE html PUBLIC &q ...
随机推荐
- 【LeetCode】Set Matrix Zeroes 解题报告
今天看到CSDN博客的勋章换了图表,同一时候也添加显示了博客等级,看起来都听清新的,感觉不错! [题目] Given a m x n matrix, if an element is 0, set i ...
- Android - JNI加入标准C++文件
JNI加入标准C++文件 本文地址: http://blog.csdn.net/caroline_wendy 其余參考: http://blog.csdn.net/caroline_wendy/art ...
- Oracle分区表转换
Oracle普通表—>分区表转换(9亿数据量) 背景介绍: 环境:Linux 5.5 + Oracle 10.2.0.4 某普通表T,由于前期设计不当没有分区,如今几年来的数据量已达9亿+, 空 ...
- springmvc实现long-pulling技术
背景介绍: 项目中有一个通讯模块,本来是用websocket全双工技术实现的,但IE10下面不支持websocket,而国内的360.2345浏 览器封装的所有是IE10下面的内核,考虑到站点在国内的 ...
- 动画云创始人胥克谦&课程格子创始人李天放分享创业经历
原文地址:http://student.csdn.net/mcd/topic/163587/955044 2014年10月18日在北京科技大学成功举办了CSDN高校俱乐部全国巡讲,现场參会学生有一百余 ...
- 快速构建Windows 8风格应用25-数据绑定
原文:快速构建Windows 8风格应用25-数据绑定 本篇博文主要介绍如何将UI元素与数据进行绑定.数据绑定的方向.数据更改通知.数据转换.数据绑定支持的绑定方案. 数据绑定是一种简单方式来显示数据 ...
- hdu 4858 项目管理(STL集装箱)
项目管理 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- NET Socket服务编程
smark https://github.com/IKende/ .NET Socket服务编程之-高效连接接入编 在.NET上编写网络服务深入都有2,3年了,而这些时间时如何在.NET里实现网络服务 ...
- Dotfuscator自定义规则中的元素选择
Dotfuscator是专业的.NET程序代码保护软件.是支持规则自定义的,你可以对重命名.程序控制流.字符串加密等等功能自定义规则.在进行规则自定义过程中,可以通过元素的不同选择,满足自己的程序需要 ...
- 使用Windows2003创建DHCP服务器 - 进阶者系列 - 学习者系列文章
Windows 2003提供的DHCP服务还是挺强大的.下面大概介绍下DHCP服务器的配置. 1. 通过控制面板安装DHCP服务 2. 打开DHCP配置项 3. 选择 新建作用域 4. 输入名 ...