• Leaflet中实现点击播放视频和关闭视频


    场景

    Leaflet快速入门与加载OSM显示地图:

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122290880

    在上面加载地图显示的基础上。有时会借助视频展示地物的信息。

    比如在某位置添加一个图片标注,点击该标注时播放视频。

    注:

    博客:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    1、Leaflet提供了L.VideoOverlay对象,声明视频文件路径和视频添加的地图范围

            var videolayer;
            //视频文件路径
            var videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm';
            //视频添加的地图范围
            var videoBounds = [[36.07, 120.33], [36.11, 120.37]];

    2、添加播放和取消播放的图标和图片标注

            //添加播放图标
            var playIcon = L.icon({
                //图标地址
                iconUrl: "./images/播放器图标.png",
                //图标大小
                iconSize: [70, 70]
            })
            //添加图片标注(播放)
            var playMarker = L.marker([36.09, 120.35], {
                //添加图标
                icon: playIcon
            }).addTo(map);
            //添加取消播放图标
            var stopIcon = L.icon({
                //图标地址
                iconUrl: "./images/停止播放.png",
                //图标大小
                iconSize: [40, 40]
            })
            //添加图片标注(取消播放)
            var stopMarker = L.marker([36.09, 120.35], {
                //添加图标
                icon: stopIcon
            });

    3、声明鼠标点击事件

            /**鼠标单击事件
            *  @param {string} type 事件类型(鼠标单击)
            *  @param {function} fn 事件触发后的响应函数
            */
            playMarker.on("click", function () {
                //添加视频图层至地图中显示
                videolayer = L.videoOverlay(videoUrl, videoBounds);
                map.addLayer(videolayer);
                //移除播放标注
                map.removeLayer(playMarker);
                //添加取消播放标注
                map.addLayer(stopMarker);
            });
    
            /**鼠标单击事件
            *  @param {string} type 事件类型(鼠标单击)
            *  @param {function} fn 事件触发后的响应函数
            */
            stopMarker.on("click", function () {
                //将地图中的视频图层移除
                map.removeLayer(videolayer);
                //移除取消播放标注
                map.removeLayer(stopMarker);
                //添加播放标注
                map.addLayer(playMarker);
            });

    4、完整示例代码

    <!doctype html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title>leaflet播放视频</title>
        <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
        <style>
            html,
            body,
            #map {
                padding: 0;
                margin: 0;
                 100%;
                height: 100%;
                overflow: hidden;
            }
        </style>
    </head>
    
    <body>
        <div id="map"></div>
        <script type="text/javascript" src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
        <script type="text/javascript">
            var videolayer;
            //视频文件路径
            var videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm';
            //视频添加的地图范围
            var videoBounds = [[36.07, 120.33], [36.11, 120.37]];
            var map = L.map('map').setView([36.09, 120.35], 13);
            L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
                attribution: ''
            }).addTo(map);
    
            //添加播放图标
            var playIcon = L.icon({
                //图标地址
                iconUrl: "./images/播放器图标.png",
                //图标大小
                iconSize: [70, 70]
            })
            //添加图片标注(播放)
            var playMarker = L.marker([36.09, 120.35], {
                //添加图标
                icon: playIcon
            }).addTo(map);
            //添加取消播放图标
            var stopIcon = L.icon({
                //图标地址
                iconUrl: "./images/停止播放.png",
                //图标大小
                iconSize: [40, 40]
            })
            //添加图片标注(取消播放)
            var stopMarker = L.marker([36.09, 120.35], {
                //添加图标
                icon: stopIcon
            });
    
            /**鼠标单击事件
            *  @param {string} type 事件类型(鼠标单击)
            *  @param {function} fn 事件触发后的响应函数
            */
            playMarker.on("click", function () {
                //添加视频图层至地图中显示
                videolayer = L.videoOverlay(videoUrl, videoBounds);
                map.addLayer(videolayer);
                //移除播放标注
                map.removeLayer(playMarker);
                //添加取消播放标注
                map.addLayer(stopMarker);
            });
    
            /**鼠标单击事件
            *  @param {string} type 事件类型(鼠标单击)
            *  @param {function} fn 事件触发后的响应函数
            */
            stopMarker.on("click", function () {
                //将地图中的视频图层移除
                map.removeLayer(videolayer);
                //移除取消播放标注
                map.removeLayer(stopMarker);
                //添加播放标注
                map.addLayer(playMarker);
            });
        </script>
    </body>
    
    </html>
    
     
  • 相关阅读:
    sln、sdf、vcxproj、vcxproj.filter各是什么文件
    服务器开发——性能评估
    HOOK技术
    C++绘制箭头—原理和代码
    线程共享内容和独享内容
    字节多路通道、选择通道、数组多路通道
    操作系统中常见算法汇总
    LRU(最近最少使用)和LFU(最近最不常用)算法的区别
    移动端meta标签的使用和设置
    js和jq获取宽度和高度
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/16119396.html
Copyright © 2020-2023  润新知