Giter Club home page Giter Club logo

markline.js's Introduction

markline.js

A simple & light js for painting marklines.

这是一个轻量的、无依赖的canvas库。使用它你能够快速画出漂亮的矢量标线(markline)。

特性

  • 支持缩放、拖动
  • 支持背景图放置类型有img和canvas
  • 无依赖、轻量(min版仅10kb)

示例

DEMO

html

<link rel="stylesheet" type="text/css" href="markline.css">
<script type="text/javascript" src="markline.min.js"></script>
...
<canvas id="canvas" width="1366" height="768"></canvas> 
<img id="bg" src="bg.jpg"></img>

准备一个canvas容器,以及一个背景(可以是图片也可以是canvas)(如果不提供背景将会自动用黑色背景填充)

data

var data = [{
  from: { x: 300, y: 50 },
  to: { x: 50, y: 300 },
  style: '#fff',
  info: ['Hi,this is markline!']
},{
  ...
}]

准备好在图上描的线的两端坐标以及线的颜色,和鼠标hover上去后提示的信息

js

var mkLine = markline('canvas','bg',1366,768);
mkLine.setOption(data);
mkLine.paint();

使用.setOption()的方法将数据导入,调用.paint()方法画出markline

Done.

说明文档

方法

markline() 用于生成markline对象

参数说明

参数名 是否必须 参数说明
canvasId 提供所需绘制的canvas元素的id名
bgId 提供一个绘制的背景图的id名(img、canvas皆可)
bgWidth 提供绘制背景图的宽度(不提供将默认使用canvas宽度)
bgHeight 提供绘制背景图的宽度(不提供将默认使用canvas高度)

示例

var mkLine = markline('canvas','bgId',1366,768);

方法

.setOption(json) 用于导入绘制的信息

参数说明

参数名 是否必须 参数说明
from 提供绘制起点的x和y坐标
to 提供绘制终点的x和y坐标
style 提供markline的颜色(不提供将默认使用白色)
info 提供鼠标hover上markline显示的信息(不提供将不显示)

示例

mkLine.setOption([{
  from: { x: 300, y: 50 },
  to: { x: 50, y: 300 },
  style: '#fff',
  info: ['Hi,this is markline!']
},{
  from: { x: 100, y: 100 },
  to: { x: 50, y: 300 },
  style: '#000',
  info: ['Hi,this is another markline!']
}])

注意: 先要通过.setOption()将数据导入后,调用该方法才可以绘出markline

方法

.paint() 用于绘制markline

参数说明

无参数

示例

mkLine.paint()

注意: 先要通过.setOption()将数据导入后,调用本方法才可以绘出markline

方法

.paintPoint(json) 用于绘制标记点

参数说明

参数名 是否必须 参数说明
x 提供绘制标记点的x坐标
y 提供绘制标记点的y坐标
style 提供绘制点的颜色(不提供将默认使用红色)
info 提供鼠标hover上绘制点显示的信息(不提供将不显示)

示例

mkLine.paintPoint([{
  x: 300,
  y: 50,
  style: '#fff',
  info: ['Hi,this is markline!']
},{
  x: 200,
  y: 100,
  style: '#000',
  info: ['Hi,this is another markline!']
}])

注意: 先要调用.paint()方法,再调用本方法才可以绘出标记点

方法

.getLines() 用于返回各个markline标记线的对象信息

返回类型

json

示例

[Line,Line,Line...]

使用

var lines = mkLine.getLines();

lines[0].style = 'red'; //修改第一条标记线的颜色为红色

方法

.getLine(id) 用于返回确定id的markline标记线的对象信息

返回类型

Object

使用

var line = mkLine.getLine(0);

line.style = 'red'; //修改第一条标记线的颜色为红色

方法

.getBalls() 用于返回各个markline标记线上运动点的对象信息

返回类型

json

示例

[Ball,Ball,Ball...]

