HTML+CSS+JavaScript实战(一个简易的视频播放器)

效果如下:

在这里插入图片描述

思路很常规,无需注释即可看懂(其实是懒得敲 bushi)
没有注释也能跑,so直接上源码~

感谢 夏柔站长 提供的免费API

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="styles.css">
    <title>视频播放器</title>
</head>
<body>
    <div class="container">
        <h1>在线视频播放器</h1>
        <div id="video-container">
            <video id="videoPlayer" controls width="1000" height="600" autoplay></video>
        </div>
        <button id ='check_bt_1'onclick="loadVideo_1()">搞笑视频</button>
        <button id ='check_bt_2'onclick="loadVideo_2()">甜妹视频</button>
        <button id ='check_bt_3'onclick="loadVideo_3()">纯情女高</button>
        <button id ='check_bt_4'onclick="loadVideo_4()">清纯美女</button>
        <button id ='check_bt_5'onclick="loadVideo_5()">穿搭视频</button>
        <button id ='check_bt_6'onclick="loadVideo_6()">随机视频</button>
    </div>
    <script src="https://apii.ctose.cn/live2d/Source-One/default/autoload.js"></script>
    <script src="scripts.js"></script>
</body>
</html>

styles.css

body {
    font-family: Arial, sans-serif;
    background-color: #193761;
    margin: 0;
    padding: 0;
}

.container {
    /* max-width: 800px; */
    margin: 50px auto;
    text-align: center;
    background-color: #9cdcfe;
    padding: 20px;
    border-radius: 8px;
    box-shadow: 0 0 10px rgba(254, 93, 127, 1);
}

h1 {
    color: #333;
    font-family: "Chalkduster", cursive;
    font-size: 40px;
}


#videoPlayer {
    display: block;
    margin-left: auto;
    margin-right: auto;
    /* border: 2px solid #f8d714; */
    border-radius: 10px;
    box-shadow: 0 2px 4px rgba(245, 7, 58, 0.8);
    outline: none;
    max-width: 100%;
}

#video-container {
    margin-top: 20px;
}

#check_bt_1 {
    left: -164px;
}

#check_bt_2 {
    left: -99px;
}

#check_bt_3 {
    left: -34px;
}

#check_bt_4 {
    left: 31px;
}

#check_bt_5 {
    left: 96px;
}

#check_bt_6 {
    left: 161px;
}

button {
    padding: 10px 20px;
    font-size: 16px;
    background-color: #2bc3d1;
    color: #fff;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    outline: none;
    margin-top: 20px;
    position: relative;
}

button:hover {
    background-color: #ffcd43;
}

@media screen and (max-width: 480px) {
    .container {
        margin: 20px auto;
        padding: 10px;
    }

    h1 {
        font-size: 26px;
    }

    #videoPlayer {
        max-width: 100%;
    }

    #check_bt_1,
    #check_bt_2,
    #check_bt_3,
    #check_bt_4,
    #check_bt_5,
    #check_bt_6 {
        left: auto;
    }
}

scripts.js

function loadVideo_1() {
    
    const button = document.getElementById('check_bt_1');
    button.innerHTML = '加载中'; // 更改按钮内容为"正在加载中"
    const apiUrl = 'https://v.api.aa1.cn/api/api-video-gaoxiao/index.php?aa1=json';
    fetch(apiUrl)
        .then(response => response.json())
        .then(data => {
            const videoUrl = data.mp4;

            const videoElement = document.getElementById('videoPlayer');
            videoElement.src = videoUrl;
            videoElement.autoplay = true;
            const videoContainer = document.getElementById('video-container');
            videoContainer.innerHTML = ''; // 清空容器
            videoContainer.appendChild(videoElement);
            button.innerHTML = '搞笑视频';
        })
        .catch(error => {
            button.innerHTML = '加载失败';
            console.error('Error loading video:', error);
        });
       
}

function loadVideo_2() {
    const button = document.getElementById('check_bt_2');
    button.innerHTML = '加载中'; // 更改按钮内容为"正在加载中"
    const videoUrl = "https://api.8uid.cn/tm.php?type=video";
    const videoElement = document.getElementById('videoPlayer');
    videoElement.src = videoUrl;
    videoElement.autoplay = true;
    const videoContainer = document.getElementById('video-container');
    videoContainer.innerHTML = ''; // 清空容器
    videoContainer.appendChild(videoElement);
    button.innerHTML = '甜妹视频';
       
}

function loadVideo_3() {
    const button = document.getElementById('check_bt_3');
    button.innerHTML = '加载中'; // 更改按钮内容为"正在加载中"
    const videoUrl = "https://api.8uid.cn/ng.php?type=video";
    const videoElement = document.getElementById('videoPlayer');
    videoElement.src = videoUrl;
    videoElement.autoplay = true;
    const videoContainer = document.getElementById('video-container');
    videoContainer.innerHTML = ''; // 清空容器
    videoContainer.appendChild(videoElement);
    button.innerHTML = '纯情女高';
       
}

