C50108
  • 2019/0801/轉職成功路途開始
  • 自學心得與此網站使用方式
  • 行事曆&課程大綱
  • 2019/0224/自我檢視
  • 雜記
    • 2019/0103/雜記
    • 2019/0410/作品集建構
    • 2019/0429/職訓局書單
    • 2019/0317/自我檢視
    • 2019/0316/陪玄松去高車討論&環境圖流程圖大神們line討論
    • 2019/0305/Gitbook使用方法
  • 2018/10XX/轉職心路歷程
  • 職訓局里程碑
    • 201901
      • 2019/0103/行動商務系統設計與開發,職訓局報到
      • 2019/0104/正式開課日&行動商務課程簡介
      • 2019/0108/資料庫理論/Access&WEB開發簡介
      • 2019/0109/資料庫資料型態屬性&HTMLtag
      • 2019/0110/計概基礎概念
      • 2019/0111/HTML表格table&form表單_post/get&iframe
      • 2019/0114/計&網概概念&網路層概念
      • 2019/0115/資料庫Access運算值&CSS簡介&在職班補充
      • 2019/0116/Access比較/邏輯運算&CSS_在職班補充+選擇器+Box model
      • 2019/0117/資訊系統架構&網路層
      • 2019/0118/資料庫正規化
      • 2019/0121/計概IT分工&資料庫正規化
      • 2019/0122/網路層&CSS父子容器切版
      • 2019/0123/Access資料庫關聯&CSS position&偵錯
      • 2019/0124/C#宣告、指定運算子
      • 2019/0125/VM虛擬機_基礎介紹
      • 2019/0128/VM虛擬機架設_虛擬網卡設定&伺服器權限設置
      • 2019/0129/Wireshark查詢網路層&資料庫物件導向
      • 2019/0130/ERmod雞爪圖&C#if、for時間複雜度
      • 2019/0131/C#流程控制&變數型別
    • 201902
      • 2019/0201/系統分析與設計_資料庫ERmod&c#Homework
      • 2019/0211/ASP.NET_Webforms&物件命名空間
      • 2019/0212/定址&網路遮罩
      • 2019/0213/SQLSeverM.S.介紹&AspWebforms表單控制項
      • 2019/0214/網概乙太網路&網路安全
      • 2019/0215/Pre Javascript 基礎 & 在職班補充
      • 2019/0218/TSQL基本指令&ASP.net左右置換表格/驗證傳值
      • 2019/0219/Javascript終極密碼&musicplay&asp.net驗證器
      • 2019/0220/SS基本語法&網概line機器人
      • 2019/0221/前端Javascript musicplay、內聚力耦合率
      • 2019/0222/前端Javascript musicplay、內聚力耦合率&伺服器權限
      • 2019/0223/SqlServerHomework&第一次專案報告
      • 2019/0225/SS合併查詢&ASP.NET驗證器
      • 2019/0226/伺服器ntfs安全性權限/共用權限
      • 2019/0227/Javascript_music_play_end&ASP.net串聯SQL(datasource就是拿來串SQLServer的)
    • 201903
      • 2019/0304/SS集合運算/子查詢/exists&asp.net GridView 事件 OnRowDataBound
      • 2019/0305/SS查詢式end&ASP.NET_Gridview_自訂樣式分頁
      • 2019/0306/Javascript musicplay_really_end
      • 2019/0307/前端HTML5鑲嵌字型&伺服器網域概念
      • 2019/0308/Android Studio_基礎概念&開發環境建置
      • 2019/0311/胡中興 工業4.0講習
      • 2019/0312/安卓系統_開發基礎介紹
      • 2019/0313/安卓工作室_基礎/布局內元件
      • 2019/0314/Asp.net鏈結資料庫-查詢
      • 2019/0315/SQS DML&第二次專案報告
      • 2019/0318/SQL DDL & 伺服器 自學基礎
      • 2019/0319/Android Studio_布局內元件&佈局規劃元件
      • 2019/0320/SQL檢視表&tsql基礎&Asp.net_Gridview
      • 2019/0321/TSQL&TDM&ASP.NET_Datalist
      • 2019/0322/DOM&JQ基礎&系統分析設計PPT&在職班補充
      • 2019/0325/TMD&Asp.net上傳圖片/產生QRCode
      • 2019/0326/SQLServer_預存程序+函數&Asp.net_Webforms半自動鏈結資料庫與自動化更新
      • 2019/0327/安卓工作室_佈局規劃元件
      • 2019/0328/jQuery選擇器應用&Ajax導讀+應用&asp.net串sserver_註冊帳號功能
      • 2019/0329/ADDS伺服器架設&第三次專題報告
    • 201904
      • 2019/0401/SQL觸發程序&Asp.net自動寄信&認證信
      • 2019/0402/前端作業四-jQ應用轉換樣式&ASP.NET_FormView控制項-會員資料維護實例
      • 2019/0403/JQ事件動畫&股市&Usecase
      • 2019/0408/安卓工作室_元件/布局基本end
      • 2019/0409/安卓工作室-物件導向事件驅動實作+Homework1&2
      • 2019/0410/上午小組討論-作品集自習&Visual studio webform+MVC範本
      • 2019/0411/安卓工作室-UI觸發委派函式與控制物件
      • 2019/0412/JQ動畫實做(寶可夢遊戲開場)&第四次專題報告
      • 2019/0415/前端JQ-Ajax+JSON&後端ADO建置、主板頁面概念控制項、Bootstrap演示
      • 2019/0416/安卓工作室UI控件案例結束、IDE Eclipse_Java物件導向基礎
      • 2019/0417/伺服器網域ADDNS&416LINE討論
      • 2019/0418/SQL指標、索引&Use cace
      • 2019/0419/主頁、Webform ADO.NET Entity Fromwork 增刪修實作&第五次專題報告
      • 2019/0423/Java基礎(型別/溢位/自動強制型別轉換/鑄造物件/串流/)&I/O物件用法(底層/較不底層)
      • 2019/0424/Bootstrap_RWD基礎/應用&Asp.Net_MVC實作增刪修(修待補)
      • 2019/0425/伺服器IIS安裝&資料匯入與管理
      • 2019/0426/Asp.Net_MVC增刪修實作(補修)&bootstrap – gridsystem– 網格系統&第六次專題報告&全國技能競賽網頁設計
      • 2019/0429/物件導向技術原理方法實作
      • 2019/0430/資料庫設計應用效能調教_SQL all end&ASP.NET_MVC_Controller單元_純C無V無M操作/簡單複雜繫結
    • 201905
      • 2019/0501/內部網站辨識&外部DNS域名/IP+自架DNS伺服器理解
      • 2019/0502/Java語言基礎、物件導向基礎
      • 2019/0503/Asp.net泛型處理常式驗證圖片應用&第七次專題報告Usecase
      • 2017/0506/Bs_FlexBox&Asp.Net_MVC_View+Razor@+Viewbag+helper
      • 2019/0507/Java 物件導向_類別+函式觀念&階段性作業三
      • 2019/0508/Asp.Net_MVC_Model_ADO.NET+Entityframework+LoginMember實作+MVC觀念
      • 2019/0509/Java物件導向(函式)_儲存型態+回傳值+多載+自制+例外處理+this參照+存取+複合
      • 20919/0510/第八次專題報告=功能DEMO
      • 2019/0514/Java_靜態類別+繼承特性
      • 2019/0515/RWD Utility+Card&MVC ViewModel+CRUD(RD)
      • 2019/0516/BS form&驗證+JQ驗證 & MVC_CRUD(CU)
      • 2019/0517/ASP.NET Webform介紹Master page 主頁 & Session 簡介 & 登入login驗證 & 隱碼攻擊injection & 工具箱程式碼片段使用
      • 2019/0520/繼承&存取權特性+java作業四+字符串格式化+多形+抽象類別
      • 2019/0521/抽象類別+介面
      • 2019/0522/Bootstrap Components 元件介紹 + MVC API 概念&實作
      • 2019/0523/IIS IP限制&ASP.NET部屬
      • 2019/0524/WebApi異質程式連線方式&第九次專題報告_循序圖
      • 2019/0528/Bootstrap Components 元件介紹 + MVC 登入驗證 + 商品加入購物車 實作
      • 2019/0529/ASP.NET_MVC購物車訂單功能完成+BootstrapComponents元件介紹
      • 2019/0530/原本是伺服器的課,但拿來做專題。
      • 2019/0531/ASP.NET_WebformAllView物件功能清單&ListView實作&第十次專案報告(完整循序圖)
    • 201906
      • 2019/0603/Bootstrap Components RWD End + ASP.NET_MVC Part2 PhotoSharing CodeFirst & Model 驗證
      • 2019/0604/ASP.NET_MVC Part2 PhotoSharing Controller & Filter & ADO.NET & View@RAZOR Helper
      • 2019/0605/Java介面實作&結束+安卓工作室(整合Layout與Java)Intent意圖&Bundle包裹
      • 2019/0606/第十一次專案報告功能demo+SingnaIR+伺服器作業+端午歌唱比賽
      • 2019/0609/黃大神傳授Visual_Studio&除錯技巧
      • 2019/0610/番外篇 Web Socket 即時連線& 就業前準備與技巧
      • 2019/0611/安卓工作室_(意圖+隱含意圖)資料傳遞+Android生命週期+硬體裝置與應用
      • 2019/0612/WebSockets Notification + MVC Part2 PhotoSharing PartialView & ADO.NET & EntitySQL & VMd
      • 2019/0613/MVC Part2 PhotoSharing ViewModel & ErrorHandle
      • 2019/0614/第十二次專案報告 功能Demo
      • 2019/0618/MVC Part2 PhotoSharing Route & Sitemap & _LayOut & AJAX
      • 2019/0618/RWD在職班_(Javascript_object-oriented programming)
      • 2019/0619/安卓工作室_(硬體裝置與應用)相機操作&GPS+階段性作業6+延伸 ( APP End )
      • 2019/0620/MVC補充C#MS SQL匯入CSV+上傳CSV存入MS SQL
      • 2019/0621/第十三次專案報告 功能Demo
    • 2019/0701/最終專案報告
    • 2019/0702/結訓與家人遊台東預計0708開始找工作自學筆記應該會等工作穩定後繼續開始
  • 自學里程碑
    • 201901
      • 2019/0107/DR
      • 2019/0108/UW
      • 2019/0103/Git
      • 2019/0103/CS
      • 2019/0115/Vscode
      • 2019/0116/JSON&AJAX
      • 2019/0122/卡內基
      • 2019/0126/MBTI
      • 2019/0131/PDP 外在 內在
    • 201902
      • 2019/0217/huli_half Developer
      • 2019/0219/SEO
      • 2019/0219/雪球速讀法
    • 201903
      • 2019/0304/asp、php、jsp、asp.net、net. Framework、asp.net core
      • 2019/0329/網站架站初嘗試
    • 201904
      • 2019/0415/Datatype-Explanation
      • 2019/0416/ASP.NET_Webform&Core&MVC(MVVM/MVP)
    • 201905
      • 2019/0613/開發職訓局共同專案時遇到的問題與解法
      • 2019/0514/ASP.NET SignalR
      • 2019/0514/JS擴展-JQ、React、Vue、Angular...
      • 2019/0514/Sass&Scss
      • 2019/0514/MVC結合Webform
      • 2019/0515/ASP.NET MVC_TempData/ViewData/ViewBag
      • 2019/0522/[自學筆記]海綿體啟蒙??
