html调节器,HTML5 六角形调节器

JavaScript

语言:

JaveScriptBabelCoffeeScript

确定

/* global document, console, window */

(function() {

'use strict';

var inputs = document.getElementsByTagName('input');

var varInput = document.querySelectorAll('[data-str]');

var style = document.getElementById('inline');

var permalink = document.getElementById('permalink');

var data = {

color: {

hex: '#9900ff',

alpha: 0.6

},

radius: {

h: 0,

v: 0,

linked: true,

unit: '%'

}

};

var updateData = function(inputArray, _id) {

inputArray = inputArray ? inputArray : varInput;

[].forEach.call(inputArray, function(_input) {

var _type = _input.type;

if ('radio' === _type && !_input.checked) {

return;

}

var pos = _input.getAttribute('data-str').split('.');

var val = ('checkbox' === _type) ? _input.checked : _input.value;

data[pos[0]][pos[1]] = val;

});

// if radius liined

if (/radius/.test(_id) && data.radius.linked) {

var linkedTargetId = ('radius-h' === _id) ? 'radius-v' : 'radius-h';

var linkedTarget = document.getElementById(linkedTargetId);

var changingItem = document.getElementById(_id);

linkedTarget.value = changingItem.value;

// update just another linked input value

updateData([linkedTarget]);

}

updateState();

};

var updateState = function() {

var dataExport = JSON.stringify(data);

history.pushState(null, null, location.href);

location.hash = 'go=' + dataExport;

permalink.href = location.origin + location.pathname + '#go=' + dataExport;

};

var hex2Dec = function(hex) {

return Number('0x' + hex.toString());

};

var rgba = function(hexColor, alpha) {

hexColor = hexColor.trim().substr(1);

alpha = (alpha !== undefined ? alpha : 1);

var step = (hexColor.length / 3);

var pattern = new RegExp('.{' + step + '}', 'g');

var colorString = hexColor.match(pattern);

var r, g, b;

r = hex2Dec(colorString[0]);

g = hex2Dec(colorString[1]);

b = hex2Dec(colorString[2]);

return 'rgba(' + [r, g, b, alpha].join(',') + ')';

};

var render = function() {

style.textContent = '.hexagon, .hexagon::before, .hexagon::after {color: ' + rgba(data.color.hex, data.color.alpha) + '; border-radius: ' + [data.radius.h, data.radius.unit, ' / ', data.radius.v, data.radius.unit].join('') + ';}';

style.className = '';

setTimeout(function() {

style.className = 'update';

}, 30);

};

var bindChange = function() {

[].forEach.call(varInput, function(_input) {

_input.addEventListener('change', function() {

renderWithUpdate(this.id);

});

});

// bind reset

document.getElementById('reset').addEventListener('click', function(e) {

setTimeout(renderWithUpdate, 50);

});

};

var renderWithUpdate = function(_id) {

updateData(false, _id);

render();

};

var init = (function() {

var dataImport = location.hash.split('#go=');

if (dataImport.length > 1) {

data = JSON.parse(dataImport[1]);

} else {

updateData();

}

render();

bindChange();

})();

})();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值