比如我们可以复制以下代码,在浏览器控制台中发起请求,就可以完成翻译
划词翻译是一种常见的网页功能,用户选择一个单词或一段文本时,自动弹出一个小窗口,显示该单词或文本的翻译。
1.首先,在HTML页面中添加一个空的DIV元素和一个触发翻译的按钮
document.addEventListener("mouseup",(event)=>{constselection=window.getSelection().toString().trim();if(selection){keyword=selection;}});3.鼠标点击执行翻译逻辑。可以使用AJAX请求从后台获取翻译结果并将其显示在DIV元素中。
functiontranslate(){if(keyword){//执行翻译逻辑}}icon.addEventListener("mouseover",translate);4.在CSS样式表中为DIV元素添加样式,使其浮动在页面上显示。
#translation{position:fixed;top:10px;right:10px;max-width:300px;padding:5px;background-color:#f7f7f7;border:1pxsolid#ccc;box-shadow:0px2px5pxrgba(0,0,0,0.1);z-index:9999;}以上这些步骤就能实现划词翻译的基本功能,一起来看下效果。
使用antd的Popover组件来显示,使用react重构下js代码,我们就可以实现如下效果。
点击翻译按钮,就会通过接口请求,将翻译结果显示在下方。但是翻译结果需要等api完全返回,才会显示出来,这样会等待较慢,我们可以使用Stream,OpenAI的接口支持流渲染吗,这样结果就会一个字一个字蹦出来。
这样响应的内容就会根据Server-sentevents(服务器发送的事件)逐个显示了。
一般翻译插件都有语音播放的功能,我们可以利用可以使用WebSpeechAPI。此API提供了两个语音合成接口:SpeechSynthesis和SpeechSynthesisUtterance
functionspeak(text){if('speechSynthesis'inwindow){constutterance=newSpeechSynthesisUtterance(text);utterance.voice=speechSynthesis.getVoices()[0];utterance.pitch=1;utterance.rate=1;speechSynthesis.speak(utterance);}}然后直接调用这个函数,传入需要朗读的文本,就可以实现语音播放
speak('Hello,world!');
本文介绍了如何实现划词翻译的基本功能,包括使用OpenAI提供的接口进行翻译、在HTML页面中添加触发翻译的按钮和鼠标抬起事件监听事件、使用AJAX请求从接口获取翻译结果并将其显示在DIV元素中等。同时还介绍了如何使用webpack+react+antd实现一个现代化的插件,并利用WebSpeechAPI实现语音播放功能。