图像地图仅在IOS上出现问题

时间:2018-08-15 06:39:42

标签: html ios mobile imagemap

这是故事。我使用图像map(2)为我工作的公司构建了一个地图,您可以在此处查看其当前功能,https://www.absa.co.za/corporate-and-investment-banking/about-us/presence/

我遇到的问题是,在IOS上,地图中的区域不能可点击,实际上,是在IOS上使用Browserstack并选择在图像上方的区域中,我选择图像,而不是区域,因此单击发生在img标签上。现在,您将看到,形状非常复杂,到目前为止,我还没有遇到一种更好的方法,除了。以外,还可以通过其他方式获得相同的期望精度。

注意:该功能可以在Windows,macOS,Android和最受支持的浏览器上正常运行。此问题仅适用于IOS,Chrome和Safari。

我也会在下面发布代码,但是它很脏,因为我正在尝试,到目前为止还算不上运气。

其他信息:

点击地图不会带您到任何地方,而只会影响(桌面)或下方(移动)旁边的元素以显示国家/地区详细信息。

我在地图下方添加了国家/地区名称,以使其在IOS上可用。

我已经在互联网上访问了很多信息以寻找答案,但是很少有地图使用这种功能。

我们将不胜感激。

HTML:

<div class="interactivemap section desktop">
    <div style="background: url('/content/dam/south_africa/absa/images/africa/countries/africa.svg') 0px 0px no-repeat; width: 698px; height: 700px;" class="africanMap">
        <img id="AfricanOperations" src="/content/dam/south-africa/absa/images/africa/countries/africa.svg" usemap="#AfricanOperations" alt="">
        <map id="_AfricanOperations" name="AfricanOperations">
            <area shape="poly" alt="Botswana"      title="" href="" coords="342,584,342,557,351,557,352,526,374,526,374,528,380,525,387,522,392,526,399,527,403,535,409,541,413,547,422,559,419,565,411,570,404,575,397,583,391,590,384,593,375,588,369,590,364,596,360,600,350,599,349,587,347,585">
            <area shape="poly" alt="Zambia"        title="" href="" coords="430,497,420,512,403,523,389,522,385,516,371,518,363,511,354,476,426,440,438,439,450,449,465,454,468,465,466,478,464,488">
            <area shape="poly" alt="Mozambique"    title="" href="" coords="441,603,439,561,432,500,467,490,474,471,500,473,528,463,534,490,514,556,476,588">
            <area shape="poly" alt="Mauritius"     title="" href="" coords="598,512,633,498,662,509,681,544,646,567,611,558,599,539">
            <area shape="poly" alt="Seychelles"    title="" href="" coords="612,439,603,395,631,327,682,363,688,456">
            <area shape="poly" alt="Tanzania"      title="" href="" coords="436,435,412,433,408,413,409,389,436,381,443,378,464,378,470,377,500,396,501,402,517,412,529,426,529,441,529,460,499,471,474,469,469,454,450,446">
            <area shape="poly" alt="Uganda"        title="" href="" coords="434,380,413,384,411,361,414,330,444,322,470,331,475,335,479,342,480,356,468,371,465,376,441,377">
            <area shape="poly" alt="Namibia"       title="" href="" coords="339,613,334,617,323,617,317,611,309,615,295,616,249,497,367,518,384,519,383,521,350,523,348,553,339,556">
            <area shape="poly" alt="Nigeria"       title="" href="" coords="189,333,186,233,303,230,315,253,275,346">
            <area shape="poly" alt="South-africa"  title="" href="" coords="294,618,311,617,317,614,323,619,335,618,342,615,341,587,347,588,349,601,361,601,371,592,378,591,382,595,391,592,405,578,416,569,425,559,437,563,438,594,439,604,450,604,469,608,464,663,423,682,308,687">
            <area shape="poly" alt="Kenya"         title="" href="" coords="471,373,482,357,482,342,469,328,468,311,502,305,553,308,578,360,545,427,503,401,502,394">
            <area shape="poly" alt="Ghana"         title="" href="" coords="183,232,116,260,118,345,185,348">
        </map>
        <map id="_AfricanOperationsMobile" name="AfricanOperationsMobile">
            <area shape="poly" alt="Botswana"      title="" href="" coords="166,236,161,241,161,255,157,255,156,267,160,273,165,276,171,270,178,271,194,257,197,257,196,245">
            <area shape="poly" alt="Zambia"        title="" href="" coords="213,214,211,207,202,204,197,196,162,213,167,236,197,244,196,229,209,222">
            <area shape="poly" alt="Mozambique"    title="" href="" coords="215,216,209,224,197,229,200,257,201,275,213,274,238,249,250,209,230,217">
            <area shape="poly" alt="Mauritius"     title="" href="" coords="266,238,289,225,311,235,313,256,292,266,273,256">
            <area shape="poly" alt="Seychelles"    title="" href="" coords="268,179,288,154,319,165,319,200,284,208">
            <area shape="poly" alt="Tanzania"      title="" href="" coords="216,174,228,182,235,190,250,189,251,209,241,212,229,216,215,216,213,208,203,204,193,184,193,174">
            <area shape="poly" alt="Uganda"        title="" href="" coords="215,173,220,163,215,151,199,142,183,156,193,174">
            <area shape="poly" alt="Namibia"       title="" href="" coords="165,235,115,228,131,284,155,283,156,255">
            <area shape="poly" alt="Nigeria"       title="" href="" coords="84,111,115,97,152,115,151,146,126,165,89,155">
            <area shape="poly" alt="South-africa"  title="" href="" coords="156,284,156,269,159,274,164,278,171,271,178,272,194,258,198,258,200,276,220,275,213,297,190,320,136,320,116,285">
            <area shape="poly" alt="Kenya"         title="" href="" coords="221,163,215,149,232,139,257,148,256,190,236,189,229,181,216,172">
            <area shape="poly" alt="Ghana"         title="" href="" coords="88,155,83,111,48,108,45,155">
        </map>
        <div class="bc-textimage-height"> </div>
        <div class="bc-clear"></div>
    </div>
