<input type="file" id="inputfile" accept=".txt">
<textarea id="output"></textarea>
inputfile.addEventListener('change', function() {
var file = this.files[0],
reader = new FileReader;
reader.onloadend = function(evt) {
output.value = reader.result;
};
reader.readAsText(file);
}, false);
xhr = new XMLHttpRequest;
xhr.open('GET', '/files/foo.txt', true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
xhr.onreadystatechange = null;
if (xhr.status == 200) {
output.value = xhr.responseText;
}
}
};
xhr.send(null);
var point1 = document.getElementById('a'),
point2 = document.getElementById('b'),
line = document.getElementById('c');
document.addEventListener('click', function() {
var x1 = point1.offsetLeft,
y1 = point1.offsetTop,
x2 = point2.offsetLeft,
y2 = point2.offsetTop,
width = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)),
angle = Math.atan2(y1 - y2, x1 - x2) / Math.PI * 180;
angle = (angle < 0) ? angle + 360 : angle;
line.style.cssText = 'transform: rotate(' + angle + 'deg); top: ' + (y2 + 25) + 'px; left: ' + (x2 + 25) + 'px; width: ' + width + 'px';
});
var htmlString = `
<div id="wrapper">
<div class="div">Div 1</div>
<div class="div">Div 2</div>
<div class="div">Div 3</div>
<p class="paragraph">P 1</p>
<p class="paragraph">P 2</p>
<p class="paragraph">P 3</p>
</div>
`;
// Вариант 1
var parser = new DOMParser(),
doc = parser.parseFromString(htmlString, 'text/html');
[].forEach.call(doc.querySelectorAll('body *'), function(el){
console.log(el);
});
// Вариант 2
var tmp = document.createElement('div');
tmp.innerHTML = htmlString;
[].forEach.call(tmp.querySelectorAll('*'), function(el){
console.log(el);
});
это я к тому, что аккордеон вроде не подходитПодходит
$('dt').click(function() {
$(this).next().slideToggle( "slow" );
});
.scroll-left {
overflow-x: scroll;
width: 100vw;
}
document.querySelector('bottom').addEventListener('click',function(){
document.querySelector('div').classList.toggle('scroll-left');
// или .classList.add('scroll-left'); для разовой операции
}, false);
$(document).ready(function() {
$('.photo li').waitForImages(function() {
$(this)[$(this).length ? 'show' : 'remove']();
});
});
но тут надо видеть функцию waitForImages, чтобы быть уверенным, что это будет работать. А пока меня грызут сомнения, т.к. метод применяется не к изображению, а к элементу LI. Если внутри callback-функции this ссылается на него, то всегда будет отрабатывать show()$(function(){
$('.photo li').waitForImages({
each: function(loaded, count, success) {
$(this)[success ? 'show' : 'remove']();
},
waitForAll: true
});
});
document.addEventListener('DOMContentLoaded', function() {
var li = document.querySelectorAll('li');
li[Math.floor(Math.random() * li.length)].style.display = 'list-item';
}, false);
$(function() {
var li = $('li');
li.eq(Math.floor(Math.random() * li.length)).show();
});
if (данные счетчика хранятся в БД || файле ) {
отправляем ajax-запрос || обычный запрос на сервер;
увеличиваем значение на 1 в хранилище;
} elseif (счетчик для каждого клиента свой && данные необходимо хранить на клиенте) {
используем localStorage/sessionStorage || cookie;
} else {
// а тут бы неплохо уточнить, что и как у вас построено
}
Если же техническая сторона вопроса, то рассказывайте, что не получается if (window.matchMedia('(min-width: 1200px)').matches) {
$(window).scroll(function(){
/* ... */
}
}
var img = [].slice.call(document.querySelectorAll('.card__heading-img img'));
document.querySelector('.btn').addEventListener('click', function(e) {
e.preventDefault();
var curImg = img.filter(function(el) {
return el.classList.contains('active');
})[0],
curIndx = img.indexOf(curImg),
nextIndx = curIndx + 1 >= img.length ? 0 : curIndx + 1;
curImg.classList.remove('active');
img[nextIndx].classList.add('active');
}, false);
var textarea = [].slice.call(document.querySelectorAll('textarea'));
[].forEach.call(document.querySelectorAll('[type=radio]'), function(el, i) {
(function(index) {
textarea[index].style.display = el.checked ? 'inline' : 'none';
el.addEventListener('change', function() {
textarea.forEach(function(ta, i) {
ta.style.display = i === index ? 'inline' : 'none';
});
});
}(i));
});
<input type="radio" name="group">
<textarea placeholder="Окно ввода для первой radio кнопки"></textarea>
<input type="radio" name="group">
<textarea placeholder="Окно ввода для второй radio кнопки"></textarea>
textarea {
display: none;
}
[type=radio] {
float: left;
}
[type=radio]:checked + textarea {
display: inline;
}
var markerPos = $('#marker').offset().top,
output = $('output');
$(window).on('scroll', function() {
output.text($(this).scrollTop() >= markerPos ? $(this).scrollTop() - markerPos : 0);
});