618快到了送上自制前端小项目(html css js)

news2025/1/25 4:37:25

目录

🚩.自定义播放器

🏠.图片自动消失

✨.小轮播图

🎃.旋转音乐盒


 前言:这些小项目全都是自创的

如果需要应用,或则转发的话请与

博主联系,感谢你们的理解,

 


1.自定义播放器

在页面中放置26个div,每个div中写一个字

母。html结构中引入8个音频结构。给每个

div绑定点击键盘事件。根据键盘的每个

keyCode的不同来动态绑定对应的音频文件。

当按下对应的键盘字母,增添css样式,

音频播放。放开时,存储点击的事件,

将对应的音频存储在一个数组中。

点击按钮,循环播放存储的音频数组


html:

 <div id="container">   
        <div data-key="81" class="key">
            <kbd>Q</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="87" class="key">
            <kbd>W</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="69" class="key">
            <kbd>E</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="82" class="key">
            <kbd>R</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="84" class="key">
            <kbd>T</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="89" class="key">
            <kbd>Y</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="85" class="key">
            <kbd>U</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="73" class="key">
            <kbd>I</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="79" class="key">
            <kbd>O</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="80" class="key">
            <kbd>P</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="65" class="key">
            <kbd>A</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="83" class="key">
            <kbd>S</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="68" class="key">
            <kbd>D</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="70" class="key">
            <kbd>F</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="71" class="key">
            <kbd>G</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="72" class="key">
            <kbd>H</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="74" class="key">
            <kbd>J</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="75" class="key">
            <kbd>K</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="76" class="key">
            <kbd>L</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="90" class="key">
            <kbd>Z</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="88" class="key">
            <kbd>X</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="67" class="key">
            <kbd>C</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="86" class="key">
            <kbd>V</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="66" class="key">
            <kbd>B</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="78" class="key">
            <kbd>N</kbd>
            <span class="sound">clap</span>
        </div>
        <div data-key="77" class="key">
            <kbd>M</kbd>
            <span class="sound">clap</span>
        </div>
    </div>
    <div id='btn'>提交数据</div>
    <audio data-key="81" src="sounds/clap.wav"></audio>
  <audio data-key="87" src="sounds/hihat.wav"></audio>
  <audio data-key="69" src="sounds/kick.wav"></audio>
  <audio data-key="82" src="sounds/openhat.wav"></audio>
  <audio data-key="84" src="sounds/boom.wav"></audio>
  <audio data-key="89" src="sounds/ride.wav"></audio>
  <audio data-key="85" src="sounds/snare.wav"></audio>
  <audio data-key="73" src="sounds/tom.wav"></audio>
  <audio data-key="79" src="sounds/tink.wav"></audio>
  <audio data-key="80" src="sounds/clap.wav"></audio>
  <audio data-key="83" src="sounds/hihat.wav"></audio>
  <audio data-key="68" src="sounds/kick.wav"></audio>
  <audio data-key="65" src="sounds/openhat.wav"></audio>
  <audio data-key="71" src="sounds/boom.wav"></audio>
  <audio data-key="72" src="sounds/ride.wav"></audio>
  <audio data-key="74" src="sounds/snare.wav"></audio>
  <audio data-key="75" src="sounds/tom.wav"></audio>
  <audio data-key="76" src="sounds/tink.wav"></audio>
  <audio data-key="70" src="sounds/clap.wav"></audio>
  <audio data-key="90" src="sounds/hihat.wav"></audio>
  <audio data-key="88" src="sounds/kick.wav"></audio>
  <audio data-key="67" src="sounds/openhat.wav"></audio>
  <audio data-key="86" src="sounds/openhat.wav"></audio>
  <audio data-key="66" src="sounds/boom.wav"></audio>
  <audio data-key="78" src="sounds/ride.wav"></audio>
  <audio data-key="77" src="sounds/snare.wav"></audio>

css:

