支援行動端的HTML5 Canvas逼真黑板特效
簡短教學
這是一款使用HTML5 Canvas製作的黑板特效,該黑板特效支援手機移動端,它能模擬使用粉筆在黑板上寫字的效果。此黑板特效的特點還有:
使用滑鼠左鍵能夠在黑板上寫字。
使用滑鼠右鍵能夠擦除已寫的字。
按空白鍵可以清空黑板上的內容物。
點擊下載按鈕可以將寫入的內容儲存為圖片並下載。
使用方法

JavaScript
該HTML5 Canvas黑板特效的完整js程式碼如下:
$(document).ready(chalkboard);
function chalkboard(){
$('#chalkboard').remove();
$('.chalk').remove();
$('body').prepend('<div class="panel"><a class="link" target="_blank">Save</a></div>');
$('body').prepend('<img src="/static/imghw/default1.png" data-src="img/bg.png" class="lazy" id="pattern" style="max-width:90%"支援行動端的HTML5 Canvas逼真黑板特效" >');
$('body').prepend('<canvas id="chalkboard"></canvas>');
$('body').prepend('<div class="chalk"></div>');
var canvas = document.getElementById("chalkboard");
$('#chalkboard').css('width',$(window).width());
$('#chalkboard').css('height',$(window).height());
canvas.width = $(window).width();
canvas.height = $(window).height();
var ctx = canvas.getContext("2d");
var width = canvas.width;
var height = canvas.height;
var mouseX = 0;
var mouseY = 0;
var mouseD = false;
var eraser = false;
var xLast = 0;
var yLast = 0;
var brushDiameter = 7;
var eraserWidth = 50;
var eraserHeight = 100;
$('#chalkboard').css('cursor','none');
document.onselectstart = function(){ return false; };
ctx.fillStyle = 'rgba(255,255,255,0.5)';
ctx.strokeStyle = 'rgba(255,255,255,0.5)';
ctx.lineWidth = brushDiameter;
ctx.lineCap = 'round';
var patImg = document.getElementById('pattern');
document.addEventListener('touchmove', function(evt) {
var touch = evt.touches[0];
mouseX = touch.pageX;
mouseY = touch.pageY;
if (mouseY < height && mouseX < width) {
evt.preventDefault();
$('.chalk').css('left', mouseX + 'px');
$('.chalk').css('top', mouseY + 'px');
//$('.chalk').css('display', 'none');
if (mouseD) {
draw(mouseX, mouseY);
}
}
}, false);
document.addEventListener('touchstart', function(evt) {
//evt.preventDefault();
var touch = evt.touches[0];
mouseD = true;
mouseX = touch.pageX;
mouseY = touch.pageY;
xLast = mouseX;
yLast = mouseY;
draw(mouseX + 1, mouseY + 1);
}, false);
document.addEventListener('touchend', function(evt) {
mouseD = false;
}, false);
$('#chalkboard').css('cursor','none');
ctx.fillStyle = 'rgba(255,255,255,0.5)';
ctx.strokeStyle = 'rgba(255,255,255,0.5)';
ctx.lineWidth = brushDiameter;
ctx.lineCap = 'round';
$(document).mousemove(function(evt){
mouseX = evt.pageX;
mouseY = evt.pageY;
if(mouseY<height && mouseX<width){
$('.chalk').css('left',(mouseX-0.5*brushDiameter)+'px');
$('.chalk').css('top',(mouseY-0.5*brushDiameter)+'px');
if(mouseD){
if(eraser){
erase(mouseX,mouseY);
}else{
draw(mouseX,mouseY);
}
}
}else{
$('.chalk').css('top',height-10);
}
});
$(document).mousedown(function(evt){
mouseD = true;
xLast = mouseX;
yLast = mouseY;
if(evt.button == 2){
erase(mouseX,mouseY);
eraser = true;
$('.chalk').addClass('eraser');
}else{
if(!$('.panel').is(':hover')){
draw(mouseX+1,mouseY+1);
}
}
});
$(document).mouseup(function(evt){
mouseD = false;
if(evt.button == 2){
eraser = false;
$('.chalk').removeClass('eraser');
}
});
$(document).keyup(function(evt){
if(evt.keyCode == 32){
ctx.clearRect(0,0,width,height);
layPattern();
}
});
$(document).keyup(function(evt){
if(evt.keyCode == 83){
changeLink();
}
});
document.oncontextmenu = function() {return false;};
function draw(x,y){
ctx.strokeStyle = 'rgba(255,255,255,'+(0.4+Math.random()*0.2)+')';
ctx.beginPath();
ctx.moveTo(xLast, yLast);
ctx.lineTo(x, y);
ctx.stroke();
// Chalk Effect
var length = Math.round(Math.sqrt(Math.pow(x-xLast,2)+Math.pow(y-yLast,2))/(5/brushDiameter));
var xUnit = (x-xLast)/length;
var yUnit = (y-yLast)/length;
for(var i=0; i<length; i++ ){
var xCurrent = xLast+(i*xUnit);
var yCurrent = yLast+(i*yUnit);
var xRandom = xCurrent+(Math.random()-0.5)*brushDiameter*1.2;
var yRandom = yCurrent+(Math.random()-0.5)*brushDiameter*1.2;
ctx.clearRect( xRandom, yRandom, Math.random()*2+2, Math.random()+1);
}
xLast = x;
yLast = y;
}
function erase(x,y){
ctx.clearRect (x-0.5*eraserWidth,y-0.5*eraserHeight,eraserWidth,eraserHeight);
}
$('.link').click(function(evt){
$('.download').remove();
var imgCanvas = document.createElement('canvas');
var imgCtx = imgCanvas.getContext("2d");
var pattern = imgCtx.createPattern(patImg,'repeat');
imgCanvas.width = width;
imgCanvas.height = height;
imgCtx.fillStyle = pattern;
imgCtx.rect(0,0,width,height);
imgCtx.fill();
var layimage = new Image;
layimage.src = canvas.toDataURL("image/png");
setTimeout(function(){
imgCtx.drawImage(layimage,0,0);
var compimage = imgCanvas.toDataURL("image/png");//.replace('image/png','image/octet-stream');
$('.panel').append('<a href="'+compimage+'" download="chalkboard.png" class="download">Download</a>');
$('.download').click(function(){
IEsave(compimage);
});
}, 500);
});
function IEsave(ctximage){
setTimeout(function(){
var win = window.open();
$(win.document.body).html('<img src="/static/imghw/default1.png" data-src="'+ctximage+'" class="lazy" name="chalkboard.png" alt="支援行動端的HTML5 Canvas逼真黑板特效" >');
},500);
}
$(window).resize(function(){
chalkboard();
});
}上述網支援手機端支援端的更多逼真內容 CanvasreeeHT799相關網數的逼真內容,更多內容支援手機端(m.sbmmt.com)!
熱AI工具
Undress AI Tool
免費脫衣圖片
Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片
AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。
Clothoff.io
AI脫衣器
Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!
熱門文章
熱工具
記事本++7.3.1
好用且免費的程式碼編輯器
SublimeText3漢化版
中文版,非常好用
禪工作室 13.0.1
強大的PHP整合開發環境
Dreamweaver CS6
視覺化網頁開發工具
SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)
理解H5:含義和意義
May 11, 2025 am 12:19 AM
H5是HTML5,是HTML的第五個版本。 HTML5提升了網頁的表現力和交互性,引入了語義化標籤、多媒體支持、離線存儲和Canvas繪圖等新特性,推動了Web技術的發展。
H5:探索最新版本的HTML
May 03, 2025 am 12:14 AM
html5isamajorrevisionofthehtmlStandardThatRevolutionsWebDevelopmentBybyIntroDucingNewSemanticeLementSemelementsandAndCapabilities.1)itenhancesCodereAdabilityAndSeowitability andSeowithelientsLike,and.2)
HTML5:限制
May 09, 2025 pm 05:57 PM
HTML5hasseverallimitationsincludinglackofsupportforadvancedgraphics,basicformvalidation,cross-browsercompatibilityissues,performanceimpacts,andsecurityconcerns.1)Forcomplexgraphics,HTML5'scanvasisinsufficient,requiringlibrarieslikeWebGLorThree.js.2)I
HTML5的重要目標:增強網絡開發和用戶體驗
May 14, 2025 am 12:18 AM
html5aimstoenhancewebdevelopmentanduserexperiencethroughsemantstructure,多媒體綜合和performanceimprovements.1)SemanticeLementLike like,和ImproVereAdiability and ImproVereAdabilityActibility.2)and tagsallowsemlessallowseamelesseamlessallowseamelesseamlesseamelesseamemelessmultimedimeDiaiaembediiaembedplugins.3)。 3)3)
什麼是微數據? HTML5解釋了
Jun 10, 2025 am 12:09 AM
MicrodataenhancesSEOandcontentdisplayinsearchresultsbyembeddingstructureddataintoHTML.1)Useitemscope,itemtype,anditempropattributestoaddsemanticmeaning.2)ApplyMicrodatatokeycontentlikebooksorproductsforrichsnippets.3)BalanceusagetoavoidclutteringHTML
HTML5:2024年的目標
May 13, 2025 am 12:13 AM
html5'sgoalsin2024focusonrefinement和optimization,notNewFeatures.1)增強performanceandeffipedroptimizedRendering.2)inviveAccessibilitywithRefinedwithRefinedTributesAndEllements.3)explityconcerns,尤其是withercercern.4.4)
HTML5:使用新功能和功能轉換網絡
May 11, 2025 am 12:12 AM
html5transformswebdevelopmentbyIntroducingSemanticlements,多種型,功能強大,功能性和表現性影響力圖。 1)semanticelementslike,,, andenhanceseoandAcccostibility.2)多層次andablawlyementsandablowemediaelementsandallawallawaldawallawaldawallawallawallawallawallawallawallawallallownallownallownallownallownallowembedembbeddingwithingwithingwithoutplugins iff inform
HTML5的目的:創建一個更強大,更容易訪問的網絡
May 14, 2025 am 12:18 AM
html5aimstoenhancewebcapabilities,Makeitmoredynamic,互動,可及可訪問。 1)ITSupportsMultimediaElementsLikeAnd,消除innewingtheneedtheneedtheneedforplugins.2)SemanticeLelelemeneLementelementsimproveaCceccessibility inmproveAccessibility andcoderabilitile andcoderability.3)emply.3)lighteppoperable popperappoperable -poseive weepivewebappll


