class App extends React.Component {
state = {
divStyle: {
display: 'flex',
alignItems: 'center',
width: '1000px',
height: '500px',
outline: '1px solid red',
position: 'relative',
},
move: {
position: 'absolute',
width: '200px',
height: '100px',
outline: '1px solid green',
left: 100,
top: 200,
},
}
handlerMouseDown = e => {
this.deltaX = e.pageX - this.ourdiv.offsetLeft;
this.deltaY = e.pageY - this.ourdiv.offsetTop;
window.addEventListener('mousemove', this.handlerMouseMove);
}
handlerMouseUp = e => {
window.removeEventListener('mousemove', this.handlerMouseMove);
}
handlerMouseMove = ({ pageX }) => {
this.setState(({ move }) => ({
move: {
...move,
left: Math.min(700, Math.max(100, pageX - this.deltaX)),
},
}));
}
render() {
return (
<div>
<div style={this.state.divStyle}>
<div
ref={ourdiv => this.ourdiv = ourdiv}
style={this.state.move}
onMouseDown={this.handlerMouseDown}
onMouseUp={this.handlerMouseUp}
></div>
</div>
</div>
);
}
}
<div class="map" id="map"></div>
<script src="https://maps.googleapis.com/maps/api/js"></script>html, body {
padding: 0;
margin: 0;
}
.map {
position: absolute;
width: 100%;
height: 100%;
}let iconIndex = -1;
const icons = [
'http://icons.iconarchive.com/icons/icons-land/vista-map-markers/64/Map-Marker-Marker-Outside-Chartreuse-icon.png',
'http://icons.iconarchive.com/icons/icons-land/vista-map-markers/64/Map-Marker-Marker-Outside-Azure-icon.png',
'http://icons.iconarchive.com/icons/icons-land/vista-map-markers/64/Map-Marker-Marker-Outside-Pink-icon.png'
];
google.maps.event.addDomListener(window, 'load', function() {
const latlng = { lat: -25.363, lng: 131.044 };
const map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: latlng,
});
const marker = new google.maps.Marker({
position: latlng,
map,
});
google.maps.event.addListener(marker, 'click', function() {
iconIndex = (iconIndex + 1) % icons.length;
marker.setIcon(icons[iconIndex]);
});
});
const $wrapper = $('.wrapper');
$wrapper
.children()
.sort((a, b) => $('p', a).text() - $('p', b).text())
.appendTo($wrapper);const wrapper = document.querySelector('.wrapper');
wrapper.append(...Array
.from(wrapper.children, n => [ n, +n.querySelector('p').innerText ])
.sort((a, b) => a[1] - b[1])
.map(n => n[0])
);
g:Vue.filter('lhprob', val => val && val.toString().replace(/ /g, 'GG'));[Vue warn]: Failed to resolve filter.
Object.keys(notif).map(key => <div key={key}>{key} - {notif[key]}</div>)_.map(notif, (value, key) => <div key={key}>{key} - {value}</div>)
document.querySelector('input').addEventListener('input', function() {
this.value = this.value.toUpperCase();
});text-transform: uppercase; - не подходит, так как влияет только на отображения, не меняя сами данные
.toUpperCase() при получении значения input'а.
get () { this.$store.getters['newRequest/selectedCreditStatus'] }
Замечу, что, не хотелось бы отказываться от геттеров и сеттеров в пользу всяких data () {} и methods: {}. Уже делал в таком варианте и получилось довольно громоздко и некрасиво.
v-model? - это привязка значения + прослушивание события. Т.е.,:value="геттер" + @input="мутация($event.target.value)"
Vue использует алгоритм, минимизирующий перемещение элементов
Vue изменяет порядок следования элементов, основываясь на изменении порядка ключей
const arr = str.split(' ').map(n => isNaN(n) ? n : +n);
const tableSelector = 'таблица ваша, так что вам и виднее, какой у неё селектор';
const text = 'Материал';$(`${tableSelector} tbody tr:contains(${text})`).hide();for (const { rows } of document.querySelector(tableSelector).tBodies) {
for (const tr of rows) {
for (const td of tr.cells) {
if (td.innerText.includes(text)) {
tr.style.display = 'none';
break;
}
}
}
}.hidden {
display: none;
}document.querySelectorAll(`${tableSelector} tbody tr`).forEach(tr => {
tr.classList.toggle('hidden', ~tr.textContent.indexOf(text));
});