JavaScipt30(第八个案例)(主要知识点:canvas)

承接上文,这是第8个案例,要实现的效果是按住鼠标不放,进行拖动时可以在画布上画出不同粗细不同颜色的曲线。

附上项目链接: https://github.com/wesbos/JavaScript30

主要思路:鼠标按下时,记录当前x,y坐标,作为起点,鼠标移动时开始画线。鼠标左键抬起或移出画布时停止绘画。没什么讲的,有个值得注意的点,hsl这个表现颜色,我之前不知道的。附上源码:

<script>const canvas = document.querySelector('#draw');const ctx = canvas.getContext('2d');canvas.width = window.innerWidth;canvas.height = window.innerHeight;ctx.strokeStyle = '#BADA55';ctx.lineJoin = 'round';ctx.lineCap = 'round';ctx.lineWidth = 100;// ctx.globalCompositeOperation = 'multiply';
let isDrawing = false;let lastX = 0;let lastY = 0;let hue = 0;let direction = true;function draw(e) {if (!isDrawing) return; // stop the fn from running when they are not moused down
                console.log(e);
//                 HSL(H,S,L),css3颜色值表示方式,
//                 H:Hue(色调)。0(或360)表示红色,120表示绿色,240表示蓝色,也可取其他数值来指定颜色。取值为:0 - 360
//                 S:Saturation(饱和度)。取值为:0.0% - 100.0%
//                 L:Lightness(亮度)。取值为:0.0% - 100.0%ctx.strokeStyle = `hsl(${hue}, 100%, 50%)`;ctx.beginPath();// start from
                ctx.moveTo(lastX, lastY);// go to
                ctx.lineTo(e.offsetX, e.offsetY);ctx.stroke();[lastX, lastY] = [e.offsetX, e.offsetY];hue++;if (hue >= 360) {hue = 0;}if (ctx.lineWidth >= 100 || ctx.lineWidth <= 1) {direction = !direction;}if (direction) {ctx.lineWidth++;} else {ctx.lineWidth--;}}canvas.addEventListener('mousedown', (e) => {isDrawing = true;[lastX, lastY] = [e.offsetX, e.offsetY];});canvas.addEventListener('mousemove', draw);canvas.addEventListener('mouseup', () => isDrawing = false);canvas.addEventListener('mouseout', () => isDrawing = false);</script>

 

转载于:https://www.cnblogs.com/wangxi01/p/10648612.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

死锁的产生、预防和避免

死锁是由于并发进程只能按互斥方式访问临界资源等多种因素引起的&#xff0c;并且是一种与执行时间和速度密切相关的错误现象。死锁的一般定义&#xff1a;若在一个进程集合中&#xff0c;每一个进程都在等待一个永远不会发生的事件而形成一个永久的阻塞状态&#xff0c;这种阻…

python numpy.random模块中提供啦大量的随机数相关的函数

1. numpy中产生随机数的方法 1)rand()   产生[0,1]的浮点随机数,括号里面的参数可以指定产生数组的形状 2)randn()  产生标准正太分布随机数&#xff0c;参数含义与random相同 3)randint()  产生指定范围的随机数&#xff0c;最后一个参数是元祖&#xff0c;他确定数组的…

eclipse复制代码连接数据库404_再见,Eclipse ...

点击上方“Java基基”&#xff0c;选择“设为星标”做积极的人&#xff0c;而不是积极废人&#xff01;源码精品专栏 中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数据库中间件 Sharding-JDBC 和 MyCAT 源码解析作业…

单页vue路由router

Vue.js vue-router 可以很简单的实现单页应用。 <router-link> 是一个组件&#xff0c;该组件用于设置一个导航链接&#xff0c;切换不同 HTML 内容。 to 属性为目标地址&#xff0c; 即要显示的内容。 以下实例中我们将 vue-router 加进来&#xff0c;然后配置组件和路…

python 多线程为什么鸡肋?

