Bilibili-Evolved/min/screenshot.min.js
2019-05-16 17:59:23 +08:00

1 line
1.5 KiB
JavaScript

(()=>{return(e,t)=>{let n=null;let s=null;const o=e=>{if(n===null||s===null){n=document.createElement("canvas");n.width=e.videoWidth;n.height=e.videoHeight;s=n.getContext("2d")}return new Promise((t,o)=>{if(n===null||s===null){o("视频截图失败: canvas 未创建或创建失败.");return}s.drawImage(e,0,0);n.toBlob(e=>{if(e===null){o("视频截图失败: 创建 blob 失败.");return}t(e)},"image/png")})};t.applyStyle("videoScreenshotStyle");document.body.insertAdjacentHTML("beforeend",`\n <div class="video-screenshot-list">\n <video-screenshot v-for="screenshot of screenshots" v-bind:blob="screenshot"></video-screenshot>\n </div>\n`);Vue.component("video-screenshot",{data(){return{objectUrl:""}},props:{blob:Blob},methods:{created(){this.objectUrl=URL.createObjectURL(this.blob)}},template:`<div class="video-screenshot-thumbnail">\n <img v-bind:src="objectUrl">\n </div>`});const i=new Vue({el:".video-screenshot-list",data:{screenshots:[]}});Observer.videoChange(async()=>{const e=await SpinQuery.select("#bofqi video");const t=await SpinQuery.select(".bilibili-player-video-time");if(e===null||t===null||document.querySelector(".video-take-screenshot")){return}t.insertAdjacentHTML("afterend",`\n <div class="video-take-screenshot" title="截图">\n <span><i class="mdi mdi-camera"></i></span>\n </div>`);const n=document.querySelector(".video-take-screenshot");if(n===null){return}n.addEventListener("click",async()=>{const t=await o(e);i.screenshots.push(t)})});return{export:{takeScreenshot:o,screenShotsList:i}}}})();