vue实现一个可以弹奏的钢琴效果代码

代码语言:html

所属分类:多媒体

代码描述:vue实现一个可以弹奏的钢琴效果代码,内置曲谱,可以录制弹奏过程并回放。

代码标签: 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==&quot;white&quot;" v-on:click="addnote(s.num)" v-bind:class="get_current_highlight(s.num,s.key)?&quot;playing&quot;:&quot;&quot;">
                       
<div class="label">{{String.fromCharCode(s.key)}}</div>
                   
</div>
                   
<div class="black" v-if="s.type==&quot;black&quot;" v-on:click="addnote(s.num)" v-bind:class="get_current_highlight(s.num,s.key)?&quot;playing&quot;:&quot;&quot;">
                       
<div class="label">{{String.fromCharCode(s.key)}}</div>
                   
</div>
               
</div>
           
</div><br/>
           
<div class="controls">
               
<ul class="notes_list" v-if="notes.length&gt;0">
                   
<li v-for="(note,id) in notes" v-bind:class="now_note_id-1==id?&quot;playing&quot;:&quot;&quot;">
                       
<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&lt;=1" v-on:click="startplay">Startplay<i class="fa fa-play"></i></button>
               
<button v-if="playing_time&gt;1" v-on:click="stopplay">Stopplay<i class="fa fa-pause"></i></b.........完整代码请登录后点击上方下载按钮下载查看

网友评论0