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 相关文章推荐
Ruffy javascript 学习笔记
Nov 30 Javascript
jQuery 改变CSS样式基础代码
Feb 11 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
Sep 03 Javascript
jquery聚焦文本框与扩展文本框聚焦方法
Oct 12 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
Jun 10 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
Dec 23 Javascript
JavaScript模版引擎的基本实现方法浅析
Feb 15 Javascript
JavaScript 隐性类型转换步骤浅析
Mar 15 Javascript
vue+node实现图片上传及预览的示例方法
Nov 22 Javascript
JavaScript HTML DOM元素 节点操作汇总
Jul 29 Javascript
JS实现图片切换特效
Dec 23 Javascript
Vue的过滤器你真了解吗
Feb 24 Vue.js
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绝对路径与相对路径之间关系的的分析
2010/03/03 PHP
php ZipArchive压缩函数详解实例
2013/11/06 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
2014/04/14 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
2014/07/28 PHP
php+mysql实现无限级分类
2015/11/11 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
jquery 多级下拉菜单核心代码
2010/05/21 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/03 Javascript
document.getElementById的简写方式(获取id对象的简略写法)
2010/09/10 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
浅析js实现网页截图的两种方式
2019/11/01 Javascript
vue 中固定导航栏的实例代码
2019/11/01 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
Pytorch实现LSTM和GRU示例
2020/01/14 Python
python 高阶函数简单介绍
2021/02/19 Python
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
大学老师推荐信
2014/02/25 职场文书
安全资料员岗位职责范本
2014/06/28 职场文书
物理课外活动总结
2014/08/27 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
机关作风建设整改方案
2014/10/27 职场文书