static

canvas-login.js 9.1KB

    require(["jquery", "ipu-stomp"], function($, IpuStomp,) { // var baseUrl = "ws://localhost:7100/stomp"; var baseUrl = "ws://47.105.160.21:7100/stomp"; var login = "empty_account1"; var passcode = "123456"; var host = ""; var client; //为发送者input绑定onchange事件 $("#userId").on("change", function(e) { $("#userId").val(e.target.value); }) var callbacks = {}; callbacks.onConnected = function(msg){ console.log("连接成功:" + msg); alert("连接成功:" + msg); $("#connBtn").val("断开连接"); $("#connBtn").attr("id", "disconnBtn"); $("#userId").attr("disabled", "disabled"); } callbacks.onFailure = function(msg){ console.log("连接失败:" + msg); alert("连接失败:" + msg); } $("#connBtn").on("click", function(e) { if (typeof (WebSocket) == "undefined") { console.log("您的浏览器不支持WebSocket"); } else { console.log("您的浏览器支持WebSocket"); //实例化WebSocket对象,指定要连接的服务器地址与端口 建立连接 //等同于socket = new WebSocket("ws://localhost:8888/xxxx/im/25"); if (!client || !client.connected()) { //检查用户ID if (!$("#userId").val()) { alert("请填写用户名") return; } client = IpuStomp.connect({url:baseUrl,name:login,passcode:passcode,host:host}, callbacks); client.setTopicPath("topic"); } else { client.disconnect(); subscription && subscription.unsubscribe(); $("#disconnBtn").val("连接服务器"); $("#disconnBtn").attr("id", "connBtn"); $("#userId").removeAttr("disabled"); } } }); var path = [] $("#login").on( "click", function(e) { //校验连接状态 if (!client || !client.connected()) { alert("服务未连接") return; } //校验发布频道 if (!$("#topic").val()) { alert("请填写发送频道") return; } chalkboard(); }) function chalkboard(){ $('#chalkboard').remove(); $('.chalk').remove(); // $('#canvas').prepend('<div class="panel"><a class="link" target="_blank">Save</a></div>'); $('#canvas').prepend('<img src="img/bg.png" id="pattern" width=50 height=50>'); $('#canvas').prepend('<canvas id="chalkboard"></canvas>'); $('#canvas').prepend('<div class="chalk"></div>'); var canvas = document.getElementById("chalkboard"); $('#chalkboard').css('width','200px'); $('#chalkboard').css('height','400px'); canvas.width = 200; canvas.height = 400; 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; var sendText = '{"userId":"' + $("#userId").val() + '","topic":"' + $("#topic").val() + '","contentText":"' + canvas.toDataURL("image/png",0.5).toString() + '"}' client.publish($("#topic").val(), sendText); } function erase(x,y){ ctx.clearRect (x-0.5*eraserWidth,y-0.5*eraserHeight,eraserWidth,eraserHeight); var sendText = '{"userId":"' + $("#userId").val() + '","topic":"' + $("#topic").val() + '","contentText":"' + canvas.toDataURL("image/png",0.5).toString() + '"}' client.publish($("#topic").val(), sendText); } $('.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(); }); } });