Делаю игрушку на js возникла проблема. Блоки на css и они должны чередоваться, вопрос как поставить переменную в стиль чтобы генерировать блоки и с помощью функции setinterval проводить их по одной линии. Подскажите кто нибудь как сделать блоки для препятствий уникальными чтобы они не мигали и в css стиле прокатывали по линии с уникальным id или может есть еще какое нибудь решение на javascript? https://amir248.github.io/cockerel/ Всем заранее Большое спасибо! И как в сбербанке больше чем спасибо!
<html>
<meta charset="utf-8">
<title>Game cockerel</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
* {
padding: 0;
margin: 0;
}
#line {
width: 100%;
height: 100%;
display: flex;
}
#line1 {
width: 25%;
height: 100%;
background-color: rgb(201, 230, 185);
flex-flow: row;
}
#line2 {
width: 25%;
height: 100%;
background-color: rgb(201, 230, 185);
}
#line3 {
width: 25%;
height: 100%;
background-color: rgb(201, 230, 185);
flex-flow: row;
}
#line4 {
width: 25%;
height: 100%;
background-color: rgb(201, 230, 185);
}
#line5 {
width: 25%;
height: 100%;
background-color: rgb(201, 230, 185);
flex-flow: row;
}
#line6 {
width: 25%;
height: 100%;
background-color: rgb(201, 230, 185);
}
.pic_push_down {
display: block;
position: relative;
max-width: 100%;
max-height: 100%;
margin-left: 25%;
margin-Right: 50%;
top: 77%;
}
#side {
background-color: azure;
width: 70%;
}
button {
background-color: red;
border: 10px;
width: 50px;
height: 75px;
}
.info {
display: block;
position: absolute;
text-align: center;
margin-left: 50%;
margin-right: 50%;
top: 5%;
}
.hedge_stone1, .hedge_stone6, .hedge_stone2, .hedge_stone3, .hedge_stone4, .hedge_stone5 {
position: absolute;
margin-left: 5px;
width: 50px;
height: 50px;
top: -50px;
background-color: brown;
}
</style>
<body>
<div id="line">
<div id="line1">
<p class="pic_push_down" id='pic1'></p>
<p class="hedge_stone1"></p>
</div>
<div id="line2">
<p class="pic_push_down line2" id='pic2'></p>
<p class="hedge_stone2"></p>
</div>
<div id="line3">
<p class="pic_push_down" id='pic3'></p>
<p class='hedge_stone3'></p>
</div>
<div id="line4">
<p class="pic_push_down" id='pic4'></p>
<p class='hedge_stone4'></p>
</div>
<div id="line5">
<p class="pic_push_down" id='pic5'></p>
<p class='hedge_stone5'></p>
</div>
<div id="line6">
<p class="pic_push_down" id='pic6'></p>
<p class="hedge_stone6"></p>
</div>
<div id="side">
<div align="center">
<br>
<button onClick="left_button()">
<=</button> <button onClick="right_button()">=>
</button>
<br>
</div>
</div>
</div>
<div class="info">тут инфо</div>
<style>
.alert {
padding: 15px;
border: 1px solid #d6e9c6;
border-radius: 4px;
color: #3c763d;
background-color: #dff0d8;
}
</style>
<script>
/* еще не понятно для чего это но может пригодиться. */
let div = document.createElement('div');
div.className = "alert";
div.innerHTML = "<strong>Всем привет!</strong> Вы прочитали важное сообщение.";
document.body.append(div);
</script>
<script>
/* нужно создать цсс стиль чтобы динамически генирировать новые блоки */
/*let style = document.createElement('rande_hedge_stone');
style.type= 'text/css';
style.innerHTML = '.cssClass { color: #F00; }';
document.getElementsByTagName('head')[0].appendChild(style);
document.getElementById('someElementId').className = 'cssClass';*/
/* ----------------------------------------
Большой скрипт с препятствиями и временем
-------------------------------------------*/
for(y = 0; y <25; y++); // для будущего переменная в начале док
setInterval(randomBlock, 1000);
function randomBlock(){
/* if(stone.style.display = "none"){
stone.style.diplay = 'block';
} */ // это условие тут не работает но суть ясна! Его надо сделать.
let rand7 = Math.random().toFixed(1);
let number;
if(rand7<=0.2){
number = 6;
}else if(rand7>=0.2&&rand7<=0.3){
number = 5;
}else if(rand7>=0.4&&rand7<=0.5){
number = 4;
}else if(rand7>0.5&&rand7<=0.6){
number = 3;
}else if(rand7>0.6&&rand7<=0.8){
number = 2;
}else if(rand7>0.8){
number = 1;
}else{
console.log('что то пошло не так.');
}
console.log(rand7);
console.log(number);
let stone = document.querySelector('.hedge_stone'+[number]);
let distance_window = document.documentElement.clientHeight;/*Тут была какаето задумка, но сейчас это пустует.*/
let distance_stone =0;
function peremeshenie() {
stone.style.top = distance_stone;
if (distance_stone < window.innerHeight -50) { /* innerWidth - окно экрана в высоту*/
distance_stone = distance_stone + 1;
}
if(distance_stone>window.innerHeight-51){
stone.style.display ='none';
}
}
setInterval(peremeshenie, 20);
}
// -----------------------------------
//-----переменные для управления-----
//-----------------------------------
var rightPressed = false;
var leftPressed = false;
var jumpPressed = false;
var upPressed = false;
var downPressed = false;
// ------------------------------------
/* скрипт тут ля управления перемещениями с клавиатура */
document.addEventListener('keydown', keyDownHangler, false);
function keyDownHangler(e) {
if (e.key == "f") {
right_button();
} else if (e.key == "s") {
left_button();
} else {
return;
}
}
if (keyDown = 'KeyF') {
right_button();
}
if (right_button) {
left_button();
}
document.onkeypress = function (event) {
console.log(event);
}
var i = 3;
var pic = document.getElementById('pic' + i).innerHTML = '<img id="cockerel.png" src="https://i.ibb.co/Gnk5Ln3/cockerel.png" alt="cockerel" border="0" width="50px">';
function left_button() {
if (i > 1) {
i = i - 1;
document.querySelector('#pic' + i).innerHTML = '<img id="cockerel.png" src="https://i.ibb.co/Gnk5Ln3/cockerel.png" alt="cockerel" border="0" width="50px">';
document.querySelector('#pic' + (i + 1)).innerHTML = ' ';
console.log(i);
} else if (i <= 1) {
return;
}
}
function right_button() {
if (i < 6) {
i++;
document.querySelector('#pic' + i).innerHTML = '<img id="cockerel.png" src="https://i.ibb.co/Gnk5Ln3/cockerel.png" alt="cockerel" border="0" width="50px">';
document.querySelector('#pic' + (i - 1)).innerHTML = '';
console.log(i);
}
else if (i >= 6) {
return;
}
}
</script>>
</body>
</html>
У вас сейчас происходит мигание, поскольку вы не создаете новый элемент, а берете старый и вешаете на него еще один таймер перемещения с другими координатами. Вот и выходит, что два таймера пытаются одновременно поставить блок в разные места, что порождает мигание. В принципе, достаточно было бы создать новый блок внутри randomBlock()
и проблема бы исчезла.
Ну или лучше просто переделать так, чтобы блоки нормально создавались и не зависели от стилей.
<html>
<meta charset="utf-8">
<title>Game cockerel</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
* {
padding: 0;
margin: 0;
}
.flex {
width: 100%;
height: 100%;
display: flex;
}
.row {
width: 25%;
height: 100%;
background-color: rgb(201, 230, 185);
flex-flow: row;
}
.hedge_stone {
position: absolute;
margin-left: 5px;
width: 50px;
height: 50px;
top: -50px;
background-color: brown;
}
</style>
<body>
<div class="flex">
<div class="row"> </div>
<div class="row"> </div>
<div class="row"> </div>
<div class="row"> </div>
<div class="row"> </div>
<div class="row"> </div>
</div>
<script>
let interval = setInterval(() => {
addBlock();
}, 1000);
function addBlock() {
let line = document.getElementsByClassName("row")[Math.floor(Math.random() * 6)];
let block = document.createElement("p");
block.classList.add("hedge_stone");
line.appendChild(block);
let distance_stone = 0;
let interval = setInterval(peremeshenie, 20);
function peremeshenie() {
block.style.top = distance_stone;
if (distance_stone < window.innerHeight - 50) { /* innerWidth - окно экрана в высоту*/
distance_stone = distance_stone + 1;
}
if (distance_stone > window.innerHeight - 51) {
block.style.display = 'none';
line.removeChild(block);
window.clearInterval(interval);
}
}
}
</script>
</body>
</html>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Помогите решить проблемуМне нужно присвоить высоту контейнера внутри активного дочернего элемента родителю при помощи jQuery
Необходимо при двойном клике получить доступ к DOM вкладки и нарисовать в определённом месте всплывающее окно