首页
学习
活动
专区
圈层
工具
发布

当用户在jquery mobile中向上或向下滑动时调整Google Maps div的大小

jQuery Mobile 中调整 Google Maps Div 大小的解决方案

基础概念

在 jQuery Mobile 应用中集成 Google Maps 时,经常会遇到地图容器 div 在滑动时大小不正确的问题。这是由于 jQuery Mobile 的页面过渡动画和 Google Maps 的尺寸计算机制之间的交互问题导致的。

问题原因

  1. 页面过渡动画:jQuery Mobile 使用 CSS 过渡动画来平滑切换页面,这会导致地图容器在动画过程中尺寸计算不准确
  2. 延迟渲染:Google Maps 在容器尺寸变化后不会自动重新计算和调整
  3. 视口单位问题:使用百分比或视口单位(vh/vw)时,在移动设备上可能出现计算错误

解决方案

方法1:使用 resize 事件触发地图重绘

代码语言:txt
复制
$(document).on("pagecontainershow", function() {
    // 初始化地图
    var map = new google.maps.Map(document.getElementById('map-canvas'), {
        center: {lat: -34.397, lng: 150.644},
        zoom: 8
    });
    
    // 监听页面过渡完成事件
    $(window).on("resize", function() {
        google.maps.event.trigger(map, "resize");
        map.setCenter({lat: -34.397, lng: 150.644});
    });
});

方法2:使用 jQuery Mobile 页面事件

代码语言:txt
复制
$(document).on("pageshow", "#map-page", function() {
    // 确保地图容器已完全显示
    setTimeout(function() {
        google.maps.event.trigger(map, "resize");
        map.setCenter(center);
    }, 300);
});

方法3:CSS 解决方案

确保地图容器有明确的尺寸:

代码语言:txt
复制
#map-canvas {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}

方法4:使用 orientationchange 事件处理旋转

代码语言:txt
复制
$(window).on("orientationchange", function() {
    google.maps.event.trigger(map, "resize");
    map.setCenter(center);
});

最佳实践

  1. 延迟初始化:在页面完全显示后再初始化地图
  2. 响应式设计:使用 CSS 确保地图容器始终填满可用空间
  3. 事件处理:监听所有可能导致尺寸变化的事件(resize, orientationchange, pageshow)
  4. 性能优化:使用 setTimeout 延迟重绘以避免过度触发

完整示例代码

代码语言:txt
复制
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>jQuery Mobile with Google Maps</title>
    <link rel="stylesheet" href="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
    <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
    <script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
    <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
    <style>
        #map-page, #map-canvas {
            width: 100%;
            height: 100%;
            padding: 0;
        }
        #map-canvas {
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
        }
    </style>
</head>
<body>
    <div data-role="page" id="map-page">
        <div data-role="header">
            <h1>Google Maps</h1>
        </div>
        <div role="main" class="ui-content">
            <div id="map-canvas"></div>
        </div>
    </div>

    <script>
        var map, center = {lat: -34.397, lng: 150.644};
        
        $(document).on("pagecontainershow", function() {
            // 初始化地图
            map = new google.maps.Map(document.getElementById('map-canvas'), {
                center: center,
                zoom: 8
            });
            
            // 监听各种可能导致尺寸变化的事件
            $(window).on("resize orientationchange", function() {
                setTimeout(function() {
                    google.maps.event.trigger(map, "resize");
                    map.setCenter(center);
                }, 300);
            });
        });
        
        // 页面显示后触发一次重绘
        $(document).on("pageshow", "#map-page", function() {
            setTimeout(function() {
                google.maps.event.trigger(map, "resize");
                map.setCenter(center);
            }, 500);
        });
    </script>
</body>
</html>

应用场景

这种解决方案适用于:

  • 移动端 Web 应用中使用 Google Maps
  • 需要响应式设计的单页应用
  • 包含滑动切换页面的应用
  • 需要处理设备旋转的应用

通过以上方法,可以确保 Google Maps 在 jQuery Mobile 应用中始终正确显示,无论用户如何滑动或旋转设备。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

