对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
对Raphael画图标的一个jquery简单封装的更多相关文章
- jquery简单封装
对Raphael画图标的一个jquery简单封装 公司要做一个项目的demo,要求地图上可以插红旗,所以就用到了Raphael. 因为是个demo,所以地图就用了一张图片,效果如下: 所以为了更好的封 ...
- 模拟jQuery简单封装ajax
/*模拟jQuery的写法 (简单写法)*/ var $={}; /*ajax*/ $.ajax = function (options) { /* * 请求 * 1.请求接口 type get po ...
- 分享一个dapper简单封装
using System;using System.Data.Common;using System.Linq;using Dapper;using MySql.Data.MySqlClient; p ...
- SignalR简单封装
需求:Asp.Net MVC 开发客户端,实现与服务器端实时通信. 众所周知,Web开发是基于http的请求响应模型,每次刷新都需要客户端(浏览器)主动发起请求,那么,这个问题怎么解?Asp.Net ...
- Jquery Ajax简单封装(集中错误、请求loading处理)
Jquery Ajax简单封装(集中错误.请求loading处理) 对Jquery Ajax做了简单封装,错误处理,请求loading等,运用到项目中集中处理会很方便. 技术层面没有什么好说的,请求是 ...
- 一个很简单的jQuery插件实例教程(菜鸟级)
很多公司的前端设计开发人员都是女孩子,而这些女孩子很多JavaScript技能都不是很好.而前端开发过程中,JavaScript技能又是必不可少的.所以,如果前端小MM正在为某个JavaScript效 ...
- jQuery框架开发一个最简单的幻灯效果
在线演示 在这个课程中,我们将介绍如何使用jQuery来开发一个最简单的图片幻灯效果. 立刻观看互动课程:jQuery框架开发一个最简单的幻灯效果 阅读原文:jQuery框架开发一个最简单的幻灯效果
- 用XHR简单封装一个axios
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用jQuery简单实现返回顶部的一个小案例
1.简单写一个页面 首先我们应该创建两个盒子,container盒子主要模拟页面滚动到的位置,back盒子主要功能是实现返回顶部的功能 2.简单的对这两个盒子写一些样式 我们应该先将返回顶部盒子隐藏( ...
随机推荐
- DateUtils 学习记录1
开发过程中很多时候都需要处理各种各样的日期..有些项目可能还会有自己的DateUtil.... 其实apache commons lang3有一个很好用的日期处理工具类,叫DateUtils... 基 ...
- 关于在Xcode控制台打印的注意点
注意!!在控制台中打印语句的返回值,这句代码也算是被执行过了一次 比如在下列代码的if语句执行之前,现在控制台打印 [_dataBaseexecuteUpdate:createSql] 的布尔值 if ...
- 第二章 --- 关于Javascript 设计模式 之 策略模式
这一章节里面,我们会主要的针对JavaScript中的策略模式进行理解和学习 一.定义 策略模式: 定义一系列的算法,把他们封装起来,并且是他们可以相互替换. (这样的大的定义纲领,真的不好理解,特别 ...
- 我的vimrc
set nocompatible set langmenu=en_USlet $LANG= 'en_US' source $VIMRUNTIME/vimrc_example.vim source $V ...
- C语言位域
转载自 http://tonybai.com/2013/05/21/talk-about-bitfield-in-c-again/ 再谈C语言位域 五 21 bigwhite技术志 bitfield, ...
- PHP之readdir()函数
最近在学习php文件操作的相关知识,记录一下readdir()函数其中的一个要注意的点 1. 在$temp=readdir($handle)函数中 readdir获取的是文件名和$handle中的文件 ...
- mac 下设置jdk 路径,设置hadoop 路径
1. touch ~/.bash_profile 创建一个文件 2.vim ~/.bash_profile JAVA_HOME=/Library/Java/JavaVirtualMachines/j ...
- gitlab使用个人版v16.11
title: gitlab使用个人版v16.11 date: 2016-11-13 20:53:00 tags: [gitlab] --- 1.安装gitbash 附上地址链接:git 2.配置git ...
- BZOJ4591——[Shoi2015]超能粒子炮·改
1.题意:求 2.分析:公式恐惧症的同学不要跑啊QAQ 根据lucas定理-- 这一步大家都能懂吧,这是浅而易见的lucas定理转化过程,将每一项拆分成两项 那么下一步,我们将同类项合并 我们观察可以 ...
- Java基本数据类型总结
基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型.它们是我们编程中使用最频繁的类型.java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值称为变量的初始化. 1. Java ...