*{
    margin:0;
    padding:0;
}
.top{
    width:100%;
    height:100px;
}
.top i{
    font-size: 24px;
}
.top-left{
    width:20%;
    height:100%;
    float:left;
    text-align: center;
    line-height: 100px;
    position: relative;
}
.top-left .cls5{
    position: absolute;
    left:40px;
}
.top-middle{
    width:50%;
    height:100%;
    float:left;
    text-align: center;
    line-height: 100px;
    position:relative;
}
.top-middle .cls1{
    position: absolute;
    left:30px;
}
.top-middle .cls2{
    position: absolute;
    left:60px;
}
.top-middle .cls3{
    position: absolute;
    right:500px;
}
.top-middle .container{
    width:300px;
    height:40px;
    border:1px solid whitesmoke;
    border-radius: 10px;
   position:absolute;
   left:100px;
   top:30px;
   text-align: center;
   line-height: 40px;
}
.top-middle .container .cls4{
    position: absolute;
    left:20px;
}
.top-right{
    width:30%;
    height:100%;
    float:right;
}
.top-right ul{
    list-style: none;
    text-align: center;
    height:100px;
    line-height:100px ;
}
.top-right ul li{
    float:right;
    margin:0 20px 0 20px;
}



.bottom{
    width:100%;
    height:100px;
    margin-top:710px;
}
.bottom i{
    font-size: 24px;
}
.bottom-left{
    width:20%;
    height:100px;
    line-height: 100px;
    float:left;
    text-align: center;
}
.bottom-left ul{
    list-style: none;
}
.bottom-left ul li{
    float:left;
    margin:0 30px 0 30px;
}

.bottom-mid{
    width:50%;
    height:100px;
    line-height: 100px;
    float:left;
}
.bottom-mid ul{
    list-style: none;
}
.bottom-mid ul li{
    float:left;
    margin: auto 50px;
}
.bot-mid-top{
    width:100%;
    height:60px;
    text-align: center;
    line-height: 50px;
}
.bot-mid-top .clf1{
    margin-left:250px;
}
.bot-mid-bot{
    width:100%;
    height:40px;
    line-height: 40px;
}
.bot-mid-bot .item{
    width:80%;
    border:1px solid #333;
    border-radius: 3px;
    height:9px;
    
    margin-top:12px;
    margin-left:100px;
}
.bottom-right{
    width:30%;
    height:100px;
    line-height: 100px;
    float:left;
}
.bottom-right ul{
    list-style: none;
}
.bottom-right ul li{
    float:left;
    margin:0 30px 0 30px;
}
.bottom-right ul .clf2{
    margin-left:200px;
}

js:

let audioArr = []


function removeClass(e) {
    let  key = document.querySelector(`div[data-key="${e.keyCode}`)
    let audio = document.querySelector(`audio[data-key="${e.keyCode}"]`)
    key.classList.remove('playing')
    audioArr.push(audio)
}

function playAudio(e) {
    let  key = document.querySelector(`div[data-key="${e.keyCode}`)
   let audio = document.querySelector(`audio[data-key="${e.keyCode}"]`)
    key.classList.add('playing')
    //audio.currentTime = 0; // 每次播放之后都使音频播放进度归零
    if (!audio) return;
    audio.play()
}

window.addEventListener('keydown', e => playAudio(e))
window.addEventListener('keyup', e => removeClass(e))

const btn = document.getElementById('btn')

 function Play() {
  const self=this
  const item1=setInterval(function(){
    self.i++
    console.log(self.i)
    audioArr[self.i-2].play()
    if(self.i>audioArr.length){
      clearInterval(item1)
    }
  }, 200);
}

let obj={
   i:1
}

function bind(){
  Play.call(obj)
}
btn.addEventListener("click",bind)

2.图片自动消失

一张图片,在其右上角放置一个div

,分别得到那个元素,在div中插入数字

开启一个定时器,每隔一段时间减一。

直到为0.图片消失

<style>
.ad{
	width:400px;
	height:400px;
	background-image: url(img/1.jpg);
	position:relative;
	margin:200px auto;
}
#sj{
	display:block;
	width:40px;
	height:40px;
	line-height:30px;
	border-radius:50%;
	border:1px solid red;
	position:absolute;
	top:20px;
	right:20px;
	text-decoration: none;
	text-align: center;
	line-height: 40px;
	font-size: 20px;
}
</style>
</head>
<body>
	<div id="gg" class="ad">
		<a href="" > <span id="sj">5</span></a>
	</div>