jQuery Cheat—Sheet(jQuery学习笔记)

jQuery能满足以下需求: 取得文档中的元素、修改页面外观、改变文档内容、响应用户的交互操作、为页面添加动态效果、不刷新加载、简化常见的JavaScript任务。 ---- jQuery版本?...在下面的实例中,当点击事件在某个 元素上触发时,隐藏当前的元素: $("p").click(function(){ $(this).hide(); }); 双击事件 当双击元素时,会发生...在下面的实例中,当双击事件在某个 元素上触发时,隐藏当前的元素: $("p").dblclick(function(){ $(this).hide(); }); 鼠标穿过事件 当鼠标指针穿过元素时...- 如果元素向下滑动,则 slideToggle() 可向上滑动它们。 - 如果元素向上滑动,则 slideToggle() 可向下滑动它们。...p1" 元素首先会变为红色,然后向上滑动,再然后向下滑动: $(“#p1”).css(“color”,”red”).slideUp(2000).slideDown(2000); 如果需要,我们也可以添加多个方法调用

17.4K30

jQuery

下面是两个具体的例子: 试图隐藏一个不存在的元素 获得未完全加载的图像的大小 JQuery选择器 选择器须臾对元素组或单个元素进行操作。...(当文档完成加载时) $(selector).click(function) 触发或将函数绑定到被选元素的点击事件 $(selector).dblclick(function) 触发或将函数绑定到被选元素的双击事件...jQuery 效果 - 滑动 jQuery slideDown() 用于向下滑动元素 $(selector).slideDown(speed,callback) 可选的speed参数规定效果的时长,...如果元素向下滑动,则 slideToggle() 可向上滑动它们。 如果元素向上滑动,则 slideToggle() 可向下滑动它们。...不过,需要记住一件重要的事情:当使用 animate() 时,必须使用 Camel 标记法书写所有的属性名,比如,必须使用 paddingLeft 而不是 padding-left,使用 marginRight