使用

var balls = mkLine.getBalls();

balls[0].style = 'red'; //修改第一条标记线的运动点的颜色为红色

方法

.getBall(id) 用于返回确定id的markline标记线的运动点的对象信息

返回类型

Object

使用

var ball = mkLine.getBall(0);

ball.style = 'red'; //修改第一条标记线的运动点的颜色为红色

方法

.getPoints() 用于返回各个标记点的对象信息

返回类型

json

示例

[Point,Point,Point...]

使用

var points = mkLine.getPoints();

points[0].style = '#fff'; //修改第一个标记点的颜色为白色

方法

.getPoint(id) 用于返回确定id的标记点的对象信息

返回类型

Object

使用

var point = mkLine.getPoint(0);

point.style = '#fff'; //修改第一个标记点的颜色为白色

方法

.getHover() 用于返回当鼠标在线或者点上时的相关信息

返回类型

Object

示例

{
  hover: false,
  type: "",
  id: null
}

参数说明

参数名 参数示例 参数说明
hover true or false 用于返回是否触摸在线或者点上
type "point" or "line" or "" 用于返回鼠标触摸在什么类型上
id num or null 用于返回触摸上的线或者点的id

使用

var isHover = mkLine.getHover()
console.log(isHover);

Tips:通常和.onContextmenu()或者.onClick()事件进行配合使用

方法

.onClick(callback) 当鼠标在所绘制的canvas上左键单击时触发的事件

使用

mkLine.onClick(function(){
  var e = window.event;
  var canvas = document.getElementById("canvas");
  var mouse = {
    x : e.clientX - canvas.getBoundingClientRect().left,
    y : e.clientY - canvas.getBoundingClientRect().top
  };

  var isHover = mkLine.getHover();
  console.log(isHover);
});

Tips:通常和.getHover()事件进行配合使用

方法

.onContextmenu(callback) 当鼠标在所绘制的canvas上右击时触发的事件

使用

mkLine.onContextmenu(function(){
  var e = window.event;
  var canvas = document.getElementById("canvas");
  var mouse = {
    x : e.clientX - canvas.getBoundingClientRect().left,
    y : e.clientY - canvas.getBoundingClientRect().top
  };

  var isHover = mkLine.getHover();
  console.log(isHover);
});

Tips:通常和.getHover()事件进行配合使用

修改鼠标hover的提示样式

只需要更改markline.css里的#mk-info#mk-info div的样式即可。

更新日志

v0.2

增加:

  • markline与point光影效果

修复:

  • 缩放的时候闪屏的bug
  • 第一条markline颜色偏暗的bug
  • point的形状渲染成非圆的bug

v0.1

介绍:

  • 无依赖、轻量级canvas库
  • 支持导入图片或者canvas作为背景
  • 支持鼠标滚轮缩放、支持PC端鼠标拖拽
  • 数据驱动——给出所需数据到画图只需两步
  • 支持自定义显示hover信息

License

MIT

Copyright (c) 2016-2017 Molunerfinn

markline.js's People

Contributors

molunerfinn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

markline.js's Issues

您好,我目前实现一个类似百度地图的标记功能。

遇到一个问题就是,我标记一个点的时候,怎么知道当前点相对于canvas drawImage()画出来的图片的坐标,当图片缩放的时候,这些点的坐标也跟随缩放,就像你当前的demo里面的缩放,这个坐标的转换搞不懂,求大神解答一下。我的qq 号是2824798771,

重新绘制模糊问题

你好,想请教个问题,我最近也有个类似的需求,线上需要标记,就是看了源码,就是咱这个定时刷新的时候背景、line、ball都是要进行重新paint的,就是我自己画贝塞尔曲线的时候,如果不清除掉之前的线条,这条线重绘就越来越模糊,但是清除了(需要全局或区块性清除)就没有扫尾的效果了,这个你遇到过吗,希望能解答一下

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.