站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        帶你使用CSS+jQuery實現(xiàn)一個文字轉(zhuǎn)語音機(jī)器人

        本篇文章手把手帶大家使用CSS+jQuery實現(xiàn)一個文字轉(zhuǎn)語音機(jī)器人,希望對大家有所幫助!

        帶你使用CSS+jQuery實現(xiàn)一個文字轉(zhuǎn)語音機(jī)器人

        前端(vue)入門到精通課程:進(jìn)入學(xué)習(xí)
        Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調(diào)試工具:點擊使用

        素材

        • 機(jī)器人眼睛

          帶你使用CSS+jQuery實現(xiàn)一個文字轉(zhuǎn)語音機(jī)器人

        【推薦學(xué)習(xí):css視頻教程、jQuery視頻教程、web前端視頻】

        頁面布局

        機(jī)器人樣式參考了下圖,通過css拼造型的方式進(jìn)行實現(xiàn)。部分還原了設(shè)計圖

        帶你使用CSS+jQuery實現(xiàn)一個文字轉(zhuǎn)語音機(jī)器人

        • 頭頂部分 頭頂部分是一個圓+偽類after實現(xiàn)白點

         <div class="tianxian"></div>  .tianxian{     width: 35px;     height: 35px;     border-radius: 50%;     background: #0e58cc;     position: absolute;     left: 0;     right: 0;     top: 0;     margin: auto;   }   .tianxian::after{     content: '';     display: block;     width: 5px;     height: 10px;     border-radius: 12px;     background: #fff;     position: absolute;     top: 10px;     left: 5px;     transform: rotateZ(20deg);   }
        登錄后復(fù)制

        整體布局采用絕對定位布局 利用整個頭部,實現(xiàn)耳朵和眼睛的定位

        <div class="head">       <div class="erduo"></div>       <div class="erduo"></div>       <div class="face">         <div class="eye"></div>         <div class="eye"></div>       </div>     </div>
        登錄后復(fù)制

        • 立體效果 通過box-shadow 的inset特性,通過適當(dāng)偏移x,y軸,實現(xiàn)內(nèi)陰影的立體效果

         box-shadow: -5px -5px 30px 1px #0075af inset;
        登錄后復(fù)制

        • 文字轉(zhuǎn)語音實現(xiàn)

        基于瀏覽器提供的SpeechSynthesisUtterance Api進(jìn)行實現(xiàn)

        SpeechSynthesisUtterance基本屬性

        • SpeechSynthesisUtterance.lang 獲取并設(shè)置話語的語言
        • SpeechSynthesisUtterance.pitch 獲取并設(shè)置話語的音調(diào)(值越大越尖銳,越低越低沉)
        • SpeechSynthesisUtterance.rate 獲取并設(shè)置說話的速度(值越大語速越快,越小語速越慢)
        • SpeechSynthesisUtterance.text 獲取并設(shè)置說話時的文本
        • SpeechSynthesisUtterance.voice 獲取并設(shè)置說話的聲音
        • SpeechSynthesisUtterance.volume 獲取并設(shè)置說話的音量

        SpeechSynthesisUtterance.text基本方法

        • speak() 將對應(yīng)的實例添加到語音隊列中
        • cancel() 刪除隊列中所有的語音.如果正在播放,則直接停止
        • pause() 暫停語音
        • resume() 恢復(fù)暫停的語音

        為按鈕添加點擊事件,獲取input輸入框的值,并進(jìn)行播放,添加眼睛動畫,并在播放結(jié)束的回調(diào)移除眼睛動畫

        $('#btn').click(function () {       let text = $('#input').val()       if (text) {         $('.eye').addClass('shine')       }       let u = new window.SpeechSynthesisUtterance()       u.text = text       u.lang = 'zh'       u.rate = 0.7       u.onend = function () {         $('.eye').removeClass('shine')       }       speechSynthesis.speak(u)     })
        登錄后復(fù)制

        動畫類:

         .shine {     animation: shine 1s linear infinite;   }   @keyframes shine {     0%{       height: 100px;     }     100%{       height: 0px;     }   }
        登錄后復(fù)制

        完整代碼:

        HTML+CSS

        <style>   * {     margin: 0;     padding: 0;     list-style: none;     box-sizing: border-box;   }    html,   body {     width: 100%;     height: 100%;     overflow: hidden;     background: #000;   }   .robot{     width: 658px;     height:800px;     position: absolute;     left: 0;     right: 0;     margin: auto;     top: 0;     bottom: 0;   }   .tianxian{     width: 35px;     height: 35px;     border-radius: 50%;     background: #0e58cc;     position: absolute;     left: 0;     right: 0;     top: 0;     margin: auto;   }   .tianxian::after{     content: '';     display: block;     width: 5px;     height: 10px;     border-radius: 12px;     background: #fff;     position: absolute;     top: 10px;     left: 5px;     transform: rotateZ(20deg);   }   .gun{     width: 5px;     height: 30px;     background:#0075af ;     position: absolute;     left: 0;     right: 0;     top: 35px;     margin: auto;   }   .gai{     width: 60px;     height: 60px;     background: #fff;     box-shadow: -5px -5px 30px 1px #0075af inset;     position: absolute;     left: 0;     right: 0;     top: 65px;     margin: auto;     border-radius: 50%;   }   .head{     width: 370px;     height: 350px;     position: absolute;     left: 0;     right: 0;     top: 95px;     margin: auto;     border-radius: 70px;     background: #fff;     box-shadow: -5px -5px 30px 1px #0075af inset;   }   .erduo{     width: 60px;     height: 180px;     background: #0022b0;     position: absolute;     top: 0;     bottom: 0;     margin: auto 0;     border-radius: 60px;     border-top: 4px solid #0e9df9;     border-bottom: 4px solid #0e9df9;     box-shadow: -5px -5px 30px 1px #0075af inset;   }   .erduo:nth-child(1) {     border-left: 4px solid #0e9df9;     left: -40px;   }   .erduo:nth-child(2){     border-right: 4px solid #0e9df9;     right: -40px;     box-shadow: -5px -5px 30px 1px #0075af inset;   }   .face{     width: 288px;     height: 244px;     background: #03192f;     position: absolute;     left: 0;     right: 0;     top: 0;     bottom: 0;     margin: auto;     border-radius: 60px;     box-shadow: -5px -5px 30px 1px #0075af inset;   }   .eye{     width: 30px;     height: 100px;     background-image: url('https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/41c21816e3c740eaa43ade57de3eb5a5~tplv-k3u1fbpfcp-watermark.image');     background-size: contain;     position: absolute;     top: 0;     bottom: 0;     margin: auto;   }   .eye:nth-child(1){     left: 60px;   }   .eye:nth-child(2){     right: 60px;   }   .trans{     width:370px;     position: absolute;     display: flex;     justify-content: center;     align-items: center;     color: #fff;     left: 0;     right: 0;     margin: auto;     top:  600px;     font-size: 16px;   }   #input{     margin-right: 10px;     background: transparent;     border: none;     outline: none;     color: #fff;     border-bottom: 1px dashed #fff;     height: 40px;    }   #btn{     cursor: pointer;   }   .shine {     animation: shine 1s linear infinite;   }   @keyframes shine {     0%{       height: 100px;     }     100%{       height: 0px;     }   } </style> <body>     <div class="robot">     <div class="tianxian"></div>     <div class="gun"></div>     <div class="gai"></div>     <div class="head">       <div class="erduo"></div>       <div class="erduo"></div>       <div class="face">         <div class="eye"></div>         <div class="eye"></div>       </div>     </div>   </div>   <div class="trans">     <input id="input" type="text">     <div id="btn">點擊朗讀</div>   </div> </body>
        登錄后復(fù)制

        js

         $(function () {     $('#btn').click(function () {       let text = $('#input').val()       if (text) {         $('.eye').addClass('shine')       }       let u = new window.SpeechSynthesisUtterance()       u.text = text       u.lang = 'zh'       u.rate = 0.7       u.onend = function () {         $('.eye').removeClass('shine')       }       speechSynthesis.speak(u)     })   })
        登錄后復(fù)制

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 精品爆乳一区二区三区无码av| 国产精品免费大片| 老司机亚洲精品影院| 国产99视频精品专区| 久久99久久99精品免视看动漫| 精品久久久久久国产免费了| 国产精品成人va在线观看| 中文字幕一区二区三区日韩精品| 国产999精品久久久久久| 国产亚洲精品精华液| 真实国产乱子伦精品一区二区三区| 国产精品igao视频| laowang在线精品视频| 久热这里只有精品12| 中文精品久久久久人妻不卡| 免费人欧美日韩在线精品| 国产成人精品一区在线| 99热精品毛片全部国产无缓冲 | 国产偷国产偷高清精品| 91精品国产综合久久久久久| 无码国内精品人妻少妇| 偷拍精品视频一区二区三区| 精品国产一区二区三区AV性色| 99精品高清视频一区二区| 精品人人妻人人澡人人爽人人| 亚洲一区精品伊人久久伊人| 好湿好大硬得深一点动态图91精品福利一区二区 | 精品久久久久久久久中文字幕| 国产精品免费福利久久| 欧美精品videosse精子| 在线精品动漫一区二区无广告| 欧美人与性动交α欧美精品成人色XXXX视频 | 国产成人精品天堂| 国产精品福利自产拍在线观看 | 国产精品无码a∨精品| 精品无码av一区二区三区| 午夜不卡久久精品无码免费| 亚洲精品~无码抽插| 亚洲αv在线精品糸列| 日本内射精品一区二区视频| 日韩国产成人精品视频|