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 ...
随机推荐
- 收集的css布局
1 <title>左定宽,右自动</title> 2 <style> 3 body{margin:0px;padding:0px;} 4 .box .left,.b ...
- VS2012使用XListCtrl
XListCtrl.强大ListCtrl.到现在,所有我曾经遇到过ListCtrl我们使用XListCtrl攻克. XListCtrl有什么可以支持? 变化column背景颜色.尺寸.线.制作chec ...
- MyEclipse使用总结——MyEclipse文件查找技巧
原文:MyEclipse使用总结--MyEclipse文件查找技巧 一.查找文件 使用快捷键[ctrl+shift+R]弹出弹出文件查找框,如下图所示: 二.查找包含某个字符串的文件 使用快捷键[ct ...
- Java数据结构与算法(1) - ch02有序表(OrderedArray)
有序表需要掌握的插入方法,删除方法和二分法查找方法. 插入方法: 从前往后找到比要插入的值大的数组项,将该数组项及之后的项均后移一位(从最后一项起依次后移),最后将要插入的值插入当前数组项. 删除方法 ...
- POI导出大量数据的简单解决方案(附源码)-Java-POI导出大量数据,导出Excel文件,压缩ZIP(转载自iteye.com)
说明:我的电脑 2.0CPU 2G内存 能够十秒钟导出 20W 条数据 ,12.8M的excel内容压缩后2.68M 我们知道在POI导出Excel时,数据量大了,很容易导致内存溢出.由于Excel ...
- leetcode第37题--Count and Say
题目:(据说是facebook的面试题哦) The count-and-say sequence is the sequence of integers beginning as follows:1, ...
- C/C++软件静态测试现状
对于C/C++软件而言,静态测试越来越趋向软件安全功能测试.包括数据机密性.完整性.可用性.不可否认性.身份认证.授权.访问控制.审计跟踪.委托.隐私保护.安全管理等. 通常情况下,C/C++静态测试 ...
- web.xml在listener作用与用途
一.WebContextLoaderListener 监听类 它能捕捉到server的启动和停止,在启动和停止触发里面的方法做对应的操作! 它必须在web.xml 中配置才干使用,是配置监听类的 二. ...
- 读书笔记—CLR via C#异常和状态管理
前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可 ...
- 推荐一个比较好的VBS编辑器
QTP 本身的IDE环境, 有诸多缺陷.所以,一般中级以上的自动化测试工程师都会采用外部其他编辑器来编辑VBS脚本.通常情况下,一般都 notepad++. 但是,notepad++也是有很多不足之处 ...