vue中使用video-player和百度地图

转自个人博客http://www.zuidaima.com/blog/4510047499799552.htm

 

先说视频

 

1.安装视频插件

npm install vue-video-player --save

2.在main.js中引入

import VueVideoPlayer from 'vue-video-player'
import 'vue-video-player/src/custom-theme.css'
import 'video.js/dist/video-js.css'
Vue.use(VueVideoPlayer)

3.使用,代码中有注释哦!!!

<template>
  <div >
    <div style="width: 1200px;float: left">
      <video-player
                    ref="player"
                     :options="playerOptions"
                     @play="onPlayerPlay($event)"
                     @pause="onPlayerPause($event)"
                     @ended="onPlayerEnded($event)"
                     @loadeddata="onPlayerLoadeddata($event)"
                     @waiting="onPlayerWaiting($event)"
                     @playing="onPlayerPlaying($event)"
                     @timeupdate="onPlayerTimeupdate($event)"
                     @canplay="onPlayerCanplay($event)"
                     @canplaythrough="onPlayerCanplaythrough($event)"
                     @ready="playerReadied"
                     @statechanged="playerStateChanged($event)"
      >
      </video-player>
      <!--<video-player class="vjs-custom-skin"
                    :options="playerOptions"
                    @ready="playerReadied">
      </video-player>-->
     <!-- <div style="background-color: #2d8cf0;width: 10000px"></div>-->
    </div>
    <div style="padding: 10px;background: #f8f8f9;width: 390px;float: left;margin-left: 25px">
      <Card title="Options" icon="ios-options" :padding="0"  shadow style="height: 650px">
        <CellGroup v-for="(item, index) in optionsVaules" :key="index">
          <Cell >{{item}}</Cell>
         <!-- <Cell title="Only show titles" />
          <Cell title="Only show titles" />-->
        <!--  <Cell title="Display label content" label="label content" />
          <Cell title="Display right content" extra="details" />
          <Cell title="Link" extra="details" to="/components/button" />
          <Cell title="Open link in new window" to="/components/button" target="_blank" />
          <Cell title="Disabled" disabled />
          <Cell title="Selected" selected />
          <Cell title="With Badge" to="/components/badge">
            <Badge :count="10" slot="extra" />
          </Cell>
          <Cell title="With Switch">
            <Switch v-model="switchValue" slot="extra" />
          </Cell>-->
        </CellGroup>
      </Card>
    </div>
    </div>
</template>
<script>
import videojs from 'video.js'
window.videojs = videojs
// hls plugin for videojs6
require('videojs-contrib-hls/dist/videojs-contrib-hls.js')
export default {
  name: 'level_2_1',
  data () {
    return {
      optionsVaules: [],

      modalVisible: false,
      playerOptions: {
        // playbackRates: [0.7, 1.0, 1.5, 2.0], // 播放速度
        //liveui: false,
        autoplay: false, // 如果true,浏览器准备好时开始回放。
        // muted: false, // 默认情况下将会消除任何音频。
        loop: false, // 导致视频一结束就重新开始。
        preload: 'auto', // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
        language: 'zh-CN',
        aspectRatio: '16:9', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
        fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
        live: true,
        sources: [{
          withCredentials: false,
          src: 'http://localhost:8080/video/2.mp4', // 路径
          type: 'video/mp4' // 类型
        }, {
          src: '//path/to/video.webm',
          type: 'video/webm'
        }],
        // poster: '../../static/images/test.jpg', // 你的封面地址
        poster: 'http://localhost:8080/picture/1.png', // 你的封面地址
        // width: document.documentElement.clientWidth,
        notSupportedMessage: '此视频暂无法播放,请稍后再试', // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
        controlBar: {
          timeDivider: false,
          durationDisplay: false,
          fullscreenToggle: false // 全屏按钮
        },
         controls: false
      }
    }

    /* playerOptions: {
        // videojs and plugin options
        height: '360',
        sources: [{
          withCredentials: false,
          type: "application/x-mpegURL",
          src: "https://logos-channel.scaleengine.net/logos-channel/live/biblescreen-ad-free/playlist.m3u8"
        }],
        controlBar: {
          timeDivider: false,
          durationDisplay: false
        },
        flash: { hls: { withCredentials: false }},
        html5: { hls: { withCredentials: false }},
        poster: "https://surmon-china.github.io/vue-quill-editor/static/images/surmon-5.jpg"
      }
    } */
  },
  computed: {
    player () {
      return this.$refs.videoPlayer.player
    }
  },
  methods: {
    // listen event
    onPlayerPlay (player) {
      this.optionsVaules = [];
      //alert(player)
      setTimeout(res=>{
          this.optionsVaules.push("到了34秒了")
      },34000)
      setTimeout(res=>{
        this.optionsVaules.push("到了55秒了")
      },55000)
      // console.log('player play!', player)
    },
    onPlayerPause (player) {
      // console.log('player pause!', player)
    },
    onPlayerEnded (player) {
      // console.log('player ended!', player)
    },
    onPlayerLoadeddata (player) {
      // console.log('player Loadeddata!', player)
    },
    onPlayerWaiting (player) {
      // console.log('player Waiting!', player)
    },
    onPlayerPlaying (player) {
      // console.log('player Playing!', player)
    },
    onPlayerTimeupdate (player) {
      // console.log('player Timeupdate!', player.currentTime())
    },
    onPlayerCanplay (player) {
      // console.log('player Canplay!', player)
    },
    onPlayerCanplaythrough (player) {
      // console.log('player Canplaythrough!', player)
    },
    // or listen state event
    playerStateChanged (playerCurrentState) {
      // console.log('player current update state', playerCurrentState)
    },
    // player is ready
    playerReadied (player) {
      // eslint-disable-next-line no-unused-vars
      var hls = player.tech({ IWillNotUseThisInPlugins: true }).hls
      player.tech_.hls.xhr.beforeRequest = function (options) {
        // console.log(options)
        return options
      }
    }
  },
  // eslint-disable-next-line no-dupe-keys
  mounted () {
    var video = document.getElementById('video')
    video.removeAttribute('controls')
  }
}
</script>

