Верстаем основу карточной сцены
Сегодня мы набросаем основную нашу верстку, скелет можно сказать, карточный стол. И научимся отправлять карты в нужное место на столе. Вот примерно что-то такое у нас получится в итоге:
С чего вообще начинается любая верстка? Как правило, с разбиения страницы на блоки. Сначала один большой (wrapper), потом поменьше (шапка, подвал), потом еще и еще меньше. Давайте и нашу игровую сцену также разобьем.
Все вместе – это будет игровая сцена, элемент scene. В нем будет выделяться 5 крупных элементов – это стол и четыре руки (игрока, их может быть меньше, но я решил пока сделать так). Можно все эти пять элементов расположить отдельно, но я решил сделать три столбца (слева направо):
- игрок слева
- игрок сверху, стол, игрок снизу
- игрок справа
В блоках hand мы расположим для начала 6 карт, на столе – колоду и 12 мест. Все карты сделаем тегами img и сдвинем слева направо, а на столе сверху вниз.
Вот готовая верстка
<div id="scene"> <div class="scene_col"> <div id="hand2" class="hand"> <img class="pos_card" id="card7" src="img/0.jpg" /> <img class="pos_card" id="card8" src="img/0.jpg" /> <img class="pos_card" id="card9" src="img/0.jpg" /> <img class="pos_card" id="card10" src="img/0.jpg" /> <img class="pos_card" id="card11" src="img/0.jpg" /> <img class="pos_card" id="card12" src="img/0.jpg" /> </div> </div> <div class="scene_col"> <div id="hand3" class="hand"> <img class="pos_card" id="card13" src="img/0.jpg" /> <img class="pos_card" id="card14" src="img/0.jpg" /> <img class="pos_card" id="card15" src="img/0.jpg" /> <img class="pos_card" id="card16" src="img/0.jpg" /> <img class="pos_card" id="card17" src="img/0.jpg" /> <img class="pos_card" id="card18" src="img/0.jpg" /> </div> <div id="table"> <div id="deck"> <img class="deck_pos" id="card25" src="img/card_back.png" /> </div> <div id="area"> <div class="tab_pos" id="tab_pos_1"></div> <div class="tab_pos" id="tab_pos_2"></div> <div class="tab_pos" id="tab_pos_3"></div> <div class="tab_pos" id="tab_pos_4"></div> <div class="tab_pos" id="tab_pos_5"></div> <div class="tab_pos" id="tab_pos_6"></div> <div class="tab_pos" id="tab_pos_7"></div> <div class="tab_pos" id="tab_pos_8"></div> <div class="tab_pos" id="tab_pos_9"></div> <div class="tab_pos" id="tab_pos_10"></div> <div class="tab_pos" id="tab_pos_11"></div> <div class="tab_pos" id="tab_pos_12"></div> </div> </div> <div id="hand1" class="hand"> <img class="pos_card" id="card1" src="img/0.jpg" /> <img class="pos_card" id="card2" src="img/0.jpg" /> <img class="pos_card" id="card3" src="img/0.jpg" /> <img class="pos_card" id="card4" src="img/0.jpg" /> <img class="pos_card" id="card5" src="img/0.jpg" /> <img class="pos_card" id="card6" src="img/0.jpg" /> </div> </div> <div class="scene_col" class="hand"> <div id="hand4"> <img class="pos_card" id="car19" src="img/0.jpg" /> <img class="pos_card" id="card20" src="img/0.jpg" /> <img class="pos_card" id="card21" src="img/0.jpg" /> <img class="pos_card" id="card22" src="img/0.jpg" /> <img class="pos_card" id="card23" src="img/0.jpg" /> <img class="pos_card" id="card24" src="img/0.jpg" /> </div> </div> </div> <br> <button id="str">Старт</button>Стили
<style> #scene{ height: 600px; display: flex; justify-content: center; align-items: center; background-image: url(img/fon_table_1.png); } .pos_card{ margin-left: -50px !important; } .hand{ margin-left: 50px; text-align: center; } #table{ height: 300px; display: flex; justify-content: start; width: 550px; align-items: center; padding: 10px; } .deck_pos, .tab_pos{ width: 71px; height: 96px; } .tab_pos{ background: black; border: 2px solid white; margin-top: -50px; } #area{ display: flex; width: 450px; height: auto; flex-wrap: wrap; margin-left: 10px; } </style>Теперь давайте усовершенствуем движение карты. В прошлый раз что мы делали? Просто вверх на 100 пикселей двигали. А теперь надо в одно из мест на столе. Это несложно: сначала получаем координаты двигаемой карты и конечного места, а затем рассчитываем смещения по горизонтали и вертикали.
function startAnimation(start, end) { // Получаем элементы let box1 = document.getElementById(start); let box2 = document.getElementById(end); // Получаем текущие позиции элементов let rect1 = box1.getBoundingClientRect(); let rect2 = box2.getBoundingClientRect(); // Вычисляем смещения let translateX = rect2.left - rect1.left; let translateY = rect2.top - rect1.top; anime({ targets: '#'+start, translateX: translateX, translateY: translateY, duration: 1000, easing: 'linear' }); }И запускаем функцию. Сразу и через секунду для другой карты.
jQuery("#str").on('click', function() { startAnimation('card3', 'tab_pos_1'); setTimeout(() => { startAnimation('card12', 'tab_pos_7'); }, 1000); });Вот как это выглядит в реальности
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.