JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)


Posted in Javascript onApril 05, 2016

本文实例讲述了JS基于ocanvas插件实现的简单画板效果。分享给大家供大家参考,具体如下:

使用ocanvas做了个简单的在线画板。

ocanvas参考:http://ocanvas.org/

效果如下:

JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)

主要代码如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8" />
  <title>oCanvas Example</title>
  <meta name="robots" content="noindex, nofollow">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
  <meta name="apple-mobile-web-app-capable" content="yes" />
  <meta name="apple-mobile-web-app-status-bar-style" content="black" />
  <script src="http://libs.useso.com/js/zepto/1.1.3/zepto.min.js"></script>
  <script>
  var line_color = '#000';
  var line_size = 3;
  $(function(){
    $('.tool .color div').click(function(){
      $('.tool .color div').removeClass('active');
      $(this).addClass('active');
      line_color = $(this).data('color');
      mouseDot.fill = line_color;
    });
    $('.tool .size div').click(function(){
      $('.tool .size div').removeClass('active');
      $(this).addClass('active');
      line_size = $(this).data('size');
      mouseDot.radius = Math.max(line_size / 2, 3);
    });
  });
  </script>
  <style>
  body, html {padding:0; margin:0; overflow:hidden;}
  .tool{position:absolute; top:10px; left:10px; border:solid 1px #aaa; background-color:#eee; border-radius:5px; padding-right:5px;}
  .tool .color {float:left; margin:5px; width:30px;}
  .tool .color div{width:24px; height:24px; border:solid 2px #aaa; margin-bottom:5px; opacity:0.5;}
  .tool .color div:hover{opacity:1; cursor:pointer;}
  .tool .color .active{opacity:1; border:solid 2px #000;}
  .tool .size {float:left; margin:5px; width:30px; margin-left:0;}
  .tool .size div{width:30px; height:30px; border:solid 2px #aaa; margin-bottom:5px; opacity:0.5;}
  .tool .size div:hover{opacity:1; cursor:pointer;}
  .tool .size .active{opacity:1; border:solid 2px #000;}
  .tool .size span{display:block; margin:3px auto; height:24px; background-color:black;}
  .btn {clear:both; margin-bottom:5px; text-align:center;}
  .btn input {padding:3px 15px;}
  </style>
</head>
<body>
  <canvas id="canvas" width="200" height="100"></canvas>
  <div class="tool">
    <div class="color">
      <div style="background:#000;" data-color="#000" class="active"></div>
      <div style="background:#f00;" data-color="#f00"></div>
      <div style="background:#0f0;" data-color="#0f0"></div>
      <div style="background:#00f;" data-color="#00f"></div>
      <div style="background:#ff0;" data-color="#ff0"></div>
      <div style="background:#0ff;" data-color="#0ff"></div>
      <div style="background:#f0f;" data-color="#f0f"></div>
      <div style="background:#fff;" data-color="#fff"></div>
    </div>
    <div class="size">
      <div class="active" data-size="3" ><span style="width:3px;" ></span></div>
      <div data-size="6" ><span style="width:6px;" ></span></div>
      <div data-size="9" ><span style="width:9px;" ></span></div>
      <div data-size="12"><span style="width:12px;"></span></div>
      <div data-size="15"><span style="width:15px;"></span></div>
      <div data-size="20"><span style="width:20px;"></span></div>
      <div data-size="25"><span style="width:25px;"></span></div>
    </div>
    <div class="btn">
      <input type="button" value="清 空" onclick="clearAll();" />
    </div>
  </div>
  <script src="js/ocanvas-2.7.3.min.js"></script>
  <script>
  var c = document.querySelector("#canvas"),
  ctx = c.getContext("2d");
  c.width = window.innerWidth;
  c.height = window.innerHeight;
  c.addEventListener("touchmove", function (e) { e.preventDefault(); }, false);
  var cs = oCanvas.create({
    canvas: "#canvas",
    background: "#fff",
    fps: 30,
    disableScrolling: true
  });
  var isDraw = false;
  var xx = 0;
  var yy = 0;
  var mouseDot;
  clearAll();
  cs.bind('mousedown', function(){
    drawBegin(cs.mouse.x, cs.mouse.y);
  }).bind('touchstart tap', function(){
    drawBegin(cs.touch.x, cs.touch.y);
  }).bind('mouseup touchend', function(){
    isDraw = false;
  }).bind('mousemove', function(){
    drawMove(cs.mouse.x, cs.mouse.y);
  }).bind('touchmove', function(){
    drawMove(cs.touch.x, cs.touch.y);
  });
  /*
  cs.setLoop(function () {
    mouseDot.x = cs.mouse.x;
    mouseDot.y = cs.mouse.y;
  }).start();
  */
  function drawBegin(x, y)
  {
    isDraw = true;
    xx = x;
    yy = y;
    var dot = cs.display.arc({
      x: x,
      y: y,
      radius: line_size / 2,
      start: 0,
      end: 360,
      fill: line_color
    });
    cs.addChild(dot);
  }
  function drawMove(x, y)
  {
    if (isDraw)
    {
      var line = cs.display.line({
        start: { x: xx, y: yy },
        end: { x: x, y: y },
        stroke: '' + line_size + 'px ' + line_color,
        cap: "round"
      });
      cs.addChild(line);
      xx = x;
      yy = y;
    }
    else
    {
      mouseDot.moveTo(x, y);
      cs.addChild(mouseDot);
      cs.draw.redraw();
    }
  }
  function clearAll()
  {
    cs.reset();
    // 处理鼠标
    cs.mouse.hide();
    mouseDot = cs.display.arc({
      x: -100,
      y: -100,
      radius: Math.max(line_size / 2, 3),
      start: 0,
      end: 360,
      fill: line_color,
      shadow: '0 0 5px #333'
    });
    cs.addChild(mouseDot);
  }
  </script>
</body>
</html>

完整实例代码点击此处本站下载。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(3)
Dec 23 Javascript
MooTools 页面滚动浮动层智能定位实现代码
Aug 23 Javascript
js局部刷新页面时间具体实现
Jul 04 Javascript
使用jquery获取网页中图片高度的两种方法
Sep 26 Javascript
JavaScript实现拖拽网页内元素的方法
Apr 15 Javascript
关于iframe跨域POST提交的方法示例
Jan 15 Javascript
JavaScript装饰器函数(Decorator)实例详解
Mar 30 Javascript
Javascript继承机制详解
May 30 Javascript
解决vue router组件状态刷新消失的问题
Aug 01 Javascript
详解小程序输入框闪烁及重影BUG解决方案
Aug 31 Javascript
vue 纯js监听滚动条到底部的实例讲解
Sep 03 Javascript
JS中判断字符串存在和非空的方法
Sep 12 Javascript
JavaScript图像延迟加载库Echo.js
Apr 05 #Javascript
超漂亮的Bootstrap 富文本编辑器summernote
Apr 05 #Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
Apr 05 #Javascript
JS+CSS实现闪烁字体效果代码
Apr 05 #Javascript
js拖拽的原型声明和用法总结
Apr 04 #Javascript
javascript如何实现360度全景照片问题汇总
Apr 04 #Javascript
javascript制作照片墙及制作过程中出现的问题
Apr 04 #Javascript
You might like
简单的php中文转拼音的实现代码
2014/02/11 PHP
smarty中js的调用方法示例
2014/10/27 PHP
php实现微信模板消息推送
2018/03/30 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
Vue中父组件向子组件通信的方法
2017/07/11 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
jQuery实现简单日历效果
2020/07/05 jQuery
[01:12:44]VG vs Mineski Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
Python3处理HTTP请求的实例
2018/05/10 Python
Python实现的建造者模式示例
2018/08/06 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
python 中如何获取列表的索引
2019/07/02 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
Python修改DBF文件指定列
2020/12/19 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
企业治理工作自我评价
2013/09/26 职场文书
机电专业个人求职信范文
2013/12/30 职场文书
文明演讲稿范文
2014/05/12 职场文书
拓展策划方案
2014/06/03 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
安全教育观后感
2015/06/17 职场文书
结婚主持人致辞
2015/07/28 职场文书
创业计划书之干洗店
2019/09/10 职场文书
MySQL中distinct和count(*)的使用方法比较
2021/05/26 MySQL