<style>
  .video-js .vjs-progress-control.vjs-control {
    display: none;
  }.vjs-big-play-button{}
</style>

 

期间出现了一个问题,就是我家主公不想要视频下方的进度条!这个我解决了半天,于是,我在Video.js看了它的文档!其中!!!

vue中使用video-player和百度地图本以为把这个设置为true就ok了,结果不行!这是我就在群里问了一下,也就是那位老哥说吧controls设置为false,试了一下!还是不行,他说他从github上的案例就默认就没有!然后我仔细看了看,发现少些引入些东西

// videojs
  import videojs from 'video.js'
  window.videojs = videojs
   
  // hls plugin for videojs6
  require('videojs-contrib-hls/dist/videojs-contrib-hls.js')

 

加入之后就ojbk了!

<!-------------------------------------------华丽的分割线---------------------------------------------------->

第二部分!使用百度地图标点,画出轨迹!

1.在index.html下引入百度地图的js!

vue中使用video-player和百度地图

马赛克是啥啊!马赛克是你在百度地图开发平台上的东东!下图

vue中使用video-player和百度地图

3.使用!

<template>
  <div style="height:100%;">
        <div id="myMap" class="myMapClass" ref="myMap">
        </div>
      </div>
</template>

 

<style scoped>
  .myMapClass {
    width: 100%;
    height: 800px;
  }
</style>

标点呢网上已经也有现成的列子,这里我也不贴他的了,毕竟我也做了!绘图呢,我也做了!代码如下!

文中有注解!

<template>
  <div style="height:100%;">
        <div id="myMap" class="myMapClass" ref="myMap">
        </div>
      </div>
</template>

