HTML5 -canvas拖拽、移动 绘制图片可操作移动,拖动
关于canvas 的基础知识就不多说了,可以进这个网址学习
http://www.w3school.com.cn/html5/html_5_canvas.asp
对于canvas 和 SVG 其实一开始个人是比较倾向于SVG多一点,不过后来工作需要,又学习了下canvas,
这两个之间主要不同是 canvas是在JavaScript中绘制,SVG则是在 XML 绘制
其实canvas 主要的工作就是绘制图像,图表之类的工作,对于一些可操作的特效个人还是更喜欢用canvas + div 来实现;
如果不是特别难的需求能做到尽量做<( ̄︶ ̄)↗[GO!]
列出一个demo 这个主要功能就是canvas 内图片拖拽
(想要拖拽什么可以直接更换JavaScript 中第3、4、5句);
说是拖拽,但也只是目测看起是 “像”是,其实在每次鼠标移动的时候都会先清掉之前画好的,再在鼠标所在的位置重新绘制一个,全套demo如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body,div{
margin:0;
padding:0;
}
#d1{
width:500px;
height: 400px;
border: 2px solid #00FFD1;
}
</style>
</head>
<body> <div id="d1">
<canvas id="myCanvas" width="500" height="400">
<p>您的系统不支持此程序!</p>
</canvas>
</div> <script>
const canva=document.getElementById("myCanvas");
const cansText=canva.getContext("2d"); let img = new Image();
img.src="http://www.w3school.com.cn/i/ct_html5_canvas_circle.gif";
cansText.drawImage(img,50,50,150,100);
//在事件外声明需要用到的变量
let ax,ay,x,y; canva.onmousedown=function (e) { canva.onmousemove = function(e){
x= e.clientX;y=e.clientY; //限制移动不能超出画布
(x<173)? ax=75 : ax=425;
(y<148)? ay=50 : ay=350; (x < 425 && x >75)? x =e.clientX : x =ax; (y > 50 && y <350) ? y=e.clientY : y=ay; //先清除之前的然后重新绘制
cansText.clearRect(0,0,canva.width,canva.height); cansText.drawImage(img,x-75,y-50,150,100);
}; canva.onmouseup = function(){
canva.onmousemove = null;
canva.onmouseup = null;
};
} </script>
</body>
</html>
补充:点击图片非中心移动时,会自动跳动到,图片以当前光标为中心
原链:https://blog.csdn.net/freedomVenly/article/details/79042536
HTML5 -canvas拖拽、移动 绘制图片可操作移动,拖动的更多相关文章
- 基于html5可拖拽图片循环滚动切换
分享一款基于html5可拖拽图片循环滚动切换.这是一款支持手机端拖拽切换的网站图片循环滚动特效.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div id="s ...
- canvas拖拽效果
canvas拖拽和平时用的js拖拽是有区别的 普通的js是设置目标为绝对定位,再根据鼠标的移动来改变left和top的值 canvas是获得了鼠标的位置,直接在目标点进行重新绘制 下面给一个简单的拖拽 ...
- canvas 拖拽实现
Canvas 依赖分辨率 不支持事件处理器 弱的文本渲染能力 能够以 .png 或 .jpg 格式保存结果图像 最适合图像密集型的游戏,其中的许多对象会被频繁重绘 SVG 不依赖分辨率 支持事件处理器 ...
- 将HTML5 Canvas的内容保存为图片借助toDataURL实现
将HTML5 Canvas的内容保存为图片主要思想是借助Canvas自己的API - toDataURL()来实现,具体实现如下,感兴趣的朋友可以参考下哈,希望对你有所帮助 <html> ...
- HTML5之拖拽(兼容IE和非IE)
前世:项目中需要拖动div,然后和某个div进行位置交换,这不是关键,关键是还要保存位置,然后在下次打开的时候按照保存的位置显示.还好本人功力深厚,一下子就想到了用localStorage来保存,事实 ...
- html5 文件拖拽上传
本文首先发表在 码蜂笔记 : http://coderbee.net/index.php/web/20130703/266 html5 文件拖拽上传是个老话题了,网上有很多例子,我一开始的代码也是网 ...
- HTML5 Canvas 小例子 旋转的图片
<一>CSS部分 @charset "utf-8"; *{ padding:; margin:; outline: none; } #canvas{ position: ...
- Ant Design -- 图片可拖拽效果,图片跟随鼠标移动
Ant Design 图片可拖拽效果,图片跟随鼠标移动,需计算鼠标在图片中与图片左上角的X轴的距离和鼠标在图片中与图片左上角的Y轴的距离. constructor(props) { super(pro ...
- HTML5 Canvas(实战:绘制饼图2 Tooltip)
继上一篇HTML5 Canvas(实战:绘制饼图)之后,笔者研究了一下如何给饼图加鼠标停留时显示的提示框. Plot对象 在开始Coding之前,笔者能够想到的最easy的方式,就是给饼图的每一个区域 ...
随机推荐
- iOS - 开源框架、项目和学习资料汇总(网络篇)
网络连接 1. AFNetworking – ASI不升级以后,最多人用的网络连接开源库,[推荐]iOS网络编程之AFNetworking使用,iOS开发下载文件速度计算.2. Alamofire – ...
- js跨域请求数据的3种常用的方法
由于js同源策略的影响,当在某一域名下请求其他域名,或者同一域名,不同端口下的url时,就会变成不被允许的跨域请求.那这个时候通常怎么解决呢,对此菜鸟光头我稍作了整理:1.JavaScript 在 ...
- bootstrap中点击左边展开
<div id="sideNav" href=""><i class="material-icons dp48 glyphicon- ...
- POJ-1959 Darts
Darts Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1286 Accepted: 741 Description Back ...
- Scala学习笔记(3)-表达式归纳
语法:使用表达式定义值和变量 val <identifier>[:<type>]=<expression> 字面值类型 var <identifier> ...
- redis系列之数据库与缓存数据一致性解决方案
redis系列之数据库与缓存数据一致性解决方案 数据库与缓存读写模式策略 写完数据库后是否需要马上更新缓存还是直接删除缓存? (1).如果写数据库的值与更新到缓存值是一样的,不需要经过任何的计算,可以 ...
- iOS-深入理解(转载)
RunLoop 是 iOS 和 OS X 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何 ...
- Spark-自定义排序
一.自定义排序规则-封装类 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /** ...
- 关于HttpServletRequest报红叉的解决办法
今天导入项目的时候,发现报错了,如题.然后找到了解决办法 解决方法:鼠标右击项目工程——>Build Path——>点击comfigure Build Path进入----->选择j ...
- vuex使用
1.装包:npm install vuex -S 2.引入:import Vuex from 'vuex' //这些都是写在man.js中 3.加载到Vue中:Vue.use(Vuex) 4 ...