5.3K30
  • WEB入门之十八 动画特效

    本章简介 动画特效是JavaScript在Web前端能发挥的巨大优势之一,也是最吸引用户的地方。...8.1 滑动动画 滑动动画主要是控制元素的高度在指定时间内从有到无或从无到有,jQuery中实现滑动动画的函数见表8-1-2所示。...表8-1-2 滑动动画函数 函数 说明 slideDown( ) 元素向下滑动特效(高度增加) slideUp( ) 元素向上滑动特效(高度减少) slideToggle( ) 元素向上/向下滑动切换特效...该函数可以自动进行向上/向下滑动的切换,同样可以使用一个参数来设置动画速度。...8.1 淡入淡出动画 淡入淡出是指控制元素的透明度从0(隐藏)到1(显示)或从1到0,jQuery中实现淡入淡出动画的函数见表8-1-3所示。

    72910

    JQuery基础

    使用大公司CDN好处: 许多用户在访问其它站点时,已经从百度、新浪、谷歌和微软加载过jQuery。当用户访问我的站点时,会从缓存中加载jQuery,这样可以有效减少加载时间!...(适用于表单字段)发生改变时),focus(元素获得焦点),blur(元素失去焦点)事件; 文档/窗口事件:load(元素已加载触发,在jQuery1.8中废除。...ajax中也有load()方法),resize(调整浏览器窗口大小时触发),scroll(滚动指定的元素),unload(jQuery1.8中废弃)事件。 另: hover():模拟光标悬停事件。...(speed,callback);   slideDown():对隐藏的元素向下滑动;slideUp():对显示的元素向上滑动收起;slideToggle():切换两种状态改变。...属性设置无效,因为色彩动画不包括在核心jQuery库中。

    5.9K51

    jquery mobile 移动web(5)

    jquery Mobile 在开始运行的时候,它会在document 对象上触发一个mobileinit 事件。我们可以通过该事件重写默认的相应的函数。配置各种属性参数。   ...用法:$.mobile.subPageUrlkey = "page"       描述:改变jQuery Mobile 视图在 URL 地址中的key 参数名,当选参数改成 subPageUrlKey...6.ajaxEnabled       类型:布尔值,默认值是true       用法:$.mobile.ajaxEnabled = false       描述:设置当单击连接或提交表单或按钮时...      描述:该选项参数主要设置页面切换默认的效果,如果设置为none ,页面切换时就不会有效果,可选的参数 slideup (左右滑入)slideup(由下向上滑动) slidedown...11.minScrollBack       类型:字符串,默认值是150       用法:$.mobile.minScrollBack = “200”       描述:当滚动超出所设置的高度时才会触发滚动位置记忆功能

    1.7K50

    用于H5的移动开发框架

    jQuery Mobile 不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架。支持全球主流的移动平台。...Mobile Angular UIu并不包含任何jQuery依赖,你需要做的只是通过一些AngularJS指令创建友好的用户体验。...平台UI为基础,补充部分Android平台特有的UI控件   流畅体验   • 下拉刷新   为实现下拉刷新功能,大多H5框架都是通过DIV模拟下拉回弹动画,在低端android手机上,DIV动画经常出现卡顿现象...(特别是图文列表的情况); mui通过双webview解决这个DIV的拖动流畅度问题;拖动时,拖动的不是div,而是一个完整的webview(子webview),回弹动画使用原生动画。   ...滑动触发操作菜单   在手机应用中(特别是iOS平台),很多操作菜单都是滑动触发的,比如短信界面,左滑显示“删除”按钮,点击可以删除该短信对话;邮件列表界面,左滑可以删除,右滑可以标注为"已读/未读

    6.5K40

    用于H5的移动开发框架

    jQuery Mobile 不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架。支持全球主流的移动平台。...Mobile Angular UIu并不包含任何jQuery依赖,你需要做的只是通过一些AngularJS指令创建友好的用户体验。...平台UI为基础,补充部分Android平台特有的UI控件   流畅体验   • 下拉刷新   为实现下拉刷新功能,大多H5框架都是通过DIV模拟下拉回弹动画,在低端android手机上,DIV动画经常出现卡顿现象...(特别是图文列表的情况); mui通过双webview解决这个DIV的拖动流畅度问题;拖动时,拖动的不是div,而是一个完整的webview(子webview),回弹动画使用原生动画。   ...滑动触发操作菜单   在手机应用中(特别是iOS平台),很多操作菜单都是滑动触发的,比如短信界面,左滑显示“删除”按钮,点击可以删除该短信对话;邮件列表界面,左滑可以删除,右滑可以标注为"已读/未读

    6.2K10

    HTML5移动开发的10大移动APP开发框架

    jQuery Mobile 不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架。支持全球主流的移动平台。   ...Mobile Angular UIu并不包含任何jQuery依赖,你需要做的只是通过一些AngularJS指令创建友好的用户体验。   ...平台UI为基础,补充部分Android平台特有的UI控件   流畅体验   • 下拉刷新   为实现下拉刷新功能,大多H5框架都是通过DIV模拟下拉回弹动画,在低端android手机上,DIV动画经常出现卡顿现象...(特别是图文列表的情况); mui通过双webview解决这个DIV的拖动流畅度问题;拖动时,拖动的不是div,而是一个完整的webview(子webview),回弹动画使用原生动画。   ...滑动触发操作菜单   在手机应用中(特别是iOS平台),很多操作菜单都是滑动触发的,比如短信界面,左滑显示“删除”按钮,点击可以删除该短信对话;邮件列表界面,左滑可以删除,右滑可以标注为”已读/未读

    8.2K10

    JQuery 动画:为页面添彩的魔法

    在现代的Web开发中,用户体验的提升是至关重要的一环。而动画作为页面交互中的重要组成部分,更是为用户带来了全新的感官体验。...JQuery 动画基础在 JQuery 中,动画主要基于两个核心方法:show()和hide()。这两个方法用于显示和隐藏元素,可以搭配参数来调整动画的速度。1....滑动效果slideDown() 和 slideUp() 方法可以实现元素的向下滑动和向上滑动效果。div>在这个例子中,slideDown("slow") 方法将 #myElement 元素以较慢的速度向下滑动显示。3....JQuery 动画实际应用动画不仅仅是为了制造酷炫的效果,它还能够用于提升用户体验,例如在页面加载时显示渐变动画,或者在用户交互时添加平滑的过渡效果。下面我们来看几个实际应用场景。1.

    79910

    google maps api_js调用谷歌浏览器接口

    注:目前谷歌地图 API的主版本号是2,当API升级时旧版本只能继续使用一个月,所以要及时更改主版本号,版本号改变会在Google Code和Maps API讨论组发布相关信息 5.key=abcdefg...checkResize()检查地图容器(container)的大小是否已经发生变化,在地图容器DOM大小可能发生变化的时候调用该方法,以便地图能进行自动调整....13.setImage(url) none 请求将 url 指定的图像设置为此标记的前景图。注:不调整打印图像和阴影图像。因此,此方法主要是为了达到高亮显示或变暗显示效果,而不是彻底改变标记的外观。...注重:在 v2 中,它不再是以地理坐标表示的地面上的一个点。现在,地理坐标可以用 GLatLng 表示。 在地图坐标系统中,x 坐标向右增大,y 坐标向下增大。...包含状态代码的答复,假如答复成功,则向用户指定的回调函数传送一个或多个 Placemark 对象。

    7.3K10

    页面滚动效果库,有点儿皮

    [image-20210423133600820.png] 官网即这个库的介绍和演示页面,当你向下滚动页面时,一个个狗头会以各种不同的动画进行展现。...在狗头中间,可以看到这个库的优秀特性,比如简单易用、纯 JS 实现、不依赖 jQuery、动画丰富、只有 3 kb 大小、即时展现等。...比如我选择 “向上弹出” 的动效,对应的类名是 bounceInUp: div class="wow bounceInUp"> div> 然后就大功告成啦,生日蛋糕默认会隐藏,直到用户滚动到它才会向上弹出...data-wow-delay="5s" data-wow-offset="10" data-wow-iteration="10" > xxx div> 也可以在初始化实例时,给所有元素添加全局配置...rid=28ee4e3e6008319f00473b1a245a2c70 在 编程导航 中还能发现更多优质编程学习资源,欢迎分享给有需要的同学吧!

    2.5K21

    JQuery效果

    今天向大家来分享一下JQuery的一些效果,这些都相对比较简单 1.显示和隐藏效果           hide()           隐藏元素          show()         显示元素...fadeTo() 方法中必需的 opacity 参数将淡入淡出效果设置为给定的不透明度(值介于 0 与 1 之间)      speed 为速度,opacity为透明度  callback为函数名称 3...滑动效果         sildeDown()      向下滑动         slideUp()             向上滑动    slideToggle()           向上向下滑动...:形成动画的一些css属性    可以多个动画一起执行  例如:      $("button").click(function(){ $("div").animate(         { left...不过,需要记住一件重要的事情:当使用 animate() 时,必须使用 Camel 标记法书写所有的属性名,比如,必须使用 paddingLeft 而不是 padding-left,使用 marginRight

    5K40

    3分钟搞定图片懒加载

    为什么需要懒加载 对于一个页面加载速度影响最大的因素之一就是图片资源,如果一个页面图片太多(比如某宝,某东等),整个页面的图片大小可以到达几百兆,即使在百兆宽带,全部下载的话,也需要上十秒的时间,这对于用户耐心的考验是巨大的...当页面滚动的时候需要去监听scroll事件,在scroll事件的回调中,判断我们的懒加载的图片判断是否出现在视口内,如果出现在视口内,则将data-src赋值到src。...随着滚动条的向下滚动,bound.top会越来越小,也就是图片到可视区域顶部的距离越来越小,当bound.top 时,图片的上沿应该是位于可视区域下沿的位置的临界点,再滚动一点点...当向下滑动的时候,从Network面板可以看到,剩下的图片是一个个加载的。 可能有人疑问为什么第一次加载了4张,而不是3张?...当page=0时,会随机返回一页数据,page>=1时会返回相应页码的数据。 源代码: <!

    2.7K20
    领券