<script>
  export default {
    name: 'bdMap',
    components: {},
    data () {
      return {
        markerArr: [
          { title: "苏州有限公司", point: "113.264531|23.157003", address: "工业园区", tel: "10086", contact: "陈先生" },
          { title: "南京有限公司", point: "113.330934|23.113401", address: "相城区", tel: "12306", contact: "陈先生" },
          { title: "上海有限公司", point: "113.310854|23.113605", address: "外滩", tel: "0521846555", contact: "陈先生" }
          ]
      };
    },
    mounted () {
      this.initMap()
    },
    methods: {
      initMap () {
        this.createMap(); //创建地图
        this.setMapEvent();//设置地图事件
        this.addMapControl();//向地图添加控件
        this.addMarker();//向地图中添加marker
      },
      createMap () {
        var map = new BMap.Map(this.$refs.myMap);//在百度地图容器中创建一个地图
        var point = new BMap.Point(113.312213, 23.147267);//定义一个中心点坐标
        map.centerAndZoom(point, 13);//设定地图的中心点和坐标并将地图显示在地图容器中
        window.map = map;//将map变量存储在全局
      },
      setMapEvent () {
        map.enableDragging();//启用地图拖拽事件,默认启用(可不写)
        map.enableScrollWheelZoom();//启用地图滚轮放大缩小
        map.enableDoubleClickZoom();//启用鼠标双击放大,默认启用(可不写)
        map.enableKeyboard();//启用键盘上下左右键移动地图
      },
      addMapControl () {
        //向地图中添加缩放控件
        var ctrl_nav = new BMap.NavigationControl({
          anchor: BMAP_ANCHOR_TOP_LEFT,
          type: BMAP_NAVIGATION_CONTROL_LARGE
        });
        map.addControl(ctrl_nav);
        //向地图中添加缩略图控件
        var ctrl_ove = new BMap.OverviewMapControl({ anchor: BMAP_ANCHOR_BOTTOM_RIGHT, isOpen: 1 });
        map.addControl(ctrl_ove);
        //向地图中添加比例尺控件
        var ctrl_sca = new BMap.ScaleControl({ anchor: BMAP_ANCHOR_BOTTOM_LEFT });
        map.addControl(ctrl_sca);
      },
      addMarker () {
        var markerArr =this.markerArr;

        var point = new Array();//定义数组标注经纬信息

        var marker = new Array();//定义数组点对象信息

        var info = new Array();//定义悬浮提示信息
        //debugger
        for (var i = 0; i < markerArr.length; i++) {//遍历
          var infoA = markerArr[i].point.split("|")[0];//分割|
          var infoB = markerArr[i].point.split("|")[1];

          point[i] = new window.BMap.Point(infoA, infoB);

          marker[i] = new window.BMap.Marker(point[i]);

          map.addOverlay(marker[i]);

          marker[i].setAnimation(BMAP_ANIMATION_BOUNCE);

          var label = new window.BMap.Label(markerArr[i].title, { offset: new window.BMap.Size(20, -10) });
          marker[i].setLabel(label);

          info[i] = new window.BMap.InfoWindow("<p style='font-size:12px;line-height:1.8em;'" + markerArr[i].title + "</br>地址:" + markerArr[i].address + "</br> 电话:" + markerArr[i].tel + "</br> 联系人:" + markerArr[i].contact + "</p>");//悬浮提示信息
        }
        marker[0].addEventListener("mouseover", function () {
          this.openInfoWindow(info[0]);//悬浮监听提示方法
        });
        marker[1].addEventListener("mouseover", function () {
          this.openInfoWindow(info[1]);//悬浮监听提示方法
        });
        marker[2].addEventListener("mouseover", function () {
          this.openInfoWindow(info[2]);//悬浮监听提示方法,
        });


        //轨迹
        var sy = new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW,{
          scale: 0.6,//图标缩放大小
          strokeColor: 'red',//设置矢量图标的线填充颜色
          strokeWidth: '3',//设置线宽
        });
        var icons = new BMap.IconSequence(sy,'10','30');
        
        //轨迹设置
        var polyline = new BMap.Polyline(point,{
          enanleEditing: false,
          enanleClicking: true,
          icons: [icons],
          strokeWidth: '8',
          strokeOpacity: 0.8,
          strokeColor: "#18a45b"
        });
        map.addOverlay(polyline);
      },
    }
  }
</script>

<style scoped>
  .myMapClass {
    width: 100%;
    height: 800px;
  }
</style>

 

多条轨迹如下

在今天下午的不懈努力和我领导亲切关怀下,我写出了终极版!

<template>
  <div style="height:100%;">
        <div id="myMap" class="myMapClass" ref="myMap">
        </div>
    <Row style="width: 150px;position: absolute;left: 350px;top: 135px;">
      <Select v-model="vaule" filterable  @on-change="onchange(vaule)">
        <Option v-for="(item, index) in this.markerArr" :value="index" >{{ item.chepai }}</Option>
      </Select>
    </Row>
      </div>
</template>