什么是全局解释器锁GIL Python代码的执行由Python 虚拟机(也叫解释器主循环&#xff0c;CPython版本)来控制&#xff0c;Python 在设计之初就考虑到要在解释器的主循环中&#xff0c;同时只有一个线程在执行&#xff0c;即在任意时刻&#xff0c;只有一个线程在解释器中运行。对…

usb端点轮询_使用Spring Integration轮询http端点

usb端点轮询如果您想用Spring Integration编写一个流程来轮询HTTP端点并从http端点收集一些内容以进行进一步处理&#xff0c;那有点不直观。 Spring Integration提供了几种与HTTP端点集成的方式- Http出站适配器–将消息发送到http端点 Http出站网关–将消息发送到http端点…

tensorflow下载

以下下载的为tensorflow版本为1.2.1 GPU python3.6 python3.5 https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-1.2.1-cp35-cp35m-win_amd64.whlhttps://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-1.2.1-cp36-cp36m-win_amd64.wh…

make时候说找不到makefile_找不到对象,应不应该接受相亲?听听三个过来人怎么说...

找我分享你的故事&#xff0c;点击右上角关注&#xff0c;你就是我的人了&#xff01;相信每一个人都有这样一个愿望&#xff1a;希望在自己感情的世界里面能够遇到一个执子之手&#xff0c;与子偕老的人共度余生。可是不是每个人都能够那么幸运的&#xff0c;那么轻易的就遇上…

Synchronized总结

一、synchronized加锁原理 synchronized可以保证方法或者代码块在运行时&#xff0c;同一时刻只有一个线程可以进入到临界区&#xff0c;同时它还可以保证共享变量的内存可见性。 Java中每一个对象都可以作为锁&#xff0c;这是synchronized实现同步的基础&#xff1a; &#x…

dpkg命令

dpkg命令如果ubuntu要安装新软件&#xff0c;已有deb安装包&#xff08;例如&#xff1a;iptux.deb&#xff09;&#xff0c;但是无法登录到桌面环境。那该怎么安装&#xff1f;答案是&#xff1a;使用dpkg命令。dpkg命令常用格式如下&#xff1a;sudo dpkg -I iptux.deb#查看i…

linux进程间的通信(C): 共享内存

一、共享内存介绍共享内存是三个IPC(Inter-Process Communication)机制中的一个。它允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在进行的进程之间传递数据的一种非常有效的方式。大多数的共享内存的实现&#xff0c;都把由不同进程之间共享的内存安排为同一段…

使用js在桌面上写一个倒计时器_论一个倒计时器的性能优化之路

原文发表于 2018.05.25&#xff0c;搬运自个人博客。引子回顾这半年&#xff0c;扛需求能力越来越强&#xff0c;业务代码也是越写越多。但稍一认真看看这些当时为了满足快速上线所码的东西&#xff0c;问题其实还是不少。这次就从一个简单的计时器说起。现状问题很明显倒计时器…

Vue 导入文件import、路径@和.的区别

***import&#xff1a; html文件中&#xff0c;通过script标签引入js文件。而vue中&#xff0c;通过import xxx from xxx路径的方式导入文件&#xff0c;不光可以导入js文件。 from前的&#xff1a;“xxx”指的是为导入的文件起一个名称&#xff0c;不是指导入的文件的名称&…

python split()

python函数&#xff1a;split() Python中有split()和os.path.split()两个函数&#xff0c;具体作用如下&#xff1a; split()&#xff1a;拆分字符串。通过指定分隔符对字符串进行切片&#xff0c;并返回分割后的字符串列表&#xff08;list&#xff09; os.pa…

windows聚焦图片为什么不更新了_为什么年轻明星都不愿意接周星驰的戏? 林更新道出了事情的真相|周星驰|林更新|喜剧之王|演员...

要说华语电影史上最有成就的喜剧之王&#xff0c;那么大家脑中一定会闪过周星驰的名字&#xff0c;相信在不少60后、70后心目中&#xff0c;都有周星驰的一席之地。《大话西游》、《逃学威龙》、《九品芝麻官》等一系列作品都是非常经典的作品&#xff0c;就算是拿到当下来看都…

多线程多进程解析:Python、os、sys、Queue、multiprocessing、threading

当涉及到操作系统的时候&#xff0c;免不了要使用os模块&#xff0c;有时还要用到sys模块。 设计到并行程序&#xff0c;一般开单独的进程&#xff0c;而不是线程&#xff0c;原因是python解释器的全局解释器锁GIL&#xff08;global interpreter lock&#xff09;&#xff0c;…

练习1

方法一&#xff1a; 统计在一个队列中的数字&#xff0c;有多少个正数&#xff0c;多少个负数&#xff0c;如[1, 3, 5, 7, 0, -1, -9, -4, -5, 8] lists [1, 3, 5, 7, 0, -1, -9, -4, -5, 8]positive 0 negative 0for number in lists:if number > 0:positive 1elif nu…

python sort()、sorted()

python sort、sorted排序 这篇文章主要介绍了python sort、sorted高级排序技巧,本文讲解了基础排序、升序和降序、排序的稳定性和复杂排序、cmp函数排序法等内容. python list内置sort()方法用来排序&#xff0c;也可以用python内置的全局sorted()方法来对可迭代的序列排…

电脑内存占用莫名很高_CPU占用高,电脑莫名卡顿?万能的重启拯救不了就用这3招,妥了!...

大家还记得windows 10 1903推送时发生的大翻车事件吗&#xff1f;那次的更新主要是修复早期版本的Visual Basic 6、VBA和VBScript无反应、远端桌面出现当机黑屏幕等问题&#xff0c;但win10的更新总是“捡了芝麻&#xff0c;丢了西瓜”&#xff0c;解决早期问题而又出现新的问题…

5. 多线程程序如何让 IO 和“计算”相互重叠,降低 latency?

基本思路是&#xff0c;把 IO 操作&#xff08;通常是写操作&#xff09;通过 BlockingQueue 交给别的线程去做&#xff0c;自己不必等待。 例1: logging 在多线程服务器程序中&#xff0c;日志 (logging) 至关重要&#xff0c;本例仅考虑写 log file 的情况&#xff0c;不考…