function loadVideo_4() {
    const button = document.getElementById('check_bt_4');
    button.innerHTML = '加载中'; // 更改按钮内容为"正在加载中"
    const videoUrl = "https://api.8uid.cn/qc.php?type=video";
    const videoElement = document.getElementById('videoPlayer');
    videoElement.src = videoUrl;
    videoElement.autoplay = true;
    const videoContainer = document.getElementById('video-container');
    videoContainer.innerHTML = ''; // 清空容器
    videoContainer.appendChild(videoElement);
    button.innerHTML = '清纯美女';
       
}
function loadVideo_5() {
    const button = document.getElementById('check_bt_5');
    button.innerHTML = '加载中'; // 更改按钮内容为"正在加载中"
    const videoUrl = "https://api.8uid.cn/cd.php?type=video";
    const videoElement = document.getElementById('videoPlayer');
    videoElement.src = videoUrl;
    videoElement.autoplay = true;
    const videoContainer = document.getElementById('video-container');
    videoContainer.innerHTML = ''; // 清空容器
    videoContainer.appendChild(videoElement);
    button.innerHTML = '穿搭视频';
       
}

function loadVideo_6() {
    
    const button = document.getElementById('check_bt_6');
    button.innerHTML = '加载中'; // 更改按钮内容为"正在加载中"
    const apiUrl = 'https://tucdn.wpon.cn/api-girl/index.php?wpon=json';
    fetch(apiUrl)
        .then(response => response.json())
        .then(data => {
            const videoUrl = data.mp4;

            const videoElement = document.getElementById('videoPlayer');
            videoElement.src = 'https:'+videoUrl;
            videoElement.autoplay = true;
            const videoContainer = document.getElementById('video-container');
            videoContainer.innerHTML = ''; // 清空容器
            videoContainer.appendChild(videoElement);
            button.innerHTML = '随机视频';
        })
        .catch(error => {
            button.innerHTML = '加载失败';
            console.error('Error loading video:', error);
        });
       
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/147799.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Gin+Gorm框架搭建MVC模式的Go语言企业级后端系统

文/朱季谦 环境准备&#xff1a;安装Gin与Gorm 本文搭建准备环境&#xff1a;GinGormMySql。 Gin是Go语言的一套WEB框架&#xff0c;在学习一种陌生语言的陌生框架&#xff0c;最好的方式&#xff0c;就是用我们熟悉的思维去学。作为一名后端Java开发&#xff0c;在最初入门…

程序员的护城河:技术深度与软实力的并重

程序员的护城河&#xff1a;技术深度与软实力的并重 作为一名资深的IT行业从业者&#xff0c;我一直在思考一个问题&#xff1a;在我们这个以数据驱动和技术创新为核心的时代&#xff0c;程序员的价值究竟体现在哪里&#xff1f;毫无疑问&#xff0c;程序员在维护系统安全、数…

使用grad-cam对ViT的输出进行可视化

使用grad-cam对ViT的输出进行可视化 文章目录 使用grad-cam对ViT的输出进行可视化前言原理使用代码Pytorch-grad-cam库的更多方法在MMpretrain中使用示例总结 前言 Vision Transformer (ViT) 作为现在CV中的主流backbone&#xff0c;它可以在图像分类任务上达到与卷积神经网络…

22款奔驰E260L升级原厂360全景影像 高清环绕的视野

360全景影像影像系统提升行车时的便利&#xff0c;不管是新手或是老司机都将是一个不错的配置&#xff0c;无论是在倒车&#xff0c;挪车以及拐弯转角的时候都能及时关注车辆所处的环境状况&#xff0c;避免盲区事故发生&#xff0c;提升行车出入安全性。 360全景影像包含&…

ffmpeg5及以上-s和像素格式转换 画屏问题

环境: lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.10 Release: 22.10 Codename: kinetic拉下ffmpeg源码&#xff0c;6.0.1&#xff0c;4.3.6&#xff0c;5.1.4&#xff0c;依次安装作实验 ./configure --disable-x86asm …

香港丽晶酒店于维港畔隆重开幕 绮丽传奇重现香江

2023年11月14日&#xff0c;上海 – 日前&#xff0c;洲际酒店集团旗下香港丽晶酒店于2023年11月8日隆重开幕&#xff0c;历经华丽蜕变后正式回归维多利亚港畔&#xff0c;旧日经典再次伫立&#xff0c;唤醒过去的美好记忆。香港丽晶酒店新生后成功举办了规模盛大的开幕盛典活动…

计算属性传参的写法,在vue3项目中,

计算属性 | Vue.js 在vue3项目中&#xff0c;使用计算属性&#xff0c;在使用这个计算属性时&#xff0c;要传入参数写法有点怪 computed(函数&#xff09; 函数里面再返回一个函数&#xff0c;这个函数接收参数 注意&#xff1a;最后的结果是&#xff0c;这个计算属性函数并…

【WIFI】MTK WiFi降sar如何开发

1.Sar 简介 SAR即英语“Specific Absorption Rate”的缩写。SAR值一般指手机产品中电磁波所产生的热能,它是对人体产生影响的衡量数据,单位是W/Kg(瓦/公斤)。 对于测量手机产品的“SAR”,通俗地讲,就是测量手机辐射对人体的影响是否符合标准。国际通用的标准为:以6分钟…

confluence无法打开空间目录

confluence无法打开空间目录&#xff0c;打开空间目录后无法显示项目 查看项目的类别信息都在 问题原因 由于索引损坏导致&#xff1b; This issue is caused by acorrupted index. Confluence is trying to fetch information about the spacesfrom the available index, …

如何在Windows 10上恢复丢失的文件?

丢失文件时该怎么办&#xff1f; 在使用电脑的过程中&#xff0c;我们经常会遇到丢失重要文件的情况。无论是意外删除、病毒攻击还是电脑格式化&#xff0c;都可能导致文件丢失。在面对这些情况时&#xff0c;大多数人总是会问&#xff1a;“如何在电脑上恢复丢失的文件&am…

44. Adb调试QT开发的Android程序实用小技巧汇总

1. 说明 使用QT开发Android应用时,如果程序本身出现了问题,很难进行调试。不像在linux或者windows系统中,可以利用QtCreator软件本身进行一些调试,安卓应用一旦在系统中安装后,如果运行中途出现什么BUG,定位问题所在很麻烦。不过,好在有adb这种调试工具可以代替QtCreat…

NineData慢查询分析:数据库性能优化的专家

在日常的数据库运维中&#xff0c;慢查询是一个常见的问题&#xff0c;它可能由复杂的查询语句、不充分的索引设计、大量数据的处理、硬件资源不足等多种因素引起。这些慢查询会消耗大量的数据库服务器资源&#xff0c;甚至可能导致数据库死机&#xff0c;无法响应业务请求。因…

【联邦学习+区块链】TORR: A Lightweight Blockchain for Decentralized Federated Learning

文章目录 I.CONTRIBUTIONII. ASSUMPTIONS AND THREAT MODELA. AssumptionsB. Threat Model III. SYSTEM DESIGNA. Design OverviewB. Block DesignC. InitializationD. Role SelectionE. Storage ProtocolF. Aggregation ProtocolG. Proof of ReliabilityH. Blockchain Consens…

Flink(五)【DataStream 转换算子(上)】

前言 这节注定是一个大的章节&#xff0c;我预估一下得两三天&#xff0c;涉及到的一些东西不懂就重新学&#xff0c;比如 Lambda 表达式&#xff0c;我只知道 Scala 中很方便&#xff0c;但在 Java 中有点发怵了&#xff1b;一个接口能不能 new 来构造对象? 答案是可以的&…

兼容最新 urllib3 版本及相关库

解决方案 对于这个问题&#xff0c;我们可以通过修改setup.py文件来解决。在setup.py文件中&#xff0c;我们将urllib3的版本范围从1.21.1到1.26改为1.21.1到最新版本。这是因为在patch中&#xff0c;我们已经检查了urllib3的版本&#xff0c;并确保其大于1…

编程的简单实例,编程零基础入门教程,中文编程开发语言工具下载

编程的简单实例&#xff0c;编程零基础入门教程&#xff0c;中文编程开发语言工具下载 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件&…

深兰科技轮腿家用AI机器人荣获“2023年度城市更新科创大奖”

近日&#xff0c;“2023金砖论坛第五季金立方城市更新科创大会”在上海举行&#xff0c;会上发布了《第12届金砖价值榜》&#xff0c;深兰科技研发出品的轮腿式家用AI机器人(兰宝)&#xff0c;因其AI技术的创新性应用&#xff0c;荣获了“2023年度城市更新科创大奖”。 在10月2…

JavaScript数据存储

原始类型&#xff1a;存储在栈内存中&#xff0c;每次开辟的空间大小是固定 引用类型&#xff08;对象、函数、数组&#xff09;&#xff1a;存储在堆内存中&#xff0c;开辟的空间大小根据数据的大小决定 // 声明变量会在栈内存中开辟空间 // 创建对象在堆内存中开辟空间&…

使用 Cloudflare Worker 免费搭建网址导航网站

开源项目 GitHub&#xff1a;https://github.com/sleepwood/CF-Worker-Dir/ CloudFlare Worker&#xff1a;https://workers.cloudflare.com/ 搭建教程 首先&#xff0c;进入cloud flare - Worker 截图20200224180010.png 在 Cloudflare Worker 管理页面创建一个新的 Work…

11-15 AOP配置

AOP配置 基于xml 切入点表达式:方法签名描述 方法签名:访问修饰符返回值类型〔包.类.]方法名(参数列名)throws 异常声明; 语法: execution(修饰符?返回值 方法名(参数) 异常?) 注意: ?:0或者1个 通配符: * : 任意 用于返回值,方法名,类名 .. : 任意包中使用: ..:表示该包,…