国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

實(shí)現(xiàn)簡(jiǎn)單手寫板

這篇具有很好參考價(jià)值的文章主要介紹了實(shí)現(xiàn)簡(jiǎn)單手寫板。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Canvas with Eraser</title>

<style>

canvas {

border: 1px solid #ccc;

}

</style>

</head>

<body>

<canvas id="canvas"></canvas>

<div>

<input type="color" id="color">

<button id="clear">Clear</button>

<button id="undo">Undo</button>

<input type="range" id="brush-size" min="1" max="50" value="10">

<select id="brush-type">

<option value="round">Round</option>

<option value="square">Square</option>

<option value="butt">Butt</option>

</select>

<button id="eraser">Eraser</button>

</div>

<script>

var canvas = document.getElementById('canvas')

var context = canvas.getContext('2d')

var drawing = false

var color = '#000000'

var undoStack = []

var brushSize = 10

var brushType = 'round'

var eraserEnabled = false

? ? canvas.addEventListener('mousedown', startDrawing)

? ? canvas.addEventListener('mousemove', draw)

? ? canvas.addEventListener('mouseup', stopDrawing)

? ? canvas.setAttribute('width', 1000)

? ? canvas.setAttribute('height', 500)

? ? var colorInput = document.getElementById('color')

? ? colorInput.addEventListener('change', function () {

? ? ? ? color = colorInput.value

? ? ? ? eraserEnabled = false

? ? })

? ? var clearButton = document.getElementById('clear')

? ? clearButton.addEventListener('click', function () {

? ? ? ? context.clearRect(0, 0, canvas.width, canvas.height)

? ? ? ? undoStack = []

? ? })

? ? var undoButton = document.getElementById('undo')

? ? undoButton.addEventListener('click', function () {

? ? ? ? if (undoStack.length > 0) {

? ? ? ? ? ? context.clearRect(0, 0, canvas.width, canvas.height)

? ? ? ? ? ? undoStack.pop()

? ? ? ? ? ? redraw()

? ? ? ? }

? ? })

? ? var brushSizeInput = document.getElementById('brush-size')

? ? brushSizeInput.addEventListener('change', function () {

? ? ? ? brushSize = brushSizeInput.value

? ? })

? ? var brushTypeInput = document.getElementById('brush-type')

? ? brushTypeInput.addEventListener('change', function () {

? ? ? ? brushType = brushTypeInput.value

? ? })

? ? var eraserButton = document.getElementById('eraser')

? ? eraserButton.addEventListener('click', function () {

? ? ? ? eraserEnabled = true

? ? })

? ? function startDrawing(event) {

? ? ? ? drawing = true

? ? ? ? context.beginPath()

? ? ? ? context.moveTo(event.offsetX, event.offsetY)

? ? }

? ? function draw(event) {

? ? ? ? if (drawing) {

? ? ? ? ? ? if (eraserEnabled) {

? ? ? ? ? ? ? ? context.globalCompositeOperation = 'destination-out'

? ? ? ? ? ? ? ? context.strokeStyle = 'rgba(0,0,0,1)'

? ? ? ? ? ? ? ? context.lineWidth = brushSize

? ? ? ? ? ? ? ? context.lineCap = brushType

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? context.globalCompositeOperation = 'source-over'

? ? ? ? ? ? ? ? context.strokeStyle = color

? ? ? ? ? ? ? ? context.lineWidth = brushSize

? ? ? ? ? ? ? ? context.lineCap = brushType

? ? ? ? ? ? }

? ? ? ? ? ? context.lineTo(event.offsetX, event.offsetY)

? ? ? ? ? ? context.stroke()

? ? ? ? }

? ? }

? ? function stopDrawing() {

? ? ? ? drawing = false

? ? ? ? undoStack.push(canvas.toDataURL())

? ? }

? ? function redraw() {

? ? ? ? var img = new Image()

? ? ? ? img.onload = function () {

? ? ? ? ? ? context.drawImage(img, 0, 0)

? ? ? ? }

? ? ? ? img.src = undoStack[undoStack.length - 1]

? ? }

</script>

</body>

</html>

加入視頻功能以后的涂鴉板

<!DOCTYPE html>
<html>
<head>
? <meta charset="UTF-8">
? <title>Canvas Doodle on Video</title>
? <style>
? ? video, canvas {
? ? ? width: 640px;
? ? ? height: 360px;
? ? }
? </style>
</head>
<body>
? <video id="video" src="video.mp4" controls></video>
? <canvas id="canvas"></canvas>
? <script>
? ? var video = document.getElementById('video');
? ? var canvas = document.getElementById('canvas');
? ? var context = canvas.getContext('2d');
? ? var drawing = false;
? ? var lastX, lastY;

? ? video.addEventListener('play', function() {
? ? ? draw();
? ? });

? ? canvas.addEventListener('mousedown', function(e) {
? ? ? drawing = true;
? ? ? lastX = e.offsetX;
? ? ? lastY = e.offsetY;
? ? });

? ? canvas.addEventListener('mousemove', function(e) {
? ? ? if (drawing) {
? ? ? ? context.beginPath();
? ? ? ? context.moveTo(lastX, lastY);
? ? ? ? context.lineTo(e.offsetX, e.offsetY);
? ? ? ? context.stroke();
? ? ? ? lastX = e.offsetX;
? ? ? ? lastY = e.offsetY;
? ? ? }
? ? });

? ? canvas.addEventListener('mouseup', function() {
? ? ? drawing = false;
? ? });

? ? function draw() {
? ? ? if (video.paused || video.ended) {
? ? ? ? return;
? ? ? }
? ? ? context.drawImage(video, 0, 0, canvas.width, canvas.height);
? ? ? requestAnimationFrame(draw);
? ? }
? </script>
</body>
</html>文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-476486.html

到了這里,關(guān)于實(shí)現(xiàn)簡(jiǎn)單手寫板的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包