Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.08.2017, 16:12
Аватар для void()
Профессор
Отправить личное сообщение для void() Посмотреть профиль Найти все сообщения от void()
 
Регистрация: 11.08.2017
Сообщений: 208

Как сделать наезжающие друг на друга блоки
Всем привет.
Я новичок, пытаюсь написать карточную игру на js. Игра почти готова, но что-то я сильно туплю на, казалось бы, самом простом.

Мой вопрос: как сделать так, чтобы карты в "магазине" у бота или юзера динамически наезжали друг на друга.

Сейчас у меня карты отображаются просто одна за другой в ряд (это просто картинки img, которые динамически создаются js). И если игрок много "взял", то они не помещаются и переносятся на другую строку. Что вполне естественно, но как этого можно избежать? Чтобы наглядно показать чего я пытаюсь добиться, прикреплю картинку.



Представьте, сначала раздали 7 карт. Затем, по мере игры, если карт у юзера становится больше, они наезжают друг на друга как на картинке. Как это можно сделать?

Последний раз редактировалось void(), 21.08.2017 в 16:15.
Ответить с цитированием
  #2 (permalink)  
Старый 21.08.2017, 16:42
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от void()
если игрок много "взял", то они не помещаются и переносятся на другую строку. Что вполне естественно, но как этого можно избежать?
Если карты размещать в ДИВе с position отличным от static, можно применять абсолютное позиционирование
pisition: absolute;
Ответить с цитированием
  #3 (permalink)  
Старый 21.08.2017, 17:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072


margin-right???
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
    .hot{
         border: 1px dashed Gray; padding: 5px; height: 200px; width: 100px;
         border-radius: 8px;
         margin-right: -75px;
         background-color: #FFFFFF;
    }
    .hot:before{
       content: "♠";
        color: #FF0000;
    }

    .slider{
       display: flex;
       width: 500px;

    }

  </style>



</head>

<body>
<div class="slider">
 <div class="hot"></div>
  <div class="hot"></div>
  <div class="hot"></div>
  <div class="hot"></div>
  <div class="hot"></div>
  <div class="hot"></div>
  <div class="hot"></div>
  <div class="hot"></div>
  <div class="hot"></div>
  <div class="hot"></div>
  <div class="hot"></div>
 </div>
</body>
</html>

Последний раз редактировалось рони, 22.08.2017 в 00:11.
Ответить с цитированием
  #4 (permalink)  
Старый 21.08.2017, 23:59
Аватар для void()
Профессор
Отправить личное сообщение для void() Посмотреть профиль Найти все сообщения от void()
 
Регистрация: 11.08.2017
Сообщений: 208

Спасибо! Все прояснилось)
Изначально зациклился, что есть какой-то нативный способ. Чтобы блоки сами наезжали друг на друга равномерно, когда они не помещаются в строку полностью. А на самом деле решение в том, чтобы задавать дискретные изменения вручную.

Допустим, сделать 3 точки перехода:

1. Если блоков > 12;
2. Если блоков > 20;
3. Если блоков > 30

А дальше или по методу ksa. Можно обходить блоки циклом как массив и позиционировать.
Или по методу рони задавать отрицательный маржин (-30, -50, -70).

Последний раз редактировалось void(), 22.08.2017 в 00:07.
Ответить с цитированием
  #5 (permalink)  
Старый 22.08.2017, 01:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

void(),
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
    *{
      margin: 0;
      padding: 0;
    }

    .hot{
         border: 1px dashed Gray; height: 200px; width: 100px;
         border-radius: 8px;
         background-color: #FFFFFF;
         flex-shrink: 0;
    }
    .hot:before{
       content: "♠";
       color: #FF0000;
    }

    .slider{
       display: flex;
       width: 98%;
       justify-content: flex-start;

    }

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
var n = 1+ Math.random()*36|0;
var m = 100 - ($('.slider').width()-175)/(n-1);
m < 0 && (m = -5);
m > 100 && (m = 95);
for (var i=0; i<n; i++)  {
$('<div class="hot">'+i+'</div>').appendTo('.slider').css({'margin-right': -m +"px"})}


});
  </script>

  </script>
</head>

<body>
<div class="slider">
</div>
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 22.08.2017, 12:48
Аватар для void()
Профессор
Отправить личное сообщение для void() Посмотреть профиль Найти все сообщения от void()
 
Регистрация: 11.08.2017
Сообщений: 208

wow! Ваше решение самое гениальное в своей простоте и эффективности. Спасибо большое!
Ответить с цитированием
  #7 (permalink)  
Старый 22.08.2017, 12:53
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,730

Сообщение от рони
m < 0 && (m = -5);
m > 100 && (m = 95);
Это же тоже самое, что и это:
if(m<0) m=-5;
if(m>100) m=95;

Или я чего-то не знаю?
Ответить с цитированием
  #8 (permalink)  
Старый 22.08.2017, 13:16
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Nexus
Это же тоже самое
Да.
Это джедай стайл...
Ответить с цитированием
  #9 (permalink)  
Старый 22.08.2017, 13:49
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,730

Сообщение от ksa
Это джедай стайл...
Интересный, конечно, способ стайл, но ну его нафиг.
Не сразу можно понять какого фига условие посреди строки и вне оператора if)
Ответить с цитированием
  #10 (permalink)  
Старый 22.08.2017, 14:01
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Nexus
Не сразу можно понять
Во многих языках программирования встречаются, не понятные сразу, но стандартные в последствии приемы...

Например в JS помимо этого используется еще такой прием для присваивания значения
function test(Prm){
	Prm = Prm || 0;
	alert(Prm);
}
test();


И если в конторе приняты такие стайлы, новички об этом узнают и потом используют дальше. Т.е. это становится некой нормой.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие div блока при первом визите на сайт Nushaba Общие вопросы Javascript 28 20.12.2013 21:24
Не понимаю JavaScript. Как сделать ожидание события загрузки данных? xintrea AJAX и COMET 7 01.06.2013 17:18
Как убрать hover? Либо как сделать стрелки статичными? krusty36 Элементы интерфейса 1 13.07.2011 09:20
Как сделать таймер как в САР? jelome Элементы интерфейса 0 27.06.2011 12:40
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 09:06