Подтвердить что ты не робот

Карта изображений, не работающая на устройствах iOS, с большими изображениями, которые масштабируются устройством

Я разрабатываю внутреннее веб-приложение в нашей корпоративной интрасети с использованием PHP. В одном разделе приложения отображается несколько изображений с высоким разрешением для пользователя. Эти изображения находятся в области 5000x3500 пикселей. Каждое изображение имеет карту изображения (с использованием прямоугольных областей), и все работает отлично в браузерах рабочего стола, которые я пробовал.

Проблема, которую я нахожу, заключается в том, что, когда пользователи обращаются к сайту через свои устройства iOS, изображения перемасштабируются сафари на устройстве, однако координаты карты изображения не корректируются в соответствии.

Пример HTML, сгенерированный моим PHP, выглядит следующим образом:

<img src="largeimage.jpg" width="5000" height="3500" usemap="#examplemap">
<map name="examplemap">
  <area shape="rect" coords="0,0,5000,500" href="blah1"/>
  <area shape="rect" coords="0,500,2500,3500" href="blah2"/>
  <area shape="rect" coords="2500,500,5000,3500" href="blah3"/>
</map>

(Фактические координаты прямоугольника на карте изображения вычисляются как процент от размера изображения).

Я знаю, что сафари изменяет размер изображения из-за ограничений памяти на устройстве, но мне нужно либо найти способ масштабирования карты изображения в соответствии, либо заменить карту изображения чем-то другим, что будет выполнять ту же работу. Может ли кто-нибудь предложить какие-либо рекомендации?

4b9b3361

Ответ 1

Этот раздел был решен здесь в stackoverflow: jquery-image-map-alternative

Лучшей идеей является использование абсолютно позиционированных якорей (также предложенных steveax) вместо imagemap.

Обновление

Поскольку это старый вопрос, вы можете использовать SVG-карты в наши дни. Они поддерживаются во всех современных браузерах, работают оперативно и так же просты в использовании, как карты изображений. (благодаря пользователю vladkras для напоминания)

Ответ 2

Почему бы вам не использовать адаптивные карты изображений. Таким образом, вы по-прежнему можете использовать поли карты для странностей.

http://mattstow.com/experiment/responsive-image-maps/rwd-image-maps.html

Это так же просто, как добавить script. И одна строка javascript:

$('img[usemap]').rwdImageMaps();

Ответ 3

Комментарий Натана верен. Чтобы предотвратить масштабирование, вам необходимо установить окно просмотра. В принципе, либо укажите фиксированную ширину пикселя, либо установите масштаб в 1.0 и установите user-scaleable = no

Смотрите этот документ для справки:

http://developer.apple.com/library/ios/#DOCUMENTATION/AppleApplications/Reference/SafariWebContent/UsingtheViewport/UsingtheViewport.html

Альтернативой использованию тега области является использование javascript с событиями x/y и ограничениями для ваших областей попадания.

Ответ 4

Недавно я столкнулся с этим ограничением в проекте, где нам нужно было масштабировать, и это то, что я сделал для его решения:

  • Разделите изображение на 4 квадранта

  • Разместил 4 изображения в div с width и height на 50% и position: absolute;

  • Абсолютно позиционированные элементы <a> внутри родительского элемента квадранта, используя процентные значения и высокий z-index

Вот так:

CSS

#map-frame { position: relative; }
.map {
    display: block;
    position: absolute;
    width: 5%;
    height: 3%;
    z-index: 99;
}
.q {
    position: absolute;
    width: 50%;
    height: 50%;
}
.q img {
    display: block;
    max-width: 100%;
}
.q1 {
    top: 0;
    left: 0;
}
.q2 {
    top: 0;
    right: 0;
}
.q3 {
    bottom: 0;
    left: 0;
}
.q4 {
    bottom: 0;
    right: 0;
}

HTML

<div id="map-frame">
    <a class="map" href="foo.html" style="top: 20%; left: 20%;">
    <a class="map" href="foo.html" style="top: 40%; left: 20%;">
    <a class="map" href="foo.html" style="top: 20%; left: 40%;">
    <a class="map" href="foo.html" style="top: 40%; left: 40%;">
    <div id="q1" class="q">
        <img alt="" src="q1.jpg" />
    </div>
    <div id="q2" class="q">
        <img alt="" src="q2.jpg" />
    </div>
    <div id="q3" class="q">
        <img alt="" src="q3.jpg" />
    </div>
    <div id="q4" class="q">
        <img alt="" src="q4.jpg" />
    </div>
</div>

Ответ 5

Поместите весь контент ВНУТРИ ТАБЛИЦЫ. Установите ширину 100%. Iphone, похоже, не масштабирует таблицы... Я боролся с этой проблемой, поскольку мои изображения просто терялись или внутри div. ни одна из ссылок на прямую связь не работала. Но когда я поставил всю партию внутри стола... Ну, просто попробуй и посмотри:)

Ответ 6

Я вывожу этот пост, потому что я только что нашел решение, чтобы получить графическую карту, работающую на iOS.

Поместите карту в якорь и прослушайте события щелчка/нажатия на ней, чтобы проверить, совпадает ли целевой элемент с областью карты.

HTML

<a id="areas" href="#">
    <img src="example.jpg" usemap="#mymap" width="1024" height="768">
    <map name="mymap">
        <area id="area1" shape="poly" coords="X1,Y1,X2,Y2...">
        <area id="area2" shape="poly" coords="X1,Y1,X2,Y2...">
        <area id="area3" shape="poly" coords="X1,Y1,X2,Y2...">
    </map>
</a>

JAVASCRIPT

$("#areas").on("click tap", function (evt) {
    evt.preventDefault();
    if (evt.target.tagName.toLowerCase() == "area") {
        console.log("Shape " + evt.target.id.replace("area", "") + " clicked!");
    }
});

Протестировано на iPad4 с мобильным сафари 6.0

Ответ 7

Не используйте Default <img usemap="#map"> и <map name="map"> изменить его. Как <img usemap="#mapLink"> и <map name="mapLink">. Это работает!!!

Ответ 8

Просто использование атрибута # в атрибуте usemap позволяет решить проблему на iPhone.

Например <img usemap="#mapLink"> и <map name="mapLink">

Ответ 9

Мое решение было легким. Я просто назначил высоту и ширину в DIV css, чтобы соответствовать размеру изображения, и все работало нормально. Размер оригинального изображения: 825 x 1068, поэтому

    <div style= width: 825px; height: 1068px;">
    ...
    </div>

Надеюсь, что это поможет.

Ответ 10

<img src="largeimage.jpg" width="5000" height="3500" usemap="#examplemap">
<map name="examplemap">
  <area shape="rect" coords="0,0,100%,10%" href="blah1"/>
  <area shape="rect" coords="0,10%,50%,70%" href="blah2"/>
  <area shape="rect" coords="50%,10%,100%,70%" href="blah3"/>
</map>

попробуйте использовать процентные значения внутри координат