• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > 支持移动端的HTML5 Canvas逼真黑板特效

支持移动端的HTML5 Canvas逼真黑板特效

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含移动端,HTML5 , Canvas等相关知识,匿名希望在学习及工作中可以帮助到您
简要教程

这是一款使用HTML5 Canvas制作的黑板特效,该黑板特效支持手机移动端,它能模拟使用粉笔在黑板上写字的效果。该黑板特效的特点还有:

  • 使用鼠标左键能够在黑板上写字。

  • 使用鼠标右键能够擦除已写的字。

  • 按空格键可以清空黑板上的内容。

  • 点击下载按钮可以将写入的内容保存为图片并下载。

使用方法

413.jpg

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="img/bg.png" id="pattern" width=50 height=50>');
  $('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="'+ctximage+'" name="chalkboard.png">');
    },500);
  }
  $(window).resize(function(){
    chalkboard();
  });
}

以上就是支持移动端的HTML5 Canvas逼真黑板特效的内容,更多相关内容请关注P

您可能想查找下面的文章:

  • HTML5移动端手机网站开发流程
  • 如何利用input事件来监听移动端的输入
  • 移动端html5 meta标签的神奇功效
  • 移动端解决悬浮层(悬浮header、footer)会遮挡住内容的3种方法
  • html5在移动端的屏幕适应问题示例探讨
  • 移动端Html5页面生成图片解决方案
  • html5移动端Meta的设置
  • canvas原生实现前端网页移动端签名
  • 如何通过HTML5触摸事件实现移动端简易进度条
  • Html5移动端获奖无缝滚动动画实现

相关文章

  • 2018-12-03做导航栏为什么用ul>li,而不用dd dt dl?
  • 2018-12-03HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图_html5教程技巧
  • 2018-12-03HTML5 placeholder(空白提示)属性介绍_html5教程技巧
  • 2018-12-03如何让ie浏览器支持html5标签?
  • 2018-12-03在HTML5 Canvas中放入图片和保存为图片的方法
  • 2018-12-03关于canvas的一个实例教程--刮刮乐
  • 2018-12-03html5 canvas实现简单的双缓冲
  • 2018-12-03html5跨域通讯之postMessage的用法总结_html5教程技巧
  • 2017-08-06HTML5重塑Web世界它将如何改变互联网
  • 2018-12-03HTML基础

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • 分享最好的HTML5编码教程和参考手册
    • vue中解决v-for使用报红并出现警告
    • 让IE9以下版本的浏览器兼容HTML5的方法
    • 使用HTML5的表单验证的简单示例_html5教程技巧
    • 最全的HTML5标签
    • html5的性能不输原生app 可以用拼积木的方式做HTML5产品
    • H5拖放API进行拖放排序
    • HTML5每日一练之OL列表的改良
    • 谷歌为什么要推出AMP计划?
    • html5新增的属性和废除的属性简要概述

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有