You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.7 KiB
85 lines
1.7 KiB
var next = (function () {
|
|
var which = 0;
|
|
return function () {
|
|
return {
|
|
prev: which,
|
|
next: which = (which + 1) % 2
|
|
};
|
|
};
|
|
}());
|
|
|
|
// Hook and debounce input event
|
|
function onChange($el, cb) {
|
|
var last = $el.val();
|
|
$el.on('input', function () {
|
|
var val = $el.val();
|
|
var oldVal;
|
|
if (last !== val) {
|
|
oldVal = last;
|
|
last = val;
|
|
typeof cb === 'function' && cb.call($el, val, oldVal);
|
|
}
|
|
});
|
|
|
|
return {
|
|
trigger: function () {
|
|
typeof cb === 'function' && cb.call($el, $el.val(), last);
|
|
}
|
|
};
|
|
}
|
|
|
|
var fadeOptions = {
|
|
duration: 100,
|
|
queue: false
|
|
};
|
|
|
|
var canvas = document.createElement('canvas');
|
|
var saveButton = document.getElementById('save');
|
|
|
|
function prepareDownload(string, pattern) {
|
|
if (!canvas) {
|
|
canvas = document.createElement('canvas');
|
|
}
|
|
|
|
var ctx = canvas.getContext('2d');
|
|
var img = new Image();
|
|
|
|
img.onload = function() {
|
|
canvas.width = this.width;
|
|
canvas.height = this.height;
|
|
ctx.drawImage(img, 0, 0);
|
|
saveButton.download = string + '.png';
|
|
try {
|
|
saveButton.href = canvas.toDataURL('image/png');
|
|
} catch (err) {
|
|
// The above is a security error in IE, so hide the save button
|
|
saveButton.style.display = 'none';
|
|
}
|
|
};
|
|
|
|
img.src = pattern.toDataUri();
|
|
}
|
|
|
|
var changeEvent = onChange($('#string'), function (val) {
|
|
var pattern = GeoPattern.generate(val);
|
|
|
|
var bg = next();
|
|
$('#bg-' + bg.next)
|
|
.css('background-image', pattern.toDataUrl())
|
|
.stop()
|
|
.fadeIn(fadeOptions);
|
|
$('#bg-' + bg.prev)
|
|
.stop()
|
|
.fadeOut(fadeOptions);
|
|
|
|
prepareDownload(val, pattern);
|
|
});
|
|
|
|
// Some browsers persist field values between refresh
|
|
$(function () {
|
|
$('#string')
|
|
.val(' 请键入内容 ')
|
|
.focus();
|
|
changeEvent.trigger();
|
|
});
|