原生js简单调用百度翻译API实现的翻译工具
先来个在线demo:
或者百度搜索js简单调用百度翻译API工具(不过有个小小的界面显示bug,我想细心的人应该会发现)
或者直接前往该网址:js翻译工具
或者前往我的github:github(eveningwater,觉得不错希望点个star(谢谢))下载源码
在说之前,先友情提示一下,由于本人审美有问题,所以界面很不美观,不过我相信逻辑功能还是不错的!
现在说一下实现思路吧:
当然第一步,需要前往百度翻译官网,注册申请一个appid和key,网址如下:百度翻译官网,官网有详细步骤和介绍,我就不多说了.
然后呢,我们开始组织思路,既然要翻译,那么就要有输入框,有输入文本,翻译结果放置地方,并且我这里的翻译还有多种翻译,所以需要分类.html代码如下:
<main class="translate"> <header class="t-header"> <span class="title">当前翻译语言类型:</span> <span class="result">英语</span> <ul class="lang-panel"> <li data-type="en">英语</li> <li data-type="zh">汉语</li> <li data-type="jp">日语</li> <li data-type="kor">韩语</li> <li data-type="fra">法语</li> <li data-type="ru">俄语</li> <li data-type="de">德语</li> </ul> </header> <section class="content"> <textarea class="input" placeholder="请输入你要翻译的单词或语句"></textarea> <textarea class="output" placeholder="翻译结果"></textarea> </section> <footer class="t-footer"> <button type="button" class="transbtn">翻译</button> <button type="button" class="clear">清除</button> </footer> </main>
其实html和css代码也没啥好说的,有兴趣的可以修改一下我写的css代码(谁叫写的丑呢,原谅我的审美度).
css代码如下:
body,html,section,main,header,div,button,ul,li,span,textarea,footer{
margin: 0;padding: 0;
}
body,html,section,main,header,div,button,ul,li,span,textarea,footer{
box-sizing: border-box;
}
body,html,section,main,header,div,button,ul,li,textarea,footer{
display: block;
}
main,.content,.t-header{
position: relative;
margin-left: auto;
margin-right: auto;
}
.lang-panel{
position: absolute;
}
button,textarea{
outline: none;
}
ul,li{
list-style: none;
}
.title,.result {
font-size: 20px;
line-height: 45px;
color: rgb(33, 32, 32,0.99);
}
body{
font: 16px "微软雅黑";
overflow: hidden;
height: 100%;
width: 100%;
background-color: #eee;
}
main{
width: calc(100% - 60px);
height: auto;
border: 1px solid #ddd;
box-shadow: 0 5px 10px rgba(255, 255, 255, 0.16);
background-color: rgba(16, 2, 2, 0.31);
padding: 10px;
margin-top: 10px;
}
main .t-header{
width: 100%;
height: 45px;
background-color: rgba(23, 26, 28, 0.82);
border-bottom: 1px solid #f2f2f2;
}
.t-header .title{
text-align: left;
color: #e544a7;
}
.t-header .result{
text-align: right;
color: #e33535;
}
.lang-panel {
width: calc(80% - 20px);
height: 42px;
top: 0;left: 200px;
}
.lang-panel li{
width: 100px;
height: 45px;
line-height: 45px;
text-align: center;
margin-left: 16px;
color: #0012ff;
float: left;
cursor: pointer;
}
.lang-panel li:hover{
background-color: rgba(255, 255, 255, 0.21);
}
main .content{
width: 100%;
height: 400px;
background-color: transparent;
}
.content textarea{
border: 1px solid #ccc;
display: inline-block;
width: 49%;height: 100%;
margin-left: 10px;
float: left;
font-size: 18px;
overflow-y: auto;
overflow-x: hidden;
}
.content textarea:focus{
border: 1px solid rgba(121, 178, 214, 0.82);
box-shadow: 0 0 10px rgba(121, 178, 214, 0.82);
}
.t-footer {
width: 100%;
height: 45px;
border-top: 1px solid #f2f2f2;
}
.t-footer button{
width: 60px;
height: 45px;
background-color: rgba(49, 196, 240, 0.92);
color: #efebf2;
text-align: center;
line-height: 45px;
border: 1px solid rgba(238, 238, 238, 0.17);
margin-left: 25px;
margin-right: 15px;
margin-top: 5px;
float: right;
cursor: pointer;
}
.t-footer button:hover{
transform: scale(1.1);
}
重点还是说一下js逻辑吧,首先调用接口获取得到的数据,由于要跨域,所以就要学jsonp原理将数据通过script标签引入,然后才能访问,然后无非就是一些事件的操作,dom元素的操作与函数的封装写法,基本也没啥了,当然其实关于js代码,我也注释的比较详细的.js代码如下:
(function(){
/*变量定义部分*/
var type = document.getElementsByClassName('lang-panel')[0].children;//获取语言类型标签
var result = document.getElementsByClassName('result')[0];//获取语言选择后的结果标签
var input = document.getElementsByClassName('input')[0],//获取输入内容标签
output = document.getElementsByClassName('output')[0];//获取输出结果标签
var transBtn = document.getElementsByClassName('transbtn')[0],//获取翻译按钮
clear = document.getElementsByClassName('clear')[0];//获取清除按钮
var lang = "en",//语言类型
timer = null,//定时器
len = type.length;//语言类型标签的长度
function createScript(src){
//创建一个script标签
var script = document.createElement('script');
//添加src和id属性
script.id = 'urlData';
script.src = src;
//将script标签添加到body页面中
document.body.appendChild(script);
}
function changeType(){
//获取到属性data-type,此时this指向获取的语言类型标签
lang = this.getAttribute('data-type');
//然后将语言类型值赋值给结果标签
result.innerHTML = this.innerHTML;
}
function translate(){
//获取接口
var value = 'http://api.fanyi.baidu.com/api/trans/vip/translate?';
//获取当前时间
var date = Date.now();
//此处拼接接口数据,好转换成jsonp数据格式,实现跨域访问
var str = '20170605000052254' + input.value + date + '63r1c42X7_buc4OrXm1g';
//使用加密算法计算数据
var md5 = MD5(str);
//然后得到的数据
var data = 'q=' + input.value + '&from=auto&to=' + lang + '&appid=20170605000052254' + '&salt=' + date + '&sign=' + md5 + "&callback=callbackName";
//引入src路径
var src = value + data;
//调用创建script标签函数
createScript(src);
}
function init(){
//循环添加点击事件
for(var i = 0;i < len;i++){
//点击时间就是改变语言类型
type[i].onclick = changeType;
}
//清除按钮点击事件
clear.onclick = function(){
input.value = "";
}
//点击翻译
transBtn.onclick = function(){
//如果输入内容为空则返回
if(input.value == ""){
return;
}
//获取创建的script标签
var s = document.getElementById('urlData');
//如果script标签已经存在删除了重新创建
if(s){
s.parentNode.removeChild(s);
translate();
}else{
translate();
}
}
//键盘按下事件
output.onkeydown = function(){
//清除定时器
clearInterval(timer);
timer = setInterval(function(){
if(input.value == ""){
return;
}
//获取创建的script标签
var s = document.getElementById('urlData');
if(s){
s.parentNode.removeChild(s);
translate();
}else{
translate();
}
},500);
clearTimeout(timer);
}
}
init();
})();
//回调函数定义
function callbackName(str){
console.log(str);
//再次获取输出结果标签
var output = document.getElementsByClassName('output')[0];
output.innerHTML = str.trans_result[0].dst;
}
那是觉得不美观改一下css样式,我之前写好了之后,后面也忘记花时间修改一下j样式呢.嘿嘿!
原生js简单调用百度翻译API实现的翻译工具的更多相关文章
- js调用百度地图api
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- 基于百度通用翻译API的一个翻译小工具
前几天写了一个简单的翻译小工具,是基于有道翻译的,不过那个翻译接口有访问限制,超过一定次数后会提示访问过于频繁,偶然发现百度翻译API如果月翻译字符少于200万是不收取费用的,所以就注册了一个百度开发 ...
- 利用百度翻译API,获取翻译结果
利用百度翻译API,获取翻译结果 translate.py #!/usr/bin/python #-*- coding:utf-8 -*- import sys reload(sys) sys.set ...
- Angular 调用百度地图API接口
Angular 调用百度地图API接口 参考原文:https://blog.csdn.net/yuyinghua0302/article/details/80624274 下面简单介绍一下如何在Ang ...
- 调用百度地图Api实现的查看地图功能的小插件
1. 功能 bMap.js 可根据地理位置调用出百度地图,采用弹出框形式 2.用法 var city = '青岛市'; var address = '香港中路'; bMap.init({ city : ...
- 【c#】Form调用百度地图api攻略及常见问题
首先,在Form中调用百度地图api,我们需要使用webbrowser控件,这个在前面的文章中已经讲过了,可以参照(http://blog.csdn.net/buptgshengod/article/ ...
- HTML5调用百度地图API获取当前位置并直接导航目的地的方法
<!DOCTYPE html> <html lang="zh-cmn-Hans"> <meta charset="UTF-8&quo ...
- 跨平台移动开发_PhoneGap 使用Geolocation基于所在地理位置坐标调用百度地图API
使用Geolocation基于所在地理位置坐标调用百度地图API 效果图 示例代码 <!DOCTYPE html> <html> <head> <title& ...
- C++中使用Curl和JsonCpp调用有道翻译API实现在线翻译
使用C++开发一个在线翻译工具,这个想法在我大脑中过了好几遍了,所以就搜了下资料,得知网络上有很多翻译API,这里我选择我平时使用较多的有道翻译API进行在线翻译工具开发的练习.翻译API返回的结果常 ...
随机推荐
- bzoj 4830: [Hnoi2017]抛硬币 [范德蒙德卷积 扩展lucas]
4830: [Hnoi2017]抛硬币 题意:A投a次硬币,B投b次硬币,a比b正面朝上次数多的方案数,模\(10^k\). \(b \le a \le b+10000 \le 10^{15}, k ...
- jenkins入门系列之一 jenkins的安装
Jenkins是一个CI(持续集成环境)工具.它可以根据设定持续定期编译,运行相应代码:运行UT或集成测试:将运行结果发送至邮件,或展示成报告... 这样做的最终目的是: 让项目保持健康的状态.如果任 ...
- js作用域的相关知识
众所周知,在ES6之前,JavaScript是没有块级作用域的,如下图所示: 学过其他语言的同学肯定有点诧异,为什么会这样呢?因为js还是不同于其他语言的,在ES5中,只有全局作用域和函数作用域,并没 ...
- php语言基础(一)
一.php标记风格 1.1xml风格(常用) <?php echo "xml风格": ?> 1.2脚本风格 <script language="php& ...
- Spring Mybatis-分页插件使用
Mybatis分页切入点 Mybatis内部有个plugins(插件)概念,本质上属于拦截器的思想.具体的解析可见外文MyBatis拦截器原理探究.本文将在此基础上直接展示实现代码和其他的相关解析 分 ...
- centos 6.8 下安装redmine(缺陷跟踪系统)
一.实验环境 centos6.8 64位 所需安装包: ruby-2.3.4.tar.gz.rubygems-1.8.25.tgz.redmine-2.3.2.tar.gz 二.安装步骤 1.安装必要 ...
- 框架学习笔记之Maven简介和配置
一.什么是Maven?★Maven可翻译为“知识的积累”.“专家”.“内行”,它是一个跨平台的项目管理工具.★Maven提供了开发人员构建一个完整的生命周期框架,开发团队可以自动完成项目的基础工具建设 ...
- web基础知识通信概述URI与http
1.url是什么,有什么作用: 说白了就是我们常说的网址:正规来说就是统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址. 互联网上的每个文件都有一个 ...
- Visual Studio 2017 发布 15.5 版本,百度网盘离线安装包下载。
Visual Studio 2017 15.5 版本已正式发布,同时发布的还有 Visual Studio for Mac 7.3 .此次更新包含主要性能改进,新特性以及 bug 修复.发行说明中文版 ...
- Egret学习笔记 (Egret打飞机-7.实现敌机工厂)
在游戏过程之,敌机是源源不断的冲屏幕上方往下飞,如果我们每一架敌机都直接new的话,在飞机很多的情况下,也许有性能问题. 就像前面子弹对象池一样,我们也要实现一个飞机对象池,也就是标题说的敌机工厂(之 ...