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 parseInt 函数分析(转)
Mar 21 Javascript
页面载入结束自动调用js函数示例
Sep 23 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
May 16 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
Sep 06 Javascript
jQuery插件zepto.js简单实现tab切换
Jun 16 Javascript
JS简单实现无缝滚动效果实例
Aug 24 Javascript
jQuery ajaxForm()的应用
Oct 14 Javascript
设置cookie指定时间失效(实例代码)
May 28 Javascript
React Native如何消除启动时白屏的方法
Aug 08 Javascript
vue绑定class与行间样式style详解
Aug 16 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
Oct 12 Javascript
JS div匀速移动动画与变速移动动画代码实例
Mar 26 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在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
php简单的会话类代码
2011/08/08 PHP
PHP数据类型的总结分析
2013/06/13 PHP
浅析PHP中的i++与++i的区别及效率
2016/06/15 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
JS 日期验证正则附asp日期格式化函数
2009/09/11 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
VUE JS 使用组件实现双向绑定的示例代码
2017/01/10 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
Python中的一些陷阱与技巧小结
2015/07/10 Python
Python构建XML树结构的方法示例
2017/06/30 Python
python筛选出两个文件中重复行的方法
2018/05/31 Python
wxPython:python首选的GUI库实例分享
2019/10/05 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
椰子猫砂:CatSpot
2018/08/27 全球购物
Yahoo-PHP面试题1
2016/07/20 面试题
DTD的含义以及作用
2014/01/26 面试题
物流管理专业大学生自荐信
2013/10/04 职场文书
2014新年寄语
2014/01/20 职场文书
大学班级文化建设方案
2014/05/06 职场文书
幸福中国演讲稿
2014/09/12 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
谢师宴家长致辞
2015/07/27 职场文书