多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

中國最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2

Jquery集合

瀏覽聲明

UI

分類插件

模態框

滾動輪播

拖拉排序

多選框

滾動條

Loading

移動端

提示框

功能性插件

瀑布流

  • CSS3立方體小照片
  • D3.js logo可視化庫 D3.js
  • 圖片處理

    banner特效

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

    閱讀 (2495)

    ie兼容10
    插件描述:這是一款使用HTML5 Canvas制作的黑板特效,該黑板特效支持手機移動端,它能模擬使用粉筆在黑板上寫字的效果。

    這是一款使用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="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();
      });
    }

    關閉
    程序員人生
    主站蜘蛛池模板: 精品欧美一区二区在线看片 | 婷五月综合 | 国产中日韩一区二区三区 | 九九精品视频一区二区三区 | 亚洲精品成人在线 | 国产日韩欧美中文字幕 | 久草一级片 | 中国国产成人精品久久 | 日本96在线精品视频免费观看 | 久久久久久一级毛片免费无遮挡 | 亚洲精品一区二区乱码在线观看 | 亚洲国产色综合有声小说 | 午夜视频在线网站 | 99久久综合狠狠综合久久aⅴ | 国产亚洲图片 | 欧美亚洲一区 | 亚洲精品系列 | 99久久精品一区二区三区 | www免费视频 | 狂野欧美激情性xxxx | 欧美日韩国产成人精品 | 久久久亚洲精品视频 | 亚洲精品日本一区 | 国产人伦视频在线观看 | 国产一级做a爱片久久毛片a | 精品久久久久久久一区二区手机版 | 天天爱综合网 | 变态 另类 国产 亚洲 | 精品在线视频播放 | 亚洲成人在线免费观看 | 亚洲狠狠狠一区二区三区 | 异族tube欧美疯狂xxx | 边吃奶边添下面就爽 | 欧美性视频网 | 欧美日本在线一区二区三区 | 欧美办公室系列激情videos | 亚洲www在线| 日本午夜大片a在线观看 | 澳门特级α片免费观看视频 | 精品久久久久久中文字幕无碍 | 久久久成人影院 |