vue实现一个可以弹奏的钢琴效果代码
代码语言:html
所属分类:多媒体
代码描述:vue实现一个可以弹奏的钢琴效果代码,内置曲谱,可以录制弹奏过程并回放。
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/font-awesome-4.7.0/css/font-awesome.min.css">
<style>
@charset "UTF-8";
* {
vertical-align: top;
font-family: 微軟正黑體;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
}
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
h2 {
margin-bottom: 30px;
color: #585858;
}
button {
background-color: transparent;
border: none;
border: solid 1px;
padding: 4px 12px;
border-radius: 4px;
transition: 0.5s;
cursor: pointer;
vertical-align: middle;
}
button:hover {
background-color: #585858;
color: white;
}
.notes_list li {
display: inline-block;
border-right: solid 1px;
padding: 2px 5px;
cursor: pointer;
transition: 0.3s;
}
.notes_list li:hover {
background-color: #e1e1e1;
}
.notes_list li.playing {
background-color: #d5d5d5;
}
.notes_list li .time {
font-size: 8px;
opacity: 0.3;
}
.notes_list li .num {
font-size: 16px;
}
.center_box {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 100%;
}
.keyboard {
box-shadow: 0px 0px 40px -5px rgba(0, 0, 0, 0.4);
display: inline-block;
margin-bottom: 30px;
}
.pianokey {
display: inline-block;
position: relative;
cursor: pointer;
}
.white.playing {
background-color: #d5d5d5;
transform: translate(0px, 0px);
}
.black.playing {
background-color: #727272;
transform: translate(0px, 0px);
}
.white {
width: 44px;
height: 300px;
border: solid 1px #eee;
transform: translate(-3px, -3px);
transition: 0.1s;
}
.white:hover {
transform: translate(0px, 0px);
background-color: #eee;
}
.black {
position: absolute;
top: 0px;
width: 22px;
height: 165px;
background-color: #585858;
margin-left: -11px;
margin-right: -11px;
z-index: 20;
transform: translate(-3px, -3px);
transition: 0.1s;
}
.black:hover {
transform: translate(0px, 0px);
background-color: #3f3f3f;
}
.label {
position: absolute;
color: rgba(88, 88, 88, 0.5);
bottom: -25px;
left: 50%;
transform: translate(-50%);
font-size: 8px;
}
i {
margin-left: 5px;
margin-right: 0px;
margin-top: 3px;
}
i.fa-circle {
color: #cc0000;
}
</style>
</head>
<body>
<div id="app">
<div class="audioplayer" v-for="s in sounddata">
<audio v-bind:data-num="s.number" preload="auto">
<source v-bind:src="s.url" type="audio/ogg"/>
</audio>
</div>
<div class="center_box">
<h2>Vue.js Piano Project 7</h2>
<div class="keyboard">
<div class="pianokey" v-for="s in display_keys">
<div class="white" v-if="s.type=="white"" v-on:click="addnote(s.num)" v-bind:class="get_current_highlight(s.num,s.key)?"playing":""">
<div class="label">{{String.fromCharCode(s.key)}}</div>
</div>
<div class="black" v-if="s.type=="black"" v-on:click="addnote(s.num)" v-bind:class="get_current_highlight(s.num,s.key)?"playing":""">
<div class="label">{{String.fromCharCode(s.key)}}</div>
</div>
</div>
</div><br/>
<div class="controls">
<ul class="notes_list" v-if="notes.length>0">
<li v-for="(note,id) in notes" v-bind:class="now_note_id-1==id?"playing":""">
<div class="num">{{note.num}}</div>
<div class="time">{{note.time}}</div>
</li>
</ul>
<button v-on:click="load_sample">Sample</button>
<button v-on:click="playnext(1)">Playnext</button>
<button v-if="playing_time<=1" v-on:click="startplay">Startplay<i class="fa fa-play"></i></button>
<button v-if="playing_time>1" v-on:click="stopplay">Stopplay<i class="fa fa-pause"></i></b.........完整代码请登录后点击上方下载按钮下载查看
网友评论0