<script>
  export default {
    name: 'bdMap',
    components: {},
    data () {
      return {
          markerArr: [
            {  point: ["39.1012843854|117.1860914116","39.0990118876|117.1954160088","39.0901873621|117.2058553842","39.0834867789|117.2136097564"], chepai: "津A12884", chexing: "法拉利",yanse:"红色", jiashiyuan: "李先生", Idcard :"142303165541111211"},
            {  point: ["39.1107494560|117.1940658691","39.1121030411|117.2083491493","39.1143233784|117.2207309995","39.1166368041|117.2313138544"], chepai: "津B12264", chexing: "保时捷",yanse:"红色", jiashiyuan: "冯先生", Idcard :"142303165541111212"},
            {  point: ["39.1376493173|117.1481853019","39.1348236767|117.1661310346","39.1300931602|117.1691256109","39.1151555777|117.1804954479"], chepai: "津A12964", chexing: "宝马",yanse:"红色", jiashiyuan: "高先生", Idcard :"142303165521111213"},
            {  point: ["39.1341047856|117.2357422924","39.1288445770|117.2359940634","39.1273996003|117.2430131073","39.1241833161|117.2400281058"], chepai: "津J-AE86", chexing: "拖拉机",yanse:"红色", jiashiyuan: "郭先生", Idcard :"142303165541111214"}
          ],
        vaule :"",
        info :[],
        map :''
      };
    },
    mounted () {
      this.initMap()
    },
    methods: {
      initMap () {
        this.createMap(); //创建地图
        this.setMapEvent();//设置地图事件
        this.addMapControl();//向地图添加控件

        // 绘制全部轨迹
        for (var i in this.markerArr){
          //debugger
          this.drawLine(this.markerArr[i]);
        }
      },
      createMap () {
        var map = new BMap.Map(this.$refs.myMap);//在百度地图容器中创建一个地图
        this.map = map
        var point = new BMap.Point(117.1860914116,39.1012843854);//定义一个中心点坐标
        map.centerAndZoom(point, 13);//设定地图的中心点和坐标并将地图显示在地图容器中
        window.map = map;//将map变量存储在全局
      },
      setMapEvent () {
        map.enableDragging();//启用地图拖拽事件,默认启用(可不写)
        map.enableScrollWheelZoom();//启用地图滚轮放大缩小
        map.enableDoubleClickZoom();//启用鼠标双击放大,默认启用(可不写)
        map.enableKeyboard();//启用键盘上下左右键移动地图
      },
      addMapControl () {
        //向地图中添加缩放控件
        var ctrl_nav = new BMap.NavigationControl({
          anchor: BMAP_ANCHOR_TOP_LEFT,
          type: BMAP_NAVIGATION_CONTROL_LARGE
        });
        map.addControl(ctrl_nav);
        //向地图中添加缩略图控件
        var ctrl_ove = new BMap.OverviewMapControl({ anchor: BMAP_ANCHOR_BOTTOM_RIGHT, isOpen: 1 });
        map.addControl(ctrl_ove);
        //向地图中添加比例尺控件
        var ctrl_sca = new BMap.ScaleControl({ anchor: BMAP_ANCHOR_BOTTOM_LEFT });
        map.addControl(ctrl_sca);
      },

      drawLine(line){
       // debugger
        //轨迹
        var sy = new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW,{
          scale: 0.6,//图标缩放大小
          strokeColor: 'red',//设置矢量图标的线填充颜色
          strokeWidth: '3',//设置线宽
        });
        var icons = new BMap.IconSequence(sy,'10','30');
        
        //悬浮信息
        var info = new BMap.InfoWindow("<p style='font-size:12px;line-height:1.8em;'"
            +  "</br>车牌:" + line.chepai +
            "</br> 车型:" + line.chexing +
            "</br> 颜色:" + line.yanse +
            "</br> 驾驶员:" + line.jiashiyuan +
            "</br> 身份证:" + line.Idcard +
            "</p>");
        //把悬浮信息放入全局变量,目的是为了下拉框使用
        this.info.push(info);

          var points = [];
          for (var i in line.point){
              var longitude = line.point[i].split("|")[1];
              var latitude = line.point[i].split("|")[0];
              var newPoint = new BMap.Point(longitude, latitude);
              points.push(newPoint);

                //最后一个坐标点显示图片,和显示悬浮内容
              if(parseInt(i) === line.point.length-1){
                // debugger
                var marker = new BMap.Marker(newPoint);
                map.addOverlay(marker);
                marker.addEventListener("mouseover", function () {
                    map.openInfoWindow(info,newPoint);//悬浮监听提示方法
                  });
              }
          }
      
        //轨迹设置
         var polyline = new BMap.Polyline(points,{
            enanleEditing: false,
            enanleClicking: true,
            icons: [icons],
            strokeWidth: '8',
            strokeOpacity: 0.8,
            strokeColor: "#18a45b"
          });
          map.addOverlay(polyline);
        },


      // <!--下拉点击事件开始-->
      onchange(res) {
        for (var i in this.markerArr) {
          if(parseInt(i) === res){
            var infoA = this.markerArr[i].point[i].split("|")[1];//分割|
            var infoB = this.markerArr[i].point[i].split("|")[0];
            var p  = new window.BMap.Point(infoA, infoB);
            map.openInfoWindow(this.info[i],p);//悬浮监听提示方法
          }
          
        }
      }
      // <!--点击事件结束-->



    }
  }
</script>

<style scoped>
  .myMapClass {
    width: 100%;
    height: 100%;
  }
</style>

加入我们群

如果有需要,欢迎可以加入我们的QQ群!(QQ搜索 816175200,加入我们的QQ群吧!)
有任何问题,也可以加入我们的QQ群,欢迎交(che)流(dan)!也欢迎参观我的博客www.aquestian.cn