</div>

脚本:

function goDesktop() {
    if ($(window).width() < 768) {
        this.img.attr('usemap', 'AfricanOperationsMobile');
        this.container.css({'width': '320px', 'height': '321px'});
    }

var ua = navigator.userAgent, 
pickclick = (ua.match(/iPad/i) || ua.match(/iPhone/)) ? "touchstart" : "click";

if(scope.length !== 0){
    var _path = $('#AfricanOperations').attr('src'),
        _imgLoc = _path.split('africa.')[0];

    $('.africanMap').css('background', 'url(' + _path + ') no-repeat 0 0');
    $('body').append('<div class=\'hovertool\'></div>');
    $('.hovertool').css('display', 'none');

    $('#_AfricanOperations').on(pickclick, 'area', function(e) {
        e.preventDefault();
        e.stopPropagation();

        var _alt = $(this).attr('alt'),
            _counter = 0,
            _adCounter,
            _country = _alt.toLowerCase();
        _country = _country.replace(' ', '-');


        $('.africanMap img').attr('src', _imgLoc + 'over_' + _country + '.svg');
        $('.tabs-map-description .tabs-nav-item').each(function() {
            var _countryHead = $(this).find('.text-wrapper').html();
            _counter = _counter + 1;
            _adCounter = _counter + 1;
            _countryHead = _countryHead.toLowerCase();
            _countryHead = _countryHead.replace(' ', '-');

            if (_country == _countryHead) {
                var _targetNav = $('.tabs-map-description .tabs-nav-item:nth-child(' + _counter + ')');
                var _targetCon = $('.tabs-map-description .tabs-content:nth-child(' + _adCounter + ')');
                _targetNav.addClass('is-active');
                _targetNav.siblings('.tabs-nav-item').removeClass('is-active');
                _targetCon.removeClass('is-hidden');
                _targetCon.siblings('.tabs-content').addClass('is-hidden');
            }
        });
    });

    $('#_AfricanOperations area').hover(function(e){
        e.preventDefault();
        e.stopPropagation();
        $('.hovertool').html($(e.target).attr('alt'));
        $('.hovertool').css('display', 'block');
    },function(e){
        $('.hovertool').html('');
        $('.hovertool').css('display', 'none');
    });

    $("body").mousemove(function(e) {
        var x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
            y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
        $('.hovertool').css('top', y + 'px');
        $('.hovertool').css('left', (x + 20) + 'px');
    });

    $('#_AfricanOperationsMobile').on(pickclick, 'area', function(e){
        e.preventDefault();
        e.stopPropagation();

        var _alt = $(this).attr('alt'),
            _counter = 0,
            _adCounter,
            _country = _alt.toLowerCase();
        _country = _country.replace(' ', '-');


        $('.africanMap img').attr('src', _imgLoc + 'over_' + _country + '.svg');
        $('.tabs-map-description .tabs-nav-item').each(function() {
            var _countryHead = $(this).find('.text-wrapper').html();
            _counter = _counter + 1;
            _adCounter = _counter + 1;
            _countryHead = _countryHead.toLowerCase();
            _countryHead = _countryHead.replace(' ', '-');

            if (_country == _countryHead) {
                var _targetNav = $('.tabs-map-description .tabs-nav-item:nth-child(' + _counter + ')');
                var _targetCon = $('.tabs-map-description .tabs-content:nth-child(' + _adCounter + ')');
                _targetNav.addClass('is-active');
                _targetNav.siblings('.tabs-nav-item').removeClass('is-active');
                _targetCon.removeClass('is-hidden');
                _targetCon.siblings('.tabs-content').addClass('is-hidden');
            }
        });
    });
}
};
this.scope = $('.interactivemap');
this.container = this.scope.find('.africanMap');
this.img = this.container.find('#AfricanOperations');
this.goDesktop(this.scope);

CSS:

