Меня как старшего архитектора Мою уже не устраивает оплачиваемый сквоттинг.Вчера днём мне было нечего делать.Написал такой больной инструмент.Эффект как на рисунке.Эпизод Яркого меча
На самом деле, идея тоже очень проста, используйте js для динамической загрузки тега видео, поместите видео, а затем используйте холст, чтобы регулярно делать снимок видео и помещать его в тег ссылки.Опыт блогаВы также можете перетащить его на панель избранного
Код видео на станции B, если вы заинтересованы, двигайтесь дальшевоооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо по
1. Динамически загружать js
<button id="btn">测试</button>
<script>
document.getElementById('btn').addEventListener('click',()=>{
var script =document.createElement('script')
script.type='text/javascript'
script.src='./moyu.js'
document.body.appendChild(script)
}, false)
</script>
moyu.js
alert(2)
Нажмите кнопку, чтобы увидеть всплывающее окно
2. js загрузить видео
Та же логика, как и в нашем видео ji.mp4
// moyu.js
class Moyu{
constructor(width,name){
this.width = width
this.name = name
}
initVideo(){
let video = document.createElement('video')
video.width=this.width
video.controls="controls"
video.src="./video/"+this.name+".mp4"
document.body.appendChild(video)
this.video = video
}
init(){
this.initVideo()
}
}
const m = new Moyu('200','ji')
m.init()
###3. Скриншот видео на холсте
Canvas может напрямую рисовать видео, отслеживать видеособытия и регулярно рисовать Давайте сначала поместим его в img и нарисуем favcion размером 32 * 32px.
инициализировать холст
initCanvas(){
this.canvas = document.createElement('canvas')
this.canvas.width = this.canvas.height = 32
}
Слушайте видео событий
bindVideoEvents(){
this.video.addEventListener('timeupdate',()=>{
this.videoToImage()
},false)
}
видео рисунок
videoToImage(){
const context = this.canvas.getContext('2d')
context.clearRect(0, 0, this.SIDE, this.SIDE)
context.drawImage(this.video, 0, 0, this.SIDE, this.SIDE)
const url = this.canvas.toDataURL('image/png')
document.getElementById('img').src= url
}
чрезмерный эффект
4. Установите значок
Это еще проще, ищите иконку в теге ссылки rel и ставьте href, если нет, добавьте ссылку
setFavico(){
const url = this.canvas.toDataURL('image/png')
let icons = [...document.querySelectorAll('head>link')]
.filter(link=>{
const rel = link.getAttribute('rel') || ''
return rel.indexOf('icon')>-1
})
if(icons.length){
icons.forEach(icon=>icon.setAttribute('href', url))
}else{
const icon = document.createElement('link')
icon.setAttribute('rel', 'icon')
icon.setAttribute('href', url)
document.querySelector('head').appendChild(icon)
}
}
5. Последующие действия
Полный код, менее 60 строк
class Moyu{
constructor(width,name){
this.width = width
this.name = name
this.SIDE = 32 // favcion边长32px
}
initCanvas(){
this.canvas = document.createElement('canvas')
this.canvas.width = this.canvas.height = this.SIDE
}
initVideo(){
let video = document.createElement('video')
video.width=this.width
video.controls="controls"
video.src="./video/"+this.name+".mp4"
video.crossOrigin = "anonymous"
video.autoplay = "autoplay"
document.body.appendChild(video)
this.video = video
this.bindVideoEvents()
}
bindVideoEvents(){
this.video.addEventListener('timeupdate',()=>{
this.videoToImage()
},false)
}
videoToImage(){
const context = this.canvas.getContext('2d')
context.clearRect(0, 0, this.SIDE, this.SIDE)
context.drawImage(this.video, 0, 0, this.SIDE, this.SIDE)
this.setFavico()
}
setFavico(){
const url = this.canvas.toDataURL('image/png')
let icons = [...document.querySelector('head').querySelectorAll('link')]
.filter(link=>{
const rel = link.getAttribute('rel') || ''
return rel.indexOf('icon')>-1
})
if(icons.length){
icons.forEach(icon=>icon.setAttribute('href', url))
}else{
const icon = document.createElement('link')
icon.setAttribute('rel', 'icon')
icon.setAttribute('href', url)
document.querySelector('head').appendChild(icon)
}
}
init(){
this.initCanvas()
this.initVideo()
}
}
const m = new Moyu('200','ji')
m.init()
Я обнаружил, что писать инструменты для рыбалки гораздо приятнее, чем делать проекты. В будущем я найду время, чтобы сделать серию. Если у вас есть новые идеи для рыбалки, вы можете оставить сообщение. Я могу придумать все.
- Игра в веб-игры не влияет на внешний вид
- Борьба с арендодателем в командной строке
- играть в игры в vscode
- Этот favcion выкладывает видео, а в следующей версии обновят прогресс-бар и панель управления.Он вроде умеет делать прямую трансляцию, а 32px вроде умеет делать игру в тетрис
Процесс написания кода я записал на видео поставил Б станцию и так вы просмотрели обновление вышло
Некоторые веб-сайты ограничивают адрес статических ресурсов, таких как Nuggets Zhihu, вы можете использовать станцию B или тест Baidu.
Создайте группу, ловите рыбу вместе, добавьте меня в WeChat, если вы не можете войтиwoniu_ppp