画板(适用于手机、PC端)
Html代码
<script type="text/javascript" src="jquery-1.9.1.min.js"></script> <!-- 定义画板的区域 -->
<canvas id="myCanvas" style="background-color: black; border: 1px solid #BFBFBF;"></canvas><br/> <!-- 清空画板的按钮 -->
<button onclick="clean();" style="height: 3em;width: 5em;">清 空</button> <!-- 根据画板里的内容,生成图片 -->
<button onclick="savePic();" style="height: 3em;width: 6em;">生成图片</button><br/> <!-- 生成的图片存放的img标签 -->
<img id="img" alt="请签名" width="100px" /> <script type="text/javascript"> var canvas; //定义一个全局的 canvas
var board; //定义一个画板的 全局变量
var img; //图片
var mousePress = false; //鼠标按压全局变量 , 默认不按压
var last = null; //最后的按压点全局变量 ,默认没有最后按压坐标 //页面加载后进行的操作
$(function(){ canvas = document.getElementById('myCanvas'); //指定canvas区域
img= document.getElementById('img'); //获取图片 canvas.height = 300; //定义 canvas 的高度
canvas.width = 500; //定义 canvas 的宽度 board = canvas.getContext('2d'); //创建画板 board.lineWidth = 2; //画板的书写字体宽度
board.strokeStyle = "#F5270B"; //画板的书写的字体颜色 board.stroke(); canvas.onmousedown = beginDraw;
canvas.onmousemove = drawing;
canvas.onmouseup = endDraw; canvas.addEventListener('touchstart',beginDraw,false);
canvas.addEventListener('touchmove',drawing,false);
canvas.addEventListener('touchend',endDraw,false); }); /**
* 开始画画,将鼠标按压全局变量设为true
*/
function beginDraw(){
mousePress = true;
} /**
* 画画
*/
function drawing(event){ //算出canvs距离顶部的坐标,如果画板的顶部不在页面的最上边,会非常有用
var canvs_top = $('#myCanvas').offset().top;
event.preventDefault(); //如果没有按压,返回
if(!mousePress)return; //获取点触点的坐标
var xy = pos(event); //如果最后的按压点全局变量 不为空,证明手或鼠标没有松开过,从最后按压点到现在按压点划线
if(last!=null){
board.beginPath();
board.moveTo(last.x,last.y-canvs_top);
board.lineTo(xy.x,xy.y - canvs_top); board.lineWidth = 2;
board.strokeStyle = "#F5270B"; board.stroke();
} //将最后的按压点全局变量设置为当前的按压点坐标
last = xy;
} /**
* 结束画画
*/
function endDraw(event){
mousePress = false;
event.preventDefault();
last = null;
} /**
* 生成的图片存放的img标签
*/
function savePic(){
var dataUrl = canvas.toDataURL();
img.src = dataUrl;
} /**
* 清空画板
*/
function clean(){
board.clearRect(0,0,canvas.width,canvas.height);
} /**
* 获取按压点的坐标
*/
function pos(event){
var x,y;
if(isTouch(event)){
x = event.touches[0].pageX;
y = event.touches[0].pageY;
}else{
x = event.offsetX+event.target.offsetLeft;
y = event.offsetY+event.target.offsetTop;
}
// log('x='+x+' y='+y);
return {x:x,y:y};
} /**
* 输入坐标变化
*/
function log(msg){
var log = document.getElementById('log');
var val = log.value;
log.value = msg+'n'+val;
} function isTouch(event){
var type = event.type;
if(type.indexOf('touch')>=0){
return true;
}else{
return false;
}
}
</script>
画板(适用于手机、PC端)的更多相关文章
- 在thinkPHP3.2.3框架下实现手机和PC端浏览器的切换
查看thinkphp版本号方法 打开文件“根目录\ThinkPHP\ThinkPHP.php”下的文件ThinkPHP.php,在22--23行可以看到版本信息THINK_VERSION,如下图: 说 ...
- PHP判断访问者手机移动端还是PC端的函数,亲测好用
,用手机访问PC端WWW域名的时候,自动判断跳转到移动端,用电脑访问M域名手机网站的时候,自动跳转到PC端,我们团队在开发erdaicms二代旅游CMS网站管理系统的时候(http://www.erd ...
- 部分PC端安卓管理器使用强行断开重连的方法来连接手机,容易丢书数据,损坏数据
最近发现部分PC端的安卓管理器,貌似是百度影音以及PPTV的安卓客户端,使用强行断开手机连接,然后重新连接手机的方法,来实现客户端程序连接手机. 此时,如果刚好正在复制文件,则复制的文件会损坏,并且基 ...
- 手机应用PC端演示工具介绍
写给公司内部用的,所以没什么含量,请免炮轰. 为什么需要在PC端演示? 在Android及IOS系统上开发的手机应用,往往由于设备的限制,无法在演示汇报的场合向在场的众人展示界面,如果有工具可以将手机 ...
- h5微信页面在手机微信端和微信web开发者工具中都能正常显示,但是在pc端微信浏览器上打不开(显示空白)
h5微信页面在手机微信和微信开发者工具中都能正常显示,但是在pc端微信浏览器上打不开或者数据加载不出来. 原因:pc端微信浏览器不支持ES6语法,我的代码中使用了一些ES6的特性 解决:将ES6转换为 ...
- 手机控制台调试(需PC端协助)
工具需求: 1.PC 2.手机(暂时只测试安卓,ios可能是在证书上有区别?) 3.以上两个工具在同一局域网下 步骤: 一 ,PC端登录nodejs官网,选择并下载安装 next,下一步下一步即可( ...
- 手机端点击复制链接到剪切板(以及PC端)
一直在找如何能点击按钮将一串字符串放到手机的剪切板上,但是可能是因为搜索的关键字不对,一直无果. 向同事请教了一下,给了一个clickboard.js的插件.开始试验的时候,使用手机自带浏览器进行测试 ...
- Windows 之 手机访问 PC 端本地部署的站点
测试网页在手机上的显示工具我们可以使用谷歌内核的浏览器,打开开发者工具(F12),在device那里选择设备,然后刷新来查看网页在手机上的显示效果. 但毕竟是模拟的,如果想要在真机上调试该怎么办呢. ...
- PC端轻松控制Android手机,PC Control Andoroid,PC控制安卓手机
记录此次经历的目的是帮助需要的人或下次使用时少走弯路,我为此试用了不少工具及方法,因为追求免费,像"Weak Control:在PC上控制你的Android手机"还要收费的我就不弄 ...
- Fiddler4工具配置及调试手机和PC端浏览器
Fiddler最大的用处: 模拟请求.修改请求.手机应用调试 Fiddler最新版本 下载地址: http://www.telerik.com/download/fiddler Fiddler 想要监 ...
随机推荐
- Java中字符串的常用属性与方法
•字符串常用的属性 string.length()————>返回字符串的长度,int类型. •字符串常用的方法 String.contains(";")——————>判 ...
- 本地读取服务器Xml文件及本地读本地的xml
updateUrl="ServerUrl"(服务器路径) WebClient wc = new WebClient(); Stream stream = wc.OpenRead(u ...
- Uncaught TypeError: str.replace is not a function
在做审核页面时,点击审核通过按钮不执行 后来F12控制台查看发现有报错 是因为flisnullandxyzero未执行 然后找出这个方法,此方法为公共方法,将这个方法复制出来 然后使用console. ...
- pig常用命令
一.pig: pig提供了一个基于Hadoop的并行地执行数据流处理的引擎.它包含了一种脚本语言,称为Pig Latin.(类似SQL) 二.Pig Latin: 1.注释: 单行:-- 多行:/* ...
- (1)搜索广告CTR预估
https://www.cnblogs.com/futurehau/p/6181008.html 一.广告投放系统 广告系统包含多个子系统.除了上图所示的广告投放系统外,还包含商业系统(广告库的获得) ...
- 观察者模式之Golang实现
观察者模式的具体概念原理,参见https://baike.baidu.com/item/%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F/5881786?fr ...
- Swoole 源码分析——Server模块之Worker事件循环
swManager_loop 函数 manager 进程管理 manager 进程开启的时候,首先要调用 onManagerStart 回调 添加信号处理函数 swSignal_add,SIGTERM ...
- Problem 63
Problem 63 https://projecteuler.net/problem=63 Powerful digit counts The 5-digit number, 16807=75, i ...
- 洛谷 2147 SDOI2008 Cave 洞穴勘测
[题解] 动态树模板题,只要求维护森林的连通性,直接上板子即可. #include<cstdio> #include<algorithm> #define N 500010 # ...
- 【Codeforces 385C】Bear and Prime Numbers
[链接] 我是链接,点我呀:) [题意] f[i]表示在x[]中有多少个数字是i的倍数 让你求出sum(f[i]) li<=i<=ri 且i是质数 [题解] 做筛法求素数的时候顺便把素数i ...