<script>
var gg=document.getElementById("gg");
var sj=document.getElementById("sj")
var time=setInterval(function(){
	sj.innerHTML-=1;
	if(sj.innerHTML==0){
		gg.style.display="none";
		clearInterval(time);
	}
},1000);
</script>
</body>

yy3.小轮播图

放置三张图片,移动到那个图片,

改变他的偏移量。

*{
	padding:0;
	margin:0;
	}
body,html{
	width:100%;
	 overflow:hidden;
	}
#wrap1{
	width:100%;
	position:absolute;
	bottom:0;
	left:0;
	text-align: center;
	}
#wrap1>img{
	width:64px;
	}
</style>
</head>
<body>
	<div id="wrap1">
		<img src="img/1.png" />
		<img src="img/2.png" />
		<img src="img/3.png" />
		<img src="img/4.png" />
		<img src="img/5.png" />
	</div>
<script type="text/javascript">
	window.onload=function(){
		var r=320
		var imgNodes=document.querySelectorAll("#wrap1>img")
		document.onmousemove=function(ev){
		ev=ev||event
		for(var i=0;i<imgNodes.length;i++){
var a= imgNodes[i].getBoundingClientRect().top+imgNodes[i].offsetHeight/2-ev.clientY
var b= imgNodes[i].getBoundingClientRect().right+ imgNodes[i].offsetWidth/2-ev.clientX
	var c=Math.sqrt(a*a+b*b)
			if(c>=r){
					c=r
					}
				 imgNodes[i].style.width=128-c*0.2+'px'
					}
				}
			}
</script>

4.旋转音乐盒

旋转音乐盒

放置六张图片,将他们绝对定位。

根据所学css来对每一张图片进行定位

然后就是当点击哪一个图片时,播放

对应的音频音乐。

css:

*{
	padding:0;
	margin:0;
}
.cube{
	width:200px;
	height:200px;
	position: relative;	
	margin:200px auto;
   //使效果呈现3d效果		
	transform-style: preserve-3d;
	animation: rotate 30s infinite linear;
	}
@keyframes rotate{
	from{
       transform:rotateX(0deg) rotateY(0deg);
        }
    to{
       transform: rotateX(360deg) rotateY(360deg);
        }
}
html{
   //屏幕与我们的视距
	perspective: 10000px;
	}
.cube>div{
	width:200px;
	height:200px;
	position:absolute;
	opacity: 0.7;
	}
img{
	width:200px;
	height:200px;
	}
.box1{
	transform: rotateX(90deg) translateZ(100px);
	}
.box2{
	transform: rotateX(-90deg) translateZ(100px);
	}
.box3{
	transform:  rotateY(0deg) translateZ(100px);
	}
.box4{
	transform:  rotateY(180deg) translateZ(100px);
	}
.box5 {
	transform: rotateY(90deg) translateZ(100px);
	}
.box6  {
	transform: rotateY(-90deg) translateZ(100px);
	}
.change{
	transform:  translateZ(50px);
}
</style>

html:

<div class="cube">
	<div class="box1" data-key="1"><img src="./img/imgs/1.jpg"></div>
	<div class="box2" data-key="2"><img src="./img/imgs/2.jpg"></div>
	<div class="box3" data-key="3"><img src="./img/imgs/3.jpg"></div>
	<div class="box4" data-key="4"><img src="./img/imgs/4.jpg"></div>
	<div class="box5" data-key="5"><img src="./img/imgs/5.jpg"></div>
	<div class="box6" data-key="6"><img src="./img/imgs/6.jpg"></div>
</div>
<audio src="./img/audio/1.mp3" data-key="1"></audio>
<audio src="./img/audio/2.mp3" data-key="2"></audio>
<audio src="./img/audio/3.mp3" data-key="3"></audio>
<audio src="./img/audio/4.mp3" data-key="4"></audio>
<audio src="./img/audio/5.mp3" data-key="5"></audio>

