HTML怎么做成多彩背景,HTML5+Colours.js 彩色格子布料背景生成器

JavaScript

语言:

JaveScriptBabelCoffeeScript

确定

var sw = window.innerWidth,

sh = window.innerHeight;

var bmp = dom.canvas(sw, sh);

var ctx = bmp.ctx;

var patternMonochrome;

var patternColoured;

var dot = 2;

var widths;

var pallete;

var size;

var rotation = 0;

var palettePreview;

var preview;

var title;

var container = dom.element("div", {

className: "container",

style: {

width: sw + "px",

height: sh + "px"

}

});

document.body.appendChild(container);

container.appendChild(bmp.canvas);

function newSize() {

size = Math.ceil(Math.random() * 10) * 10;

}

function newStripes() {

var lines = 2 + ~~(Math.random() * 5);

widths = [0];

while (widths.length < lines) widths.push(Math.ceil(1 + Math.random() * (size - 1) / 2) * 2); // all patternColoureds should be multiples of 2

widths.push(size);

con.log("widths", widths)

var noDuplicates = [];

widths.map(function(a, i) {

if (widths.indexOf(a) == i) {

noDuplicates.push(a)

}

});

widths = noDuplicates.sort(function(a, b) {

return a < b ? -1 : 1;

});

}

function newPalette() {

colours.getRandomPalette();

if (palettePreview) {

container.removeChild(palettePreview);

palettePreview.removeEventListener("click", changePalette)

}

palettePreview = colours.showPalette();

palettePreview.addEventListener("click", changePalette);

container.appendChild(palettePreview);

}

function newColours() {

palette = [];

var attempts = 0;

// if the current colour scheme from colours.js has less than stripes. simple brute force check with attempts. don't tell anyone!

while (palette.length < widths.length - 1) {

var newColour = colours.getRandomColour();

if (palette.indexOf(newColour) == -1 || attempts > 100) {

palette.push(newColour);

}

attempts++;

}

}

function reset() {

newSize();

newStripes();

newPalette()

newColours();

render();

}

function changeStripes() {

// newSize();

newStripes();

newColours();

render();

}

function changeSize(size) {

dot = size;

render();

}

function changeRotation() {

rotation += Math.PI / 4;

render();

}

function changePalette() {

newPalette();

newColours();

render();

}

function render() {

con.log(palette, widths)

patternColoured = dom.canvas(size * dot, size * dot);

if (patternMonochrome) patternDetails.removeChild(patternMonochrome.canvas);

patternMonochrome = dom.canvas(size * dot, size * dot);

var colourMonochrome = [

["#666", "#aaa"],

["#333", "#888"]

];

for (var i = 0; i < widths.length - 1; i++) {

var x = widths[i];

var w = widths[i + 1] - x;

var colourColumn = palette[i];

var monoColumn = colourMonochrome[0][i % 2];

for (var j = 0; j < widths.length - 1; j++) {

var y = widths[j];

var h = widths[j + 1] - y;

var colourRow = palette[j];

var monoRow = colourMonochrome[1][j % 2];

for (var px = 0; px < w; px++) {

for (var py = 0; py < h; py++) {

patternColoured.ctx.fillStyle = (px + py) % 2 == 0 ? colourColumn : colourRow;

patternColoured.ctx.fillRect((x + px) * dot, (y + py) * dot, dot, dot);

patternMonochrome.ctx.fillStyle = (px + py) % 2 == 0 ? monoColumn : monoRow;

patternMonochrome.ctx.fillRect((x + px) * dot, (y + py) * dot, dot, dot);

}

}

}

}

patternDetails.appendChild(patternMonochrome.canvas);

ctx.save();

ctx.rect(0, 0, sw, sh);

ctx.rotate(rotation);

ctx.fillStyle = ctx.createPattern(patternColoured.canvas, "repeat");

ctx.fill();

ctx.restore();

}

var buttonsTop = dom.element("div", {

className: "buttons top"

});

container.appendChild(buttonsTop);

var buttonsBottom = dom.element("div", {

className: "buttons bottom"

});

container.appendChild(buttonsBottom);

var patternDetails = dom.element("div", {

className: "pattern"

});

container.appendChild(patternDetails);

patternDetails.addEventListener("click", changeStripes);

var buttonExport = dom.button("get css", {

className: "button export"

});

buttonExport.addEventListener("click", function(e) {

var img = patternColoured.canvas.toDataURL("image/jpeg");

if (preview === undefined) {

preview = dom.element("div", {

className: "preview"

});

var title = dom.element("div", {

className: "title",

innerHTML: "And the CSS..."

});

preview.appendChild(title);

var close = dom.button("close", {

className: "close"

});

close.addEventListener("click", function(e) {

container.removeChild(preview);

});

preview.appendChild(close);

preview.css = dom.element("div", {

className: "css"

});

preview.appendChild(preview.css);

}

container.appendChild(preview);

var r = "rotate(" + rotation + "rad)";

var cssArr = [

"background-image: url(" + img + ");",

"background-repeat: repeat;",

"-webkit-transform: " + r + ";",

"-moz-transform: " + r + ";",

"-ms-transform: " + r + ";",

"-o-transform: " + r + ";",

"transform: " + r + ";",

];

preview.css.innerHTML = cssArr.join("
"); // wrap?? #.match(/.{1,20}/g).join("
")

});

buttonsTop.appendChild(buttonExport);

function save(canvas) {

var dataURL = canvas.toDataURL("image/jpeg");

window.open(dataURL);

// not on my server you don't...

// $.ajax({

// type: "POST",

// url: "/php/save.php",

// data: {

// imgBase64: dataURL

// }

// }).done(function(o) {

// con.log('saved', o);

// });

}

// ok so window open is disabled... right.

/*

var buttonSaveOne = dom.button("pattern image", {className:"button save"});

buttonSaveOne.addEventListener("click", function(e) { save(patternColoured.canvas);});

buttonsTop.appendChild(buttonSaveOne);

var buttonSaveTiled = dom.button("tiled image", {className:"button save"});

buttonSaveTiled.addEventListener("click", function(e) { save(bmp.canvas);});

buttonsTop.appendChild(buttonSaveTiled);

*/

var sizes = [1, 2, 3, 4];

for (var s in sizes) {

var size = sizes[s];

var buttonSize = dom.button(size + "x", {

className: "button size",

size: size

});

buttonSize.addEventListener("click", function() {

changeSize(this.size);

});

buttonsBottom.appendChild(buttonSize);

}

var buttonRotation = dom.button("rotation", {

className: "button rotation"

});

buttonRotation.addEventListener("click", function() {

changeRotation();

});

buttonsBottom.appendChild(buttonRotation);

bmp.canvas.addEventListener("click", reset);

window.addEventListener("resize", function() {

bmp.canvas.width = sw = window.innerWidth;

bmp.canvas.height = sh = window.innerHeight;

container.setSize(sw, sh);

render();

});

reset();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值