我们如何根据现有图像 Jquery,Css 绘制 3D 建筑结构?

How can we draw 3D bulding structure from existing image Jquery,Css?

请查看此网站,它是用 Flash 制作的: 我们可以通过 jquery css 完成吗?

Go here

然后点击任何标有 "Release" 的建筑物 您将在悬停动画效果上看到一栋建筑。 我想使用 jquery 和 css 进行开发 或者你可以建议发展

  1. 首先你需要知道这里没有3d。这些是预渲染的图像。您在软件中将这些突出显示的区域绘制为不同的图层,例如 photoshop。

  1. 然后你需要创建一个可以检测鼠标悬停的区域。老派 image map html 标记是一种方法。您将绘制一个覆盖与突出显示图像相同区域的多边形。

结果将是这样的:

<map name="image-maps-2015-02-15-031753" id="ImageMapsCom-image-maps-2015-02-15-031753">
    <area alt="" href="#" title="" shape="poly" coords="52,99,101,49,172,21,267,21,317,93,302,127,268,63,194,73,129,89,74,115,49,132" style="outline:none;" target="_self" />
</map>
  1. 最后,你需要一点 JS 来做“如果鼠标悬停在该区域,显示高亮图像”。如果您使用 jquery,地图上的 mouseenter 事件很简单;

    $('map').on('mouseenter', 函数 () { $('#highlight').show(); })

    $('map').on('mouseleave', 函数 () { $('#highlight').隐藏(); })


完整演示:http://jsfiddle.net/pggyq4t8/2/(悬停在顶层)

2020 年 5 月,在我对类似 , I showed the OP in my 的回答中,如何改用 SVG 文件并更好地控制图像叠加并使用仅 CSS 的解决方案(<a>:hover 上显示的一些演示文本)。我还使 HTML 页面完全响应以在不同设备上使用。

仅在此处发布代码片段(转到 'Full page' 以获得更好的外观。调整浏览器大小以测试响应能力):

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

    
    
*/
/**************************/
/* 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 } }
</style>
<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;
                          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"/>

        </a>
        <text class="floor-text" x="800" y="150" text-anchor="middle">top floor demo text</text>
    </svg>
</div>
</body>