Powered by GitBook
On this page
  • JSmusicplay
  • 跑馬燈顯示即時歌曲名稱
  • 不同瀏覽器相容性問題
  • 歌本撥放清單與列表清單功能
  • 歌本 CSS
  • 清單交換功能
  • 拖移功能
  • 更新自選歌單
  • bug 修正 audio 裡面還是在撥第一首歌
  • 細節修正
  • 樣式表&JS檔案抽離
  • IIS部屬
  • 設定路徑

Was this helpful?

  1. 職訓局里程碑
  2. 201903

2019/0306/Javascript musicplay_really_end

JSmusicplay

跑馬燈顯示即時歌曲名稱

function ChangeMusic(index) {
            song.src = music.options[index].value;
            music.options[index].selected = true;
            audio.load();
            if (info.innerText == "音樂播放中")
                audio.play();
                //PlayMusic();
        }

        function ShowStatus(status) {
            var strStatus = "";

            switch (status) {
                case 1:
                    strStatus = "音樂播放中";
                    break;
                case 2:
                    strStatus = "音樂暫停";
                    break;
                case 3:
                    strStatus = "音樂停止";
                    break;
            }

            info.innerText = strStatus;
        }

每個標籤都有 title 屬性

inner text ( tag 夾著的中間值 )

將 inner text 餵給 title