js:

let divs=document.querySelectorAll('.cube>div')
let audios=document.querySelectorAll('audio')
    for(let i=0;i<divs.length;i++){
		for(let j=0;j<audios.length;j++){
			if(divs[i].dataset.key===audios[j].dataset.key){
				divs[i].onclick=function(){
					audios[j].play()
				}
			}
		}
	}

✍在最后,如果觉得博主写的还行

,期待🍟点赞  🍬评论 🍪收藏

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云化Web IDE,在线开发新模式

目录 前言 一、初识云IDE 二、CSDN 云IDE 1、如何使用云IDE 2、使用云IDE 三、云IDE的使用感受 四、总结 前言 工欲善其事必先利其器&#xff0c;作为程序员&#xff0c;我们在编写代码的时候&#xff0c;一定会选用一款得心应手的工具。就像行走江湖的侠客&#xff0c;手…

vue项目打包优化的方法

1.按需加载第三方库 例如 ElementUI、lodash 等 a, 装包 npm install babel-plugin-component -D b, babel.config.js module.exports {"presets": ["vue/cli-plugin-babel/preset"],"plugins": [["component",{"libraryNa…

uniapp中的分享功能实现(APP,小程序,公众号)

uniapp中的分享功能实现(APP,小程序&#xff0c;公众号) 1.APP端的分享 app端的分享可以直接使用uniapp封装的方法uni.share&#xff0c;uni-app的App引擎已经封装了微信、QQ、微博的分享SDK&#xff0c;开发者可以直接调用相关功能。可以分享到微信、QQ、微博&#xff0c;每个…

【Web前端】一文带你吃透CSS(上篇)

前端学习路线小总结: 基础入门:HTML CSS JavaScript三大主流框架:VUE REACT Angular深入学习:小程序 Node jQuery TypeScript 前端工程化一起学习CSS吧! 一.CSS简介1.什么是CSS?二.CSS语法1.语法规则2.注释三.CSS选择器

Vue打包后加载太慢,访问时间太久,记录项目的整个优化过程

问题背景 最近在做一个Vue项目时&#xff0c;在打包上线的时候发现项目部署完第一次访问时间特别慢&#xff0c;整个登录页面加载用了8-10秒&#xff0c;很明显这个速度达不到项目上线的要求&#xff0c;于是开始了对项目打包之后增快加载速度的研究。 未优化前的项目加载时间…

Vue3 响应式原理

响应式原理 Vue2 使用的是 Object.defineProperty Vue3 使用的是 Proxy 2.0的不足 对象只能劫持 设置好的数据&#xff0c;新增的数据需要Vue.Set(xxx) 数组只能操作七种方法&#xff0c;修改某一项值无法劫持。 reactive和effect的实现 export const reactive <T e…

Vue 解决报错 You are using the runtime-only build of Vue where the template compiler is not available.

报错信息 [Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build. 您正在使用Vue的仅运行时版本,并而模板编译器不可用。 可…

手把手教你如何对接支付宝支付接口(奶爸级别)

支付宝支付接口步骤&#xff1a;第一步&#xff1a;第二步&#xff1a;如何让支付宝将付款成功的通知&#xff0c;回调到你本机&#xff0c;我使用的是内网穿透&#xff1a;Natapp步骤&#xff1a; 第一步&#xff1a;准备支付宝相关的参数&#xff0c;如appId、公私钥 第二步…

vite中静态资源(css、img、svg等)的加载机制及其相关配置

什么是静态资源&#xff1f; 简单来说&#xff0c;我们开发完一个项目后&#xff0c;需要把它打包&#xff08;一般是dist文件夹&#xff09;&#xff0c;并部署在服务器上。那么&#xff0c;这个打包后的dist文件夹都是静态资源&#xff1b;在我们写项目时&#xff0c;图片、…

JS类型转换

JS中的类型转换方式一般分为三类&#xff1a;转为String型&#xff0c;转为数字型&#xff0c;转为布尔型。 一.转为String型 1.toString() 通过变量.toString()可以将其他类型的变量转换为字符串型&#xff08;null和undefined没有toString()方法&#xff09; let age 18;…

如何运行vue项目

一、 1、下载node.js 安装完成后分别在cmd中执行node -v查看是否安装成功&#xff0c;出现版本号就安装成功了 2、安装 webpack npm install webpack -g 安装完成后分别在cmd中执行npm -v查看是否安装成功&#xff0c;出现版本号就安装成功了 3、安装vue-cli脚手架 cnpm i…

【vue3】使用canvas

canvas是什么&#xff1f; 一个html5支持的新标签&#xff0c;见名知意&#xff0c;canvas就是画板的意思&#xff0c;可以在canvas上画画。css画三角形很简单&#xff0c;但是要画五角星呢&#xff0c;不妨试试canvas。 在html中使用canvas 1、canvas是html5中的一个标签。…

前端之CSS

目录 一.CSS是什么 二.CSS的基本语法规范 三.CSS的引入方式 1.内部样式 2.内联样式 3.外部样式 四.CSS的基本用法 1.基础选择器 1.1 标签选择器 1.2 类选择器 1.3 id选择器 1.4 通配符选择器 2.复合选择器 2.1 后代选择器 2.2 子选择器 2.3 并集选择器 2.4 伪类…

【实战篇】最详细的Rollup打包项目教程

介绍 本文带你一起使用 Rollup 打包项目&#xff0c;实现以下功能&#xff1a; 自动将 dependencies 依赖声明为 externals支持处理外部 npm 依赖支持基于 CommonJS 模块引入支持 typescript&#xff0c;并导出声明文件支持 scss&#xff0c;并添加前缀支持自动清除调试代码打…

怒肝最新保姆级前端学习路线,速成贴心全面!

这份学习路线并不完美&#xff0c;也不会有最终形态&#xff0c;正如前端不可预见、永无止境的未来。 大家好&#xff0c;我是鱼皮&#xff0c;肝了几天终于完成了这份保姆级前端学习路线。 &#x1f482; &#x1f4bb; &#x1f474;&#x1f3fd; 先放一张图&#xff1a…

JS原型与原型链详细解释

文章目录一、JS原型链简要解释二、JS原型链详细解释1.构造函数2.原型对象3.__proto__4.原型链总结一、JS原型链简要解释 原型是function对象上的一个属性, 它表示构造函数构造出来的对象的共有祖先, 被通过构造函数构造出来的对象上有一个__proto__属性指向该函数的prototype,…

JSON.parse和JSON.stringify的用法

平时我们在接收后端返回的json对象通常是一个字符串类型的object&#xff0c;所以一般我们要对这个object进行类型转化后&#xff0c;我们才能使用object里面的数据&#xff0c;而这其中涉及到两个必不可少的方法就是JSON.parse和JSON.stringify JSON.parse()JSON.parse()方法将…

vue 控制元素的显示和隐藏

方法&#xff1a; 使用 v-if 指令&#xff0c;通过动态的向DOM树内添加或者删除DOM元素的方式来显示或隐藏元素&#xff1b;使用 v-show 指令&#xff0c;通过设置DOM元素的display样式属性来控制显隐。v-if 指令与 v-show 指令都可以根据值动态控制DOM元素显示隐藏&#xff0…

文档库开发之-vite打包优化

背景 首次进行组件库文档打包&#xff0c;遇到了一些ts打包报错和css打包警告&#xff0c;记录下处理过程。并且发现打包后的主包的体积过大&#xff0c;有一定优化空间 ts报错处理 当时有好奇为什么开发环境下都不报错&#xff0c;构建才产生这么多ts错误。大致猜想可能vite…

英雄联盟轮播图自动轮播

六月过去了&#xff0c;七月还会远吗&#xff1f;不知不觉到了六月底的最后一天。你好&#xff0c;七月&#xff01; 大家好&#xff0c;我是小陈陈呀&#xff0c;上次写了一篇英雄联盟轮播图手动轮播&#xff0c;当天晚上有很多大朋友小朋友私信小陈陈&#xff1a;可以在上次…