微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaScript – 在页面上嵌入Google地图,而不会覆盖iPhone滚动行为

我正在努力优化移动网站.我们有一个位置页面,通过Google Maps API包含有关位置的信息和位置的地图. (v2 – 我知道这是不推荐的,但是我没有理由升级的时间,“如果没有破坏..”)我想使用单个列布局,其中包含基本信息,然后是地图,然后是更多信息.

现在,当我使用手指向下滚动iPhone上的移动页面时,一旦我到达地图,页面滚动将被覆盖,并且地图开始平移. 200新新新新旗新新新旗新新旗旗新新旗旗新新旗旗新新旗旗新新旗旗新新旗新旗新新旗旗新新旗旗新新旗新旗旗新新旗新旗新新旗旗新新200新新新旗新新200新200旗新新200新新旗旗规格新新新新旗新新新旗新新新旗新新新旗新新旗旗新新旗新200旗新新旗新新旗旗新新旗新新旗旗新新旗旗新新旗新旗新新旗新新旗新新旗旗新新旗新新旗旗新新旗新新旗新新旗新新旗新新旗新新旗新新旗新新旗新旗我想将地图视为静态图像,我可以滚动过去,但仍然允许缩放按钮,并允许通过我已编码的选择字段的方向重绘地图,所以literal static image不是一个解决方案.

我发现this post that required similar functionality,但它使用v3.我想我所需要做的只是“添加触摸事件到地图容器”,但我不熟悉那部分javascript,而我以下的内容不允许正常滚动. X-

function initialize() {
  if (GbrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map_canvas"));
    geocoder = new GClientGeocoder();
  }
}

function showAddress(address,zoom) {
//clipped... this part works fine
}

//These three lines create a map that my finger pans
initialize(); 
showAddress("[clipped.. street,zip code]");
map.addControl(new GSmallZoomControl3D());

//This stops the map pan but still prevents normal page finger scrolling
map.disableDragging();

//If done right Could this allow normal page finger scrolling??
var dragFlag = false;
map.addEventListener("touchstart",function(e){
   dragFlag = true;
   start = (events == "touch") ? e.touches[0].pageY : e.clientY; 
},true);
map.addEventListener("touchend",function(){ 
dragFlag = false; 
},true);
map.addEventListener("touchmove",function(
if ( !dragFlag ) return;
end = (events == "touch") ? e.touches[0].pageY : e.clientY;   
window.scrollBy( 0,( start - end ) ); 
},true);

我也尝试用document.getElementById(“map_canvas”)替换map.addEventListener.addEventListener或document.addEventListener无效.

解决方法

解决了通过升级到v3,然后检测到一个基本的JavaScript错误,我使用上面链接代码.关键是
start = (events == "touch") ? e.touches[0].pageY : e.clientY;

用户必须将事件变量设置在所呈现的代码之外的某处,因为它看起来像匹配的分配是触摸事件,而其他分配是关键事件.但是由于我没有事件变量,因此它是认的错误的作业.我只是改变了我的开始= e.touches [0] .pageY(并做了相同的touchend事件),现在一切正常.

但是,我已经切换到v2,看看是否可以改正该javascript错误,而没有.所以看起来我没有浪费任何时间升级到v3,既无法弄清楚这个具体的解决方案,也没有设置自己的未来兼容性.

总而言之,如果您想在移动网页上嵌入Google地图,并且可以滚动浏览,那么您需要使用API​​ v3,禁用拖拽和添加触摸事件.我对我的代码做了一些微小的调整,在这里提供给将来可能受益的任何人:

function initialize() 
{
    geocoder = new google.maps.Geocoder();
    var myOptions = {
       mapTypeId: google.maps.MapTypeId.ROADMAP             
    };

    map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);
}

function showAddress(address,zoom) 
{
   if (geocoder) 
   {
      geocoder.geocode( { 'address': address },function (results,status) {
        if (status == google.maps.GeocoderStatus.OK) {
            map.setCenter(results[0].geometry.location);
            map.setoptions( { zoom: zoom });
            var marker = new google.maps.Marker({
                map: map,position: results[0].geometry.location
            });
         }
      });
   }
}

initialize(); 
showAddress("'.$geocode_address.'");

map.setoptions( { draggable: false });

var dragFlag = false;
var start = 0,end = 0;

function thisTouchStart(e)
{
    dragFlag = true;
    start = e.touches[0].pageY; 
}

function thisTouchEnd()
{
    dragFlag = false;
}

function thisTouchMove(e)
{
    if ( !dragFlag ) return;
    end = e.touches[0].pageY;
    window.scrollBy( 0,( start - end ) );
}

document.getElementById("map_canvas").addEventListener("touchstart",thisTouchStart,true);
document.getElementById("map_canvas").addEventListener("touchend",thisTouchEnd,true);
document.getElementById("map_canvas").addEventListener("touchmove",thisTouchMove,true);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:
前言 今天复习了一些前端算法题,写到一两道比较有意思的题:重建二叉树、反向输出链表每个节点 题目 重建二叉树: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {
最近在看回JavaScript的面试题,this 指向问题是入坑前端必须了解的知识点,现在迎来了ES6+的时代,因为箭头函数的出现,所以感觉有必要对 this 问题梳理一下,所以刚好总结一下JavaScript中this指向的问题。
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高