不知道為啥不是新增變數

將原本撥放中換歌繼續撥放的判別文本值改為判別按鈕狀態

  function ChangeMusic(index) {
            song.src = music.options[index].value;
            song.title = music.options[index].innerText;
            console.log(song.title);
            music.options[index].selected = true;
            audio.load();
            
            if (play.innerText == ";") {
                audio.play();
                ShowStatus(1);
            }
                //PlayMusic();
        }

        function ShowStatus(status) {
            var strStatus = "";

            switch (status) {
                case 1:
                    strStatus = "現正播放:" + song.title;
                    break;
                case 2:
                    strStatus = "音樂暫停";
                    break;
                case 3:
                    strStatus = "音樂停止";
                    break;
            }

            info.innerText = strStatus;
        }

不同瀏覽器相容性問題

細項設定不同,造成問題

瀏覽器偵測 key 兩種版本的代碼

每個瀏覽器使用的核心不一樣

瀏覽器其實是雲端程式 伺服器端只是一個介面,而每個使用者都只是agent

以下範例為操作input這個動作的時候才作判別而不是瀏覽器一執行就做判別

vol.addEventListener("input", function () { VolumeChange("c"); });

vol.addEventListener(BrowserTest(), function () { VolumeChange("c"); });

 //瀏覽器偵測
        function BrowserTest() {
            if (navigator.userAgent.search("Chrome") != -1)
                return "input";
            else if (navigator.userAgent.search("Opera") != -1)
                return "input";
            else if (navigator.userAgent.search("Firefox") != -1)
                return "input";
            else
                return "change";
         
        }

