2013-12-04 3 views
0

Итак, у меня есть элемент холста HTML 5 поверх моего сайта, чтобы наложить эффект снега.HTML 5 Canvas, взаимодействовать с тегами HTML за ним?

Я использую этот CSS, чтобы получить эффект снега на вершине остальной части сайта:

#snow { 
    width: 100%; 
    position: absolute; 
    top: 0; 
    left: 0; 
    pointer-events: none; 
} 

То, что я хотел бы сделать, это получить снег, взаимодействующий с элементами на странице. например Если он попадет в тег <p>, он остановится. Таким образом, снег постепенно набирает элементы на странице.

Как бы я это сделал? Как вы получаете расположение элементов на другом уровне с помощью Javascript?

+0

Снег в верхней части сайта planetminecraft имеет форму логотипа, специально закодированного таким образом, что снег избегает его, он не взаимодействует с элементами. – Xymostech

+0

@ Xymostech Хорошо, спасибо за информацию. – Simo389

ответ

1

Принцип довольно прямолинейный.

  • Соберите элементы, которые вы хотите, чтобы взаимодействовать с
  • Извлечение клиент-прямоугольник каждого, который представляет абсолютное положение каждого элемента
  • Update на свитке и т.д.

DEMO

В эта демонстрация красных квадратов, представляющих элементы DOM, нарисованы на холсте, а не на CSS. Это демонстрирует принцип. Что вы можете сделать с кодом, так это использовать эти прямоугольники в качестве объектов столкновения вместо снега.

Получить элементы, которые мы хотим взаимодействовать с:

var elements = document.querySelectorAll('p'); /// all "P" elements 

Теперь итерацию коллекции и получить абсолютную граничную прямоугольник из каждого:

function getRects() { 

    for(var i = 0; i < elements.length; i++) { 

     /// get rect for this element 
     rect = elements[i].getBoundingClientRect(); 

     /// use it for something, or store in an array etc. 
     ctx.strokeRect(rect.left, 
         rect.top, 
         rect.width, 
         rect.height); 
    } 
} 

(К сожалению, нет снега демо, но вы должны быть в состоянии использовать это, чтобы реализовать то, что вы просите).

+1

Спасибо за помощь. Я пробовал это, и он работал отлично. :-) – Simo389

+0

@ K3N Можно ли это сделать любым другим способом? – hipkiss

+0

@hipkiss Я уверен, что существуют другие способы, лучше или хуже. Вы можете создать «фальшивую» коллекционную анимацию, указав местоположение, прибл. или точнее, к изображению bg, затем произвольно создавайте «снег» в областях верхнего края, где будут элементы. Это очень зависит от вашей страницы, макета, вида и т. д. Чтобы принять различные разрешения и позиции, это будет будет трудно избежать динамического считывания местоположений при изменении размера, прокрутке и т. д., но я думаю, что вы могли бы уйти с приближением или даже случайным накоплением (при условии, что засеянные участки сохраняются в виде размеров и т. д.). – K3N