.reference-africa-map {
    width: 698px;
    width: 43.624875rem;
    display: block;
    float: left;
    margin-left: calc((100% - 1058px)/ 2);
    cursor: pointer;
}

@media only screen and (max-width:767px) {
    .africanMap {
        max-width: 320px;
    }
}

.reference-africa-map .map {
    width: auto !important;
    position: absolute;
    top: 0;
    left: 0;
    margin-left: -9px;
    margin-top: -40px;
    cursor: pointer;
    display: inline-block;
}

.reference-africa-map area {
    outline: 0;
    cursor: pointer;
}

@media (max-width:1060px) {
    .reference-africa-map {
        margin-left: calc((100vw - 698px)/ 2)
    }
}

@media only screen and (max-width:767px) {
    .reference-africa-map {
        margin-left: calc((100vw - 320px)/ 2);
        max-width: fit-content
    }
}

.tabs-map-description {
    width: 360px;
    width: 22.49975rem;
    margin-top: 6.2496875rem;
    display: inline-block !important
}

@media only screen and (min-width:768px) {
    .tabs-map-description .tabs-nav {
        display: none;
    }
}

.tabs-map-description .tabs-nav {
    overflow-x: scroll;
    position: static;
}

.tabs-map-description ::-webkit-scrollbar {
    display: none;
}

.tabs-map-description .tabs-nav-switcher {
    background: white;
    border: 0;
    -webkit-box-shadow: 0px 0px 68px 34px rgba(255,255,255,1);
    -moz-box-shadow: 0px 0px 68px 34px rgba(255,255,255,1);
    box-shadow: 0px 0px 68px 34px rgba(255,255,255,1);
    -webkit-animation: ArrowAnimation 1s infinite; /* Safari 4+ */
    -moz-animation:    ArrowAnimation 1s infinite; /* Fx 5+ */
    -o-animation:      ArrowAnimation 1s infinite; /* Opera 12+ */
    animation:         ArrowAnimation 1s infinite; /* IE 10+, Fx 29+ */
    transition: all .5s ease;
}

@-webkit-keyframes ArrowAnimation {
    0%   {  padding-right: 0px; 
            padding-left: 0px;}
    50% {  padding-right: 5px; 
            padding-left: 5px;}
    100% {  padding-right: 0px; 
            padding-left: 0px;}
}
@-moz-keyframes ArrowAnimation {
    0%   {  padding-right: 0px; 
            padding-left: 0px;}
    50% {  padding-right: 5px; 
            padding-left: 5px;}
    100% {  padding-right: 0px; 
            padding-left: 0px;}
}
@-o-keyframes ArrowAnimation {
    0%   {  padding-right: 0px; 
            padding-left: 0px;}
    50% {  padding-right: 5px; 
            padding-left: 5px;}
    100% {  padding-right: 0px; 
            padding-left: 0px;}
}
@keyframes ArrowAnimation {
    0%   {  padding-right: 0px; 
            padding-left: 0px;}
    50% {  padding-right: 5px; 
            padding-left: 5px;}
    100% {  padding-right: 0px; 
            padding-left: 0px;}
}

.tabs-map-description .tabs-nav-switcher:before {
    color: #BE0028;
    padding: 12px 0px;
}

.tabs-map-description .tabs-nav .text-wrapper {
    font-size: 18px;
    color: black !important;
}

.tabs-map-description .tabs-nav-list {
    width: max-content;
}

.tabs-map-description .tabs-nav .tabs-nav-item {
    border: 0;
    background: white; 
}

.tabs-map-description .tabs-nav .tabs-nav-item.is-active .text-wrapper {
    color: #BE0028 !important;
}

.tabs-map-description .tabs-content {
    border: 0
}

.tabs-map-description .tabs-content .h3,
.tabs-map-description .tabs-content .pseudo-h3,
.tabs-map-description .tabs-content h3 {
    line-height: 95px;
    line-height: 5.9373125rem;
    font-size: 48px;
    font-size: 2.9999375rem;
    font-family: SourceSansPro-Black, Arial, Helvetica, sans-serif;
    letter-spacing: .44px;
    border-bottom: 1px solid #BE0028
}

.tabs-map-description .tabs-content p,
.tabs-map-description .tabs-content p a {
    font-size: 16px;
    font-size: .9996875rem;
    line-height: 28px;
    line-height: 1.75rem;
    letter-spacing: .5px
}

.tabs-map-description .tabs-content p .read-more-arrow,
.tabs-map-description .tabs-content p a .read-more-arrow {
    letter-spacing: 2px
}

@media (max-width:1060px) {
    .tabs-map-description {
        margin-top: 0;
        margin-left: calc((100vw - 360px)/ 2)
    }
}

.hovertool {
    position: absolute;
    width: 100px;
    padding: 10px;
    text-align: center;
    border-radius: 2px;
    background: white;
    z-index: 1000;
    border: 1px solid #BE0028;
}

1 个答案:

答案 0 :(得分:0)

问题出在HTML中。它没有像其他浏览器那样处理它,因此我不得不将每个地图移到它的唯一父div。