我正在处理一段编码,我希望可擦除画布的颜色在刷新时发生变化。
在css中触发颜色会更容易,但是现在这是在这些触发器的编码本身;
var container = document.getElementById('canvas');
init(container, 5000, 3000, '#f8fa58');
我怎么能把它变成多个(让我们说2)可变颜色,它可以从中挑选。那么当网站刷新时,具体的颜色会随机出现吗?
(function() {
// a little verbose but...
function handleMousemove(event) {
var x = event.clientX;
var y = event.clientY;
draw(x, y);
}
function handleTouchmove(event) {
event.preventDefault(); // we don't want to scroll
var touch = event.touches[0];
var x = touch.clientX;
var y = touch.clientY;
draw(x, y);
}
// this one can be shared by both touch and move events
function activateDrawing(event) {
event.preventDefault();
canvas.isDrawing = true;
}
function draw(eventX, eventY) {
var x = eventX - canvas.node.offsetLeft;
var y = eventY - canvas.node.offsetTop;
if (!canvas.isDrawing) {
return;
}
var radius = 100; // or whatever
var fillColor = '#ff0000';
ctx.globalCompositeOperation = 'destination-out';
ctx.fillCircle(x, y, radius, fillColor);
}
function createCanvas(parent, width, height) {
var canvas = {};
canvas.node = document.createElement('canvas');
canvas.context = canvas.node.getContext('2d');
canvas.node.width = width || 100;
canvas.node.height = height || 100;
parent.appendChild(canvas.node);
return canvas;
}
var canvas, ctx; // got it out to avoid nesting too deeply my handlers;
function init(container, width, height, fillColor) {
canvas = createCanvas(container, width, height);
ctx = canvas.context;
// define a custom fillCircle method
ctx.fillCircle = function(x, y, radius, fillColor) {
var radgrad = ctx.createRadialGradient(x, y, 0, x, y, radius);
radgrad.addColorStop(0, 'rgba(255,0,0,1)');
radgrad.addColorStop(0.8, 'rgba(255,0,0,.9)');
radgrad.addColorStop(1, 'rgba(255,0,0,0)');
// draw shape
ctx.fillStyle = radgrad;
ctx.fillRect(x - radius, y - radius, x + radius, y + radius);
};
ctx.clearTo = function(fillColor) {
ctx.fillStyle = fillColor;
ctx.fillRect(0, 1, width, height);
};
ctx.clearTo(fillColor || "#ddd");
// bind mouse events
canvas.node.onmousemove = throttle(handleMousemove);
canvas.node.ontouchmove = throttle(handleTouchmove);
canvas.node.onmouseenter =
canvas.node.ontouchstart = throttle(activateDrawing);
}
var container = document.getElementById('canvas');
init(container, 5000, 3000, '#f8fa58');
/* Bonus : throttle these events so they don't fire too often */
function throttle(callback) {
var active = false; // a simple flag
var evt; // to keep track of the last event
var handler = function() { // fired only when screen has refreshed
active = false; // release our flag
callback(evt);
}
return function handleEvent(e) { // the actual event handler
evt = e; // save our event at each call
if (!active) { // only if we weren't already doing it
active = true; // raise the flag
requestAnimationFrame(handler); // wait for next screen refresh
};
}
}
})();
document.body.addEventListener('touchstart', function(e) {
e.preventDefault();
});

body {
overflow: hidden !important;
margin-left: -10vw;
margin-top: -30vh;
}
#back {
z-index: -10;
pointer-events: none;
position: absolute;
margin: 0;
display: block;
background: url(https://odlp-staging1.s3.amazonaws.com/uploads/2012/04/original_01_-belladonna-viviane-sassen-jpg.jpg) no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
width: 110vw;
height: 130vh;
}
#canvas {
z-index: -1;
top: 2vh;
left: -10vw;
width: 110vw;
height: 130vh;
overflow: hidden;
}

<div id="back"></div>
<div id="canvas"></div>
&#13;
答案 0 :(得分:2)
使用url location hash来存储重新加载次数的简单解决方案:
<body>
<script>
const numberOfReloads = window.location.hash.substr(1) | 0;
window.location.hash = numberOfReloads + 1;
if (numberOfReloads % 2) {
document.body.style.background = "red";
} else {
document.body.style.background = "blue";
}
</script>
</body>
答案 1 :(得分:1)
对于随机颜色,您可以将各种颜色存储在数组中,然后使用随机方法。
var randomColors = ['#f8fa58','red','black'];
var bg = randomColors[Math.floor(Math.random()*randomColors.length)];
init(container, 5000, 3000, bg);
答案 2 :(得分:0)
编写一个函数来生成随机颜色,然后调用此函数来获取随机颜色:
function GetRandomColor() {
var set = ["1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];
var c1 = set[Math.floor(Math.random()*set.length)];
var c2 = set[Math.floor(Math.random()*set.length)];
var c3 = set[Math.floor(Math.random()*set.length)];
var c4 = set[Math.floor(Math.random()*set.length)];
var c5 = set[Math.floor(Math.random()*set.length)];
var c6 = set[Math.floor(Math.random()*set.length)];
var color = "#" + c1 + c2 + c3 + c4 + c5 + c6 ;
return color ;
}
$(document).ready(function() {
$("a").on("click", function() {
var c = GetRandomColor() ;
$("#color").css("background-color", c) ;
});
});
#color{
display: block;
width: 50px;
height: 50px;
border: 1px solid #000;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="javascript:;">Generate a random color</a>
<div id="color"></div>