如果你想把事情做好,就把它贴错。
在内层管道的悠久历史中,如果您请求代码帮助,通常不会得到太多响应。但是,如果你发布代码并断言它是理想的、完美的,是你原始自我的永恒反映,那么人们会给它一个好机会。
为什么
在嵌入幻灯片、YouTube视频等我解释说,为YouTube制作自己的嵌入版本可以让用户下载半兆字节的跟踪脚本(至少在播放视频之前)。
我做了一个web组件版本也有,但指出它可能需要一些帮助。我本来想在组件中包含一个Vimeo版本,但在使用Vimeo缩略图时遇到了困难。
我认为我可以分享我所拥有的,而社区可以在他们认为合适的时候忽略它,而不是在我明显不擅长的事情上浪费更多时间。
HTML
我为web组件构建了HTML,这样,如果JavaScript从未加载、中断或以某种令人兴奋的方式失败,用户仍将拥有有效的链接和上下文。
然而,要使其工作,作者需要付出一点努力,以确保链接的格式符合特定的方式。主要是因为唯一的ID段塞,在YouTube和Vimeo URL的末尾,是我用来抓取海报图像和构建嵌入式框架的。
自定义元素中的HTML被保留,有助于确保嵌入本身是否被破坏或阻止,即使脚本成功运行后,用户仍将拥有有效的链接和上下文。
<youtube-vimeo-embed><p>YouTube:<a href=“https://youtu.be/dQw4w9WgXcQ网站“>Rick Astley,“永不放弃”,3:32</p></youtube-vimeo-embed>
<youtube-vimeo-embed><p>Vimeo:<a href=“https://vimeo.com/77377158“>键和皮:视频聊天,2:12</p></youtube-vimeo-embed>
您可以传入纵横比。我设置好了纵横比:16/9
默认情况下,但如果添加数据比率
到<youtube-vimeo-embed>
您可以传入自己的属性值。
由于发布后不久的评论,我还添加了对数据发布器
。给它一个完整的URL,如果提供了,就不会调用YouTube或Vimeo,从而节省带宽,也不会为YouTube提供灯塔。否则,它会从YouTube或Vumbnail中提取图像。
脚本
该函数解析URL并使用它来决定视频是YouTube还是Vimeo。你必须使用优图.be域。
然后我创建一个iframe并设置我想要的属性标题
从HTML作者您所写的文本中。
对于YouTube,我使用无cookie嵌入来模糊地承认隐私(它仍然是YouTube),并提取它用于视频的缩略图。Vimeo有点棘手,因为我需要对缩略图进行API调用,所以我使用vumbnail.com网站.
如果您有查询字符串值,函数会将它们附加到URL的末尾,在?自动播放=1
。我没有深入研究所有可能的查询字符串值,以了解它们如何影响显示,因此可能需要对您的用例进行调整。
类YouTubeVimeoEmbed扩展了HTMLElement{// https://github.com/aardrian/youtube-vimeo-embed构造函数(){super();}已连接回拨(){var iframe=document.createElement('iframe');var theLink=this.querySelector('a');var vidPoster=this.getAttribute(“数据主体”);var vidSlug;var vidPreSlug=theLink.getAttribute('href').split('/')[3];var vidQueryString=“”;var vidQueryCheck=vidPreSlug.indexOf('?');if(vidQueryCheck==-1){vidSlug=vidPreSlug;}其他{vidSlug=vidPreSlug.substring(0,vidQueryCheck);vidQueryString=“&”+vidPreSlug.substring(vidQueryCheck+1);}if(theLink.getAttribute('href').substring(8,13)=='youtu'){var isYouTube=1;}其他{var为YouTube=0;}iframe.setAttribute('title',theLink.textContent);iframe.setAttribute('allow','autoplay');iframe.setAttribute('allowfullscreen','');iframe.setAttribute('loading','lazy');if(是YouTube){iframe.setAttribute('src','https://www.youtube-nocookie.com/embed/'+vidSlug);var vidLink='https://www.youtube-nocookie.com/embed/“+vidSlug+”?autoplay=1'+vidQueryString;if(视频海报){var bgImg=视频海报;}其他{var bgImg='https://i3.ytimg.com/vi/'+vidSlug+'/hqdefault.jpg';}}其他{iframe.setAttribute('src','网址:https://vimeo.com/'+vidSlug);var vidLink='https://player.vimeo.com/video(视频)/“+vidSlug+”?autoplay=1&dnt=1'+vidQueryString;if(视频海报){var bgImg=vidPoster;}其他{var bgImg='https://vumbnail.com网站/'+vidSlug+'.jpg';}}if(this.getAttribute('data-ratio')){iframe.setAttribute('style','spect-ratio:'+this.getAttribute('data-ratio')+';宽度:100%;');}其他{iframe.setAttribute('style','spectro-ratio:16/9;width:100%;');}iframe.setAttribute('srcdoc','<style>body{background-image:url('+bgImg+'a: 焦点圆:第一个子元素+圆,a:悬停圆:第一子元素+圆{stroke-dasharray:.4,.4;}a:焦点多边形,a:悬浮多边形{stroke:#fff;stroke-width:.75;}</style><a href=“'+vidLink+'”><svg viewBox=“0 0 16 16”width=“96”height=“96“xmlns=”http://www.w3.org/2000/svg“aria-hidden=”true“><circle cx=”50%“cy=”50%f“stroke-linejoin=”round“></polygony></svg>Play</a>');this.appendChild(iframe);}}customElements.define('youtube-vimeo-embed',YouTubeVimeoEmbed);
请注意,我并没有删除原始链接和周围的文本。它是自己的退路。
示例
YouTube上的经典RickRoll,但你知道它就要来了。
<youtube-vimeo-embed><p>YouTube:<a href=“https://youtu.be/dQw4w9WgXcQ网站“>Rick Astley,“永不放弃”,3:32</p></youtube-vimeo-embed>
YouTube网站:Rick Astley,“永远不会放弃你”, 3:32
Vimeo似乎捕捉了我们今天在非爱尔兰共和国会议上的经验。
<youtube vimeo嵌入><p>Vimeo:<a href=“https://vimeo.com/77377158“>关键与关键:视频聊天,2:12</p></youtube-vimeo-embed>
Vimeo公司:关键点(&P):视频聊天, 2:12
YouTube上的“超宽”视频使用data-ratio=“21/9”
. The海报形象是作者以错误的尺寸创作的;即使不理想,收成也是不可避免的。
<youtube-vimeo-embed data-ratio=“21/9”><p>YouTube:<a href=“https://youtu.be/DsoZI4TLqMc网站“>《男孩与苍鹭》预告片,1:50</p></youtube-vimeo-embed>
YouTube网站:男孩和苍鹭预告片, 1:50
这是我设置的Vimeo的方形视频数据比率=“1/1”
。如果你在你的网站上使用这个,你可能想有自己的风格来限制iframe的高度90伏
(或任何适合您的站点的选项)并依赖纵横比。我选择在这里不那么规范。
<youtube-vimeo-embed data-ratio=“1/1”><p>Vimeo:<a href=“https://vimeo.com/31817442“>没有撤销——克里斯托夫·迪林杰(Christophe Dillinger),2:14</p></youtube-vimeo-embed>
Vimeo公司:没有撤销——克里斯托夫·迪林杰, 2:14
哦,嘿,这里有一位专家在揭穿可访问性覆盖。你知道,如果你想使用测试视频嵌入到你的项目中。由于以下原因,视频开始31秒开始=31在查询字符串中。
<youtube-vimeo-embed><p>YouTube:<a href=“https://youtu.be/PLXAuxZKjs?start=31“>WordPress无障碍日的Overlay Underhelm,46:48</p></youtube-vimeo-embed>
YouTube网站:WordPress无障碍日的Overlay Underhelm, 46:48
此示例在14秒内开始,使用自定义海报图像(通过数据发布器
),并将纵横比设置为1:1,因为我的小我坚持海报图像更引人注目:
<youtube-vimeo-embed data-poster=“https://adrianroseli.com/wp-content/uploads/2024/06/web-components-logo.png“data-ratio=”1/1“><p><a href=“https://youtu.be/Sq5oiHjwFxI?start=14“>Kevin Powell:与Dave Rupert一起创建Web组件,持续了一个半小时。</p></youtube-vimeo-embed>
Kevin Powell:与Dave Rupert一起创建Web组件持续一个半小时以上。
GitHub回购
这是完美的,你们都很尴尬,无法假装不一样。你可以通过忽略GitHub回购<youtube-vimeo-embed>
.
]]>