歌本撥放清單與列表清單功能

拖拉 html5 方法 drag and drop

目的區塊 來源區塊

什麼物件都可以

程式結構調整將歌串移至歌本清單

最好利用物件擁有的屬性放東西 將value改為title

     <div id="Sbook">
            <div title="music/nothing.mp3">Nothing Gonna Change My Love For You</div>
            <div title="music/nomouth.mp3">真的不想嘴</div>
            <div title="music/travel.mp3">帶你去旅行</div>
            <div title="music/tearshining.mp3">夏川里美-淚光閃閃</div>
            <div title="music/airball.mp3">周杰倫-告白汽球</div>
            <div title="music/sweety.mp3">汪蘇瀧&By2-有點甜</div>
            <div title="music/careyou.mp3">鄧麗君-我只在乎你</div>
            <div title="music/elysees.mp3">Champs-Elyees</div>
            <div title="music/little.mp3">田馥甄-小幸運</div>
            <div title="music/MV.mp3">旺福-咖啡戀曲</div>
            <div title="music/Right.mp3">Keren Ann-Right Now & Right Here</div>
            <div title="music\prettyboy.mp3">M2M-Pretty Boy</div>
            <div title="music\moon.mp3">五月天-私奔到月球</div>
            <div title="music\PartyAnimal.mp3">五月天-派對動物</div>
            <div title="music\warmheart.mp3">郁可唯-暖心</div>
            <div title="music\lovegood.mp3">蘇永康&陳潔儀-愛的正好</div>
            <div title="music\oldclock.mp3">平井堅-古老的大鐘</div>
            <div title="music\yoursmile.mp3">FIR-你的微笑</div>
            <div title="music\onion.mp3">丁噹-洋蔥</div>
            <div title="music\iamfly.mp3">FIR飛兒樂團-我要飛</div>
            <div title="music\notlove.mp3">張韶涵 - 親愛的那不是愛情</div>
            <div title="music\always.mp3">SHE-Always on my mind</div>
            <div title="music\years.mp3">胡夏-那些年</div>
            <div title="music\sliverdragon.mp3">中島美雪-騎在銀龍的背上</div>
            <div title="music\onlyflower.mp3">SMAP-世界唯一僅有的花 </div>
            <div title="music\lovehim.mp3">李聖傑&林隆旋-你那麼愛他</div>
            <div title="music\remember.mp3">張惠妹-記得</div>
            <div title="music\couple.mp3">曹格-兩隻戀人</div>
            <div title="music\myangle.mp3">Tank-專屬天使</div>
        </div>
        <div id="Tbook"></div>

歌本 CSS

overflow:auto 自動卷軸 ( 上面歌單列表超出div

cursor:copy 自訂鼠標

#Sbook,#Tbook{
            width:294px;
            border:3px solid;
            float:left;
            height:200px;
            overflow:auto;
            cursor:copy;
        }

清單交換功能

並把原程式結構對應的 value 與innertext做更改

動操作 文件物件模型的樹 結點跟結點之間去更動

抓div到另一個div 且沒設id

可以用數第幾個

一抓觸發ondragstart 放下時觸發ondragover

ev.preventDefault(); 停止物件預設行為

  var Sbook = document.getElementById("Sbook");
  var Tbook = document.getElementById("Tbook");
  
     //抓預設歌曲
        function getDefaultSong() {
            for (i = 0; i < Sbook.children.length; i++) {
                var option = document.createElement("option");
                option.value = Sbook.children[i].title;
                option.innerText = Sbook.children[i].innerText;

            }
        }

拜訪結點 移動結點 複製 刪除結點

draggable=true 必須擁有此屬性才能被搬動

        function getDefaultSong() {
            for (i = 0; i < Sbook.children.length; i++) {
                var option = document.createElement("option");
                var Snode = Sbook.children[i];
                option.value = Snode.title;
                option.innerText = Snode.innerText;
                music.appendChild(option);

                Snode.draggable = true;
            }

問題來了如何餵一首首的歌曲事件監聽器

event事件的物件

target 觸發

event.target.id 觸發這個事件的id

Sbook.addEventListener("dragstart", function () { drag(event); });

 function drag(evt) {
            evt.dataTransfer.setData("text", evt.target.id);
            //alert(evt.target.id);
        }

氣泡式

拖移功能

dragover 事件

drop 事件

左拖到右

Sbook.addEventListener("dragstart", function () { drag(event); });
Tbook.addEventListener("dragover", function () { allowDrop(event); });
Tbook.addEventListener("drop", function () { drop(event); });
        
         function drop(evt) {
            evt.preventDefault();
            var data = evt.dataTransfer.getData("text");
            evt.target.appendChild(document.getElementById(data));
        }

        function allowDrop(evt) {
            evt.preventDefault();
        }


        function drag(evt) {
            evt.dataTransfer.setData("text", evt.target.id);
            //alert(evt.target.id);
        }

右拖到左

Tbook.addEventListener("dragstart", function () { drag(event); });
Sbook.addEventListener("dragover", function () { allowDrop(event); });
Sbook.addEventListener("drop", function () { drop(event); });

更新自選歌單

 
<div id="btnUpdateMusic">更新歌單</div>
 
 btnUpdateMusic.addEventListener("click", UpdateMusic);
   
   //更新歌單
        function UpdateMusic() {

            //清掉所有歌
            for (i = music.children.length-1; i >= 0; i--) {

                music.removeChild(music.children[i]);


            }


            for (i = 0; i < Tbook.children.length; i++) {
                var option = document.createElement("option");
                var Snode = Tbook.children[i];
                option.value = Snode.title;
                option.innerText = Snode.innerText;
                music.appendChild(option);

           
            }
        }

索引值改變所以要倒過來寫

因為迴圈是一次刪一首

從前面刪第一首刪掉第二首會變第一首所以第二次刪是刪第三首

bug 修正 audio 裡面還是在撥第一首歌

   //更新歌單
        function UpdateMusic() {
            //清掉所有歌
            for (i = music.children.length-1; i >= 0; i--) {
                music.removeChild(music.children[i]);
            }


            for (i = 0; i < Tbook.children.length; i++) {
                var option = document.createElement("option");
                var Snode = Tbook.children[i];
                option.value = Snode.title;
                option.innerText = Snode.innerText;
                music.appendChild(option);
          
            }

            SongChange("a");
        }
        
        
        //抓預設歌曲
        function getDefaultSong() {
            for (i = 0; i < Sbook.children.length; i++) {
                var option = document.createElement("option");
                var Snode = Sbook.children[i];
                option.value = Snode.title;
                option.innerText = Snode.innerText;
                music.appendChild(option);

                Snode.draggable = true;
                Snode.id = "song" + (i + 1);
            }

            SongChange("a");
        }

呼叫 song change ("a") 寫成獨立函數的好處需要做那件事情時呼叫

改掉audio預設屬性

細節修正

歌本按鈕 隱藏 顯示 歌本 控制旗標

display:none 不留空位

vsiblte 不顯示留空位

title="hide" 點一下 title 改成 show 判斷是show or hide

  
css
  
  .hide{
            display:none;
        }
        .show {
            display: block;
        }
        
html
  
  <span id="songbook">@</span>
  
  <div id="book" class="hide">
            <div id="Sbook">
                <div title="music/nothing.mp3">Nothing Gonna Change My Love For You</div>
                <div title="music/nomouth.mp3">真的不想嘴</div>
                <div title="music/travel.mp3">帶你去旅行</div>
                .
                .
                .
                
javascript

        function displayBook(displayFlag) {
            if (displayFlag == "hide") {
                book.title = "show";
               
            }
            else {
                book.title = "hide";
                
            }
            book.className = book.title;
        }        

css 標籤 固定藉由改變class title 的值 造成css樣態改變

細節修正

audio.currentTime = audio.duration * (evt.offsetX / 600);


<div id="ControlPanel" style="width:600px;">
audio.currentTime = audio.duration * (evt.offsetX / parseInt(ControlPanel.style.width);

樣式表&JS檔案抽離

關注點分離

 <link href="PlayerStyle.css" rel="stylesheet" />
 <script src="Player.js"></script>

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>

    <link href="PlayerStyle.css" rel="stylesheet" />

</head>
<body>

    <audio id="audio">
        <source id="song" type="audio/mpeg" />

    </audio>

    <div id="ControlPanel" style="width:600px;">
        <select id="music">
           
        </select>

        <div id="FuncBtn">
            <span id="play">4</span>
            <!--<span id="pause">;</span>-->
            <span id="stop"><</span>
            <span id="prevsong">9</span>
            <span id="prevtime">7</span>
            <span id="nexttime">8</span>
            <span id="nextsong">:</span>
            <span id="muted">V</span>
            <span id="loop">q</span>
            <span id="random">s</span>
            <span id="allloop">`</span>
            <span id="songbook">@</span>
        </div>
        <div id="volume">
            <input id="vol" type="range" min="0" max="100" value="10" />
            <input id="volM" type="button" value="-" />
            <input id="volP" type="button" value="+" />
            <input id="volValue" type="text" readonly="readonly" />
        </div>
        <div id="settime">
            <div id="progress"></div>
        </div>

        <div id="InfoPanel">
            <div id="duration">00:00 / 00:00</div>
            <marquee id="info">請按播放鈕~~~~~</marquee>
            <div id="info2"></div>
        </div>
        <hr />
        <div id="book" class="hide" title="hide">
            <div id="Sbook">
                <div title="music/nothing.mp3">Nothing Gonna Change My Love For You</div>
               .
               .
               .
            </div>
            <div id="Tbook">

            </div>
            <div id="btnUpdateMusic">
                更新歌單
            </div>
        </div>
    </div>
    <script src="Player.js"></script>
</body>
</html>

IIS部屬

家用版跟伺服器版差別就是服務的網站數量

設定路徑

進階設定 實體路徑

Previous2019/0305/SS查詢式end&ASP.NET_Gridview_自訂樣式分頁Next2019/0307/前端HTML5鑲嵌字型&伺服器網域概念

Last updated 6 years ago

Was this helpful?