欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS實現(xiàn)預(yù)加載視頻音頻/視頻獲取截圖(返回canvas截圖)

 更新時間:2017年10月09日 15:29:55   作者:capricorncd  
這篇文章主要介紹了JS實現(xiàn)預(yù)加載視頻音頻/視頻獲取截圖(返回canvas截圖)的相關(guān)資料,需要的朋友可以參考下

 #load-media.js

/**
 * Create by Capricorncd 2017
 */
// 同域資源實現(xiàn)視頻截圖,可上傳的圖片數(shù)據(jù)格式
// 非同域資源實現(xiàn)canvas截圖預(yù)覽
// 提示碼
const CODES = {
 0: 'success',
 1: 'The url is not valid',
 2: 'onerror'
}
/**
 * constructor
 * @param opts.url 音頻|視頻URL
 * @param opts.type 'audio|video'
 * @param opts.callback 回調(diào)函數(shù)
 */
function loadMedia(opts) {
 this.callback = opts.callback || function (res) {
  console.log(res);
 }
 // 初始化
 this.init(opts);
}
// prototype
loadMedia.prototype = {
 /**
  * 初始化media
  * @param url
  */
 init: function (opts) {
  let self = this;
  if (!opts.url || typeof opts.url !== 'string') {
   this.callback({code: 1, msg: CODES[1]});
   return;
  }
  // 創(chuàng)建media
  let mediaType = opts.type === 'audio' ? 'audio' : 'video';
  this.media = document.createElement(mediaType);
  console.log('this.media', this.media);
  // loaded
  this.listener('canplaythrough', function (e) {
   // 截圖
   if (mediaType === 'video') {
    self.screenshot();
   } else {
    self.callback({
     code: 0,
     msg: CODES[0],
     thumb: null,
     media: this.media,
     canvas: null
    });
   }
  });
  // error
  this.listener('error', function (e) {
   self.callback({code: 2, msg: CODES[2], data: e});
  })
  this.media.setAttribute('src', opts.url);
 },
 screenshot: function () {
  // create canvas
  let canvas = document.createElement('canvas');
    canvas.width = this.media.videoWidth;
    canvas.height = this.media.videoHeight;
  let ctx = canvas.getContext('2d');
  // 截取
  ctx.drawImage(this.media, 0, 0);
  let thumb = null;
  // 非跨域資源
  // !!非同域資源無法獲取數(shù)據(jù)
  try {
   let type = 'image/png';
   let data = canvas.toDataURL(type);
   thumb = this.toBlobData(data, type);
  } catch (e) {}
  this.callback({
   code: 0,
   msg: CODES[0],
   thumb: thumb,
   media: this.media,
   canvas: canvas
  })
 },
 // 數(shù)據(jù)轉(zhuǎn)換
 toBlobData: function (data, type) {
  // 獲取base64數(shù)據(jù)
  // base64數(shù)據(jù)格式:
  // "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAkGB+wgHBgkIBwgKCgkLDRYPDQw//9k="
  data = window.atob(data.split(',')[1]);
  let ia = new Uint8Array(data.length);
  for (let i = 0; i < data.length; i++) {
   ia[i] = data.charCodeAt(i);
  };
  // canvas.toDataURL 返回的默認(rèn)格式是 image/png
  return new Blob([ia], {type: type});
 },
 /**
  * addEventListener 事件監(jiān)聽
  * @param en EventName
  * @param callback
  */
 listener: function (en, callback) {
  this.media.addEventListener(en, function (e) {
   if (callback) {
    callback(e);
   } else {
    console.warn(this);
   }
  }, false);
 }
 /**
  * 資源是否跨域
  * @param url 資源地址
  * @returns {boolean}
  */
 // isCrossDomain: function (url) {
 //  let loc, host, protocol;
 //  loc = window.location;
 //  host = loc.host;
 //  protocol = loc.protocol;
 //  // 是否為http鏈接
 //  if (/(http|https):\/\//.test(url)) {
 //   if (url.indexOf(protocol + '//' + host) >= 0) {
 //    return false;
 //   } else {
 //    return true;
 //   }
 //  }
 //  // './xxx.mp4' '/xxx.mp4' 'xxx.mp4'
 //  return false;
 // }
}

export default loadMedia;

// 參考資料
// HTML5的Video標(biāo)簽的屬性,方法和事件匯總
// http://www.cnblogs.com/TF12138/p/4448108.html
# 使用
import loadMedia from '@/common/js/load-media'
let loadVideo = new loadMedia({
 type: 'video',
 url: 'http://xmqvip1-1253933147.file.myqcloud.com/chat/video/60/2017/09/29/qgj1c8K7oaYn-SCVideo-Merged.mp4',
 callback: handleCallback
})
function handleCallback (res) {
    console.log(res)
    // canplaythrough
    if (res.code === 0) {
    }
    // error
    if (res.code === 2) {
    }
   }

總結(jié)

以上所述是小編給大家介紹的JS實現(xiàn)預(yù)加載視頻音頻/視頻獲取截圖(返回canvas截圖),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • JS 頁面自動加載函數(shù)(兼容多瀏覽器)

    JS 頁面自動加載函數(shù)(兼容多瀏覽器)

    兼容多個瀏覽器的自動加載函數(shù)。
    2009-05-05
  • JavaScript實現(xiàn)拖拽功能

    JavaScript實現(xiàn)拖拽功能

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)拖拽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • JS判斷元素是否在可視區(qū)域技巧詳解

    JS判斷元素是否在可視區(qū)域技巧詳解

    這篇文章主要為大家介紹了JS判斷元素是否在可視區(qū)域技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 微信小程序?qū)崿F(xiàn)左側(cè)滑欄過程解析

    微信小程序?qū)崿F(xiàn)左側(cè)滑欄過程解析

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)左側(cè)滑欄過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • 微信小程序圖片自適應(yīng)實現(xiàn)解析

    微信小程序圖片自適應(yīng)實現(xiàn)解析

    這篇文章主要介紹了微信小程序圖片自適應(yīng)實現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • 為你的微信小程序體積瘦身詳解

    為你的微信小程序體積瘦身詳解

    這篇文章主要給大家介紹了關(guān)于微信小程序瘦身的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • Javascript設(shè)計模式之發(fā)布訂閱模式

    Javascript設(shè)計模式之發(fā)布訂閱模式

    發(fā)布---訂閱模式又叫觀察者模式,它定義了對象間的一種一對多的關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象,當(dāng)一個對象發(fā)生改變時,所有依賴于它的對象都將得到通知
    2022-12-12
  • 通過實例解析JavaScript常用排序算法

    通過實例解析JavaScript常用排序算法

    這篇文章主要介紹了通過實例解析JavaScript常用排序算法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • 淺談webpack下的AOP式無侵入注入

    淺談webpack下的AOP式無侵入注入

    下面小編就為大家?guī)硪黄獪\談webpack下的AOP式無侵入注入。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 詳談JavaScript 匿名函數(shù)及閉包

    詳談JavaScript 匿名函數(shù)及閉包

    本文詳細(xì)介紹了匿名函數(shù)、閉包、并給出了詳細(xì)的例子以及詳細(xì)的注意事項,是篇非常非常不錯的文章,推薦給大家。
    2014-11-11

最新評論