Наведите указатель мыши на этаж здания в HTML / CSS - PullRequest
2 голосов
/ 30 мая 2020

Я пытаюсь изменить цвет пола при наведении курсора. https://imgur.com/a/pXEmNXp это изображение, на котором я пытаюсь это сделать.

Я попробовал ответить на этот пост: Как мы можем нарисовать трехмерную структуру здания из существующего изображения Jquery, Css? но когда я фактически зависаю на полу, это не работает, оно отображается только тогда, когда я нахожусь в случайном месте в нижней части изображения.

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

Вот мой код, если это помогает:

$(document).ready(function () {

        $('map').on('mouseenter', function () {
            $('.highlight-4').show();
        })

        $('map').on('mouseleave', function () {
            $('.highlight-4').hide();
        })
    });
.highlight {
     z-index: 9999;
     display: none;
     pointer-events: none;
  }

  .building {
     position: absolute;
     margin-left: 11%;
     box-shadow: 0 15px 30px rgba(0, 0, 0, .6);;
  }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
HTML

        <img class="highlight highlight-4" src="/static/floor-4.png" alt="">
        <img class="highlight highlight-3" src="/static/floor-3.png" alt="">
        <img class="highlight highlight-2" src="/static/floor-2.png" alt="">
        <img class="highlight highlight-1" src="/static/floor-1.png" alt="">
        <img class="highlight highlight-0" src="/static/floor-0.png" alt="">
        <img usemap="#image-map" class="building" src="/static/apartments.jpeg" alt="">
        <map name="image-map">
            <area target="" alt="" title="" href="" coords="1121,326,197,662,191,747,1130,473,1398,664,1387,544"
                shape="poly">
        </map>

1 Ответ

1 голос
/ 30 мая 2020

Кажется, лучший способ реализовать изображение здания в виде файла SVG с наложениями <polyline>. Таким образом, вы можете использовать селекторы CSS и иметь гораздо больший контроль над своими макетами. Вы можете использовать <a> внутри SVG, javascript, и т.д. c.

Я взял ваше изображение и загрузил его в Нарисуйте SVG , чтобы создать требуемый верхний этаж <polyline>. После локального сохранения чертежа DrawSVG я просто скопировал <polyline> в свой собственный файл SVG, который, как вы можете видеть, работает без каких-либо дополнительных HTML, и добавил немного CSS, чтобы выделить :hover.

Вы можете вставить этот SVG в себя html как если бы он был и <img>, это просто еще один тег (с преимуществами).

ОБНОВЛЕНИЕ

Пересмотрел исходный код, который я опубликовал, и заменил его полностью новым кодом. Код теперь представляет собой страницу HTML с использованием файла SVG с изображением OP и показывает, как использовать <a> с некоторым демонстрационным текстом на :hover (снова верхний этаж).

HTML страница также была сделана «отзывчивой» за счет использования математических формул в запросах CSS calc() и @media (go 'полноэкранная страница' и изменение размера браузера, также проверьте страницу на различных устройствах с помощью браузера Разработчик Инструменты , 'портретный' и 'альбомный' режим).

Объяснение математики можно найти в других ответах, которые я дал на SO:

Теперь вы создаете остальные этажи ....

/*
    Visit below answers on Stackoverflow for an explanation
    of the math used for responsive sizing of elements.

    https://stackoverflow.com/a/62033317/2015909
    https://stackoverflow.com/a/61867702/2015909
*/
/**************************/
/* preferred global rules */
/**************************/
html,body               { box-sizing: border-box; width: 100%; max-width: 100%; height: 100% }
*::before,*::after, *   { box-sizing: inherit }
body                    { margin: 0 }

/* responsive base font size using y = mx + b */
html    { font-size: calc(0.625vmin + 0.75rem) } /* (320,14)(1280,20) */
body    { font-size: 1rem }

[band]  { display: flex; flex-flow: column wrap; align-content: center }

[padded="1"], [padded="0"] [band*="padded"] {
/*
    responsive page padding
    and responsive band padding (same as responsive page padding, but at band level)
    p1(320,32) p2(1920, 72) => 0.025x + 24
    p3(320, 8) p4(1920,320) => 0.195x - 54.4 

    'Band padding' is only active when 'page padding' is off 
*/
    padding: calc( 2.5vh + 24px) calc(19.5vw - 54.4px);
}

/* Making sure the image fits in any viewport, either portrait or landscape */
@media (orientation: portrait ) { #construction-site { height: auto; width: 100% } }
@media (orientation: landscape) { #construction-site { height: 100%; width: auto } }
<body padded="0">
<div id="construction-site" band="padded">
    <svg viewbox="0 0 1600 1200"
         xmlns="http://www.w3.org/2000/svg"
         xmlns:xlink="http://www.w3.org/1999/xlink">

        <style>
            .line       { stroke: Black; stroke-opacity: 0; stroke-width: 2px; cursor: pointer } 
            .polyline   { fill  : Red  ; fill-opacity  : 0 }
    
            .floor-text { fill: Black; stroke: none; fill-opacity: 0;
                          cursor: default; pointer-events: none;
                          font-weight: bold; font-family: sans-serif;
                          /* responsive font using y = mx + b */
                          font-size: calc(-1vmin + 51.2px); /* (320,48)(1920,32) */
                        }

            .floor:hover>.line       { fill-opacity: .4; stroke-opacity: .8 }
            .floor:hover>.floor-text { fill-opacity: .7 }
        </style>

        <image href="https://i.imgur.com/0i4N0d3.jpg"/>

        <a id="top-floor" class="floor" rel="noopener" target="_blank" href="javascript:void(0)" title="top floor, click for details...">
            <polyline class="line polyline" 
                points="201.242,678.473 1121.43, 333.16 1370.24,
                        553.473 1387.74, 668.473 1127.49,
                        474.098 189.242, 753.473 202.242, 678.973"/>

            <line class="line" x1="1121.42" y1="333.472" x2="1127.45" y2="474.097"/>
            <text class="floor-text" x="800" y="150" text-anchor="middle">top floor demo text</text>
        </a>
    </svg>
</div>
</body>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...