<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/ >
<title>Smoothed Radar Chart</title>
<!-- Google fonts -->
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,300" rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Raleway' rel='stylesheet' type='text/css'>
<!-- D3.js -->
<script src="https://d3js.org/d3.v4.min.js" charset="utf-8"></script>
<script src="https://d3js.org/d3-path.v1.min.js" charset="utf-8"></script>
<script src="radarChart.js" charset="utf-8"></script>
<style>
body {
font-family: 'Open Sans', sans-serif;
font-size: 11px;
font-weight: 300;
fill: #242424;
text-align: center;
text-shadow: 0 1px 0 #fff, 1px 0 0 #fff, -1px 0 0 #fff, 0 -1px 0 #fff;
cursor: default;
}
.legend {
font-family: 'Raleway', sans-serif;
fill: #333333;
}
</style>
</head>
<body>
<div class="radarChart" style="display: inline-flex;"></div>
<div class="radarChart2" style="display: inline-flex;"></div>
<script>
//////////////////////////////////////////////////////////////
//////////////////////// Set-Up //////////////////////////////
//////////////////////////////////////////////////////////////
var margin = { top: 50, right: 80, bottom: 50, left: 80 },
width = Math.min(700, window.innerWidth / 4) - margin.left - margin.right,
height = Math.min(width, window.innerHeight - margin.top - margin.bottom);
//////////////////////////////////////////////////////////////
////////////////////////// Data //////////////////////////////
//////////////////////////////////////////////////////////////
var data = [
{ name: 'Allocated budget',
axes: [
{axis: 'Sales', value: 42},
{axis: 'Marketing', value: 20},
{axis: 'Development', value: 60},
{axis: 'Customer Support', value: 26},
{axis: 'Information Technology', value: 35},
{axis: 'Administration', value: 20}
]
},
{ name: 'Actual Spending',
axes: [
{axis: 'Sales', value: 50},
{axis: 'Marketing', value: 45},
{axis: 'Development', value: 20},
{axis: 'Customer Support', value: 20},
{axis: 'Information Technology', value: 25},
{axis: 'Administration', value: 23}
]
}
];
//////////////////////////////////////////////////////////////
////// First example /////////////////////////////////////////
///// (not so much options) //////////////////////////////////
//////////////////////////////////////////////////////////////
var radarChartOptions = {
w: 290,
h: 350,
margin: margin,
levels: 5,
roundStrokes: true,
color: d3.scaleOrdinal().range(["#26AF32", "#762712"]),
format: '.0f'
};
// Draw the chart, get a reference the created svg element :
let svg_radar1 = RadarChart(".radarChart", data, radarChartOptions);
//////////////////////////////////////////////////////////////
///// Second example /////////////////////////////////////////
///// Chart legend, custom color, custom unit, etc. //////////
//////////////////////////////////////////////////////////////
var radarChartOptions2 = {
w: 290,
h: 350,
margin: margin,
maxValue: 60,
levels: 6,
roundStrokes: false,
color: d3.scaleOrdinal().range(["#AFC52F", "#ff6600"]),
format: '.0f',
legend: { title: 'Organization XYZ', translateX: 100, translateY: 40 },
unit: '$'
};
// Draw the chart, get a reference the created svg element :
let svg_radar2 = RadarChart(".radarChart2", data, radarChartOptions2);
</script>
</body>
</html>
const re = /jsInterface.event\("user=(\d+);level/;
let playerId;
const scripts = document.querySelectorAll('script');
for (let i = 0; i < scripts.length; i++) {
const match = scripts[i].innerText.match(re);
if (match) {
playerId = +match[1];
break;
}
}
console.log(playerId) // 4180878
как можно улучшить данный код
function anagrams(word, words) {
const sample = word.split('').sort().join('');
return words.filter(function (e) {
return e.split('').sort().join('') === sample;
})
}
function anagrams(word, words) {
const length = word.length;
const sample = word.split('').sort().join('');
return words.filter(w => w.length === length)
.filter(function (e) {
return e.split('').sort().join('') === sample;
})
}
// write the function isAnagram
var isAnagram = function(test, original) {
const length = original.length;
if (length !== test.length) return false;
const A = test.toLowerCase();
const B = original.toLowerCase();
const dict = {};
for (let i=0, char, pos; i < length; i++) {
char = A[i];
pos = B.indexOf(char, +dict[char]);
if (!~pos) return false;
dict[char] = pos + 1;
}
return true;
};
typeof
будет равен "function" и для Object, String, Date, например — что не входит в ваши планы.callback && callback();
Object.prototype.toString.call(callback) === '[object Function]'
и для вас можно так:callback && Object.prototype.toString.call(callback) === '[object Function]' && callback();
inBetween(3, 6)
возвращает не строку, не число, а функкцию. var daFunc = inBetween(3, 6); // daFunc это функция
arr.filter(daFunc);
var daFunc = function() {
console.log(arguments);
}
arr.filter(daFunc);
1«Почти» — потому, что контекст тут другой будет. Всякие a
и b
не будут определены.function daFunc() { console.log(arguments); }
arr.filter(daFunc);
arr.filter( function() { console.log(arguments); });
arguments
там никакой не внешний / родительский / фильтрованный, а свой собственный.ipinfo.io
предоставляет API, есть бесплатный план (до 50 тыс. запросов в месяц)$.get("https://ipinfo.io", function(response) {
console.log(response.ip, response.country);
}, "jsonp")
{
"ip": "134.209.xxx.xxx",
"city": "Clifton",
"region": "New Jersey",
"country": "US",
"loc": "40.8344,-74.1377",
"org": "AS14061 DigitalOcean, LLC",
"postal": "07014",
"timezone": "America/New_York",
"readme": "https://ipinfo.io/missingauth"
}
var
переменная i
в любых вызовах навешанных функций имеет последнее своё значение из цикла, равное длине experimentElem
.var
на let
:for (let i = 0; i < experimentElem.length; i++) {
[...experimentElem].forEach((el, i) => {
el.addEventListener('mouseenter', event => gifElem[i].play());
el.addEventListener('mouseleave', event => gifElem[i].pause());
})
&code=xxxxx
, который уже мой сервер обменивает напрямую с соц.сетью на токен.postMessage()
в родительское окно с основным приложением – сообщит о результате: получено разрешение или пользователь что-то накосячил или передумал;.food-item-*
(может, у них у всех есть какой-то общий класс?) или document.querySelectorAll('[class^=.food-item-]')
.food-item-NNN-bin
(регуляркой) и выдирать оттуда число.Progressive Advancement has won the game for now as far as I can see. If UI/UX designers start a product design with its desktop version, they will inevitably want to make use of most of the advantages of the advanced end. For example, the hover effect which is supported by a cursor mouse; HD images & complex charts which can display normally only when there is a recent bandwidth. In this way, the designers will make efforts to complete an amazing desktop version and only to find it can hardly be adopted on a mobile end unless they give up a lot of beautiful ideas. If so, the mobile end version will be more like an afterthought, an incomplete product which’s been watered down.
active
для единственного выбранного элемента:div.answer { background: #222; color: #aeaeae; }
div.answer.active { background: #fff; color: #000; }
const els = [...document.querySelectorAll('.answer')];
const toggle = event => {
els.forEach(el => el.classList[event.target === el ? 'add' : 'remove']('active'));
}
els.forEach(el => el.addEventListener('click', toggle));
var a = getRectArea( 3, 4 );
a
окажется значение, которое функция вернула – то, что после "return" в ней оказалось. В вашем примере это 3 * 4, т.е. число 12. Ура, в переменной a
теперь лежит число 12
function test() {
return;
alert('Привет мир!'); // эта строка никогда не выполнится
}
gtag()
с искомым событием. И там же дописать ваш alert()
gtag()
свою функцию, например, mytag()
которая, в свою очередь, станет вызывать gtag()
и может, другие скрипты аналитики.gtag()
В таком случае остаётся заменить функцию gtag()
на свою: function gtag(){
dataLayer.push(arguments); // это весь исходный её функционал
if (arguments.length > 1
&& typeof arguments[0] === 'string'
&& arguments[0].toLowerString() === 'event'
&& typeof arguments[1] === 'string'
&& arguments[1] === 'name1'
)
{
alert("Name 1!");
}
}
position
– где-то далеко слева, его не видно, а значение position
отрицательное. Ноль соответствует точно левому краю, началу видимой «платформы».prev
– толпа смайликов едет вправо, её position
увеличивается. Но при этом последний вагон не должен уехать правее левого края платформы. Поэтому position
(обычно отрицательный) делается равным наибольшему из двух: 0
или вычисленному значению. Если «уехали», position
получился положительным. И Math.min(0, position)
станет равным 0
.position
не должен становиться левее == меньше, чем минус-длина поезда плюс длина платформы.