先来个在线demo:

js翻译工具

或者百度搜索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实现的翻译工具的更多相关文章

  1. js调用百度地图api

    <!DOCTYPE html> <html>     <head>         <meta charset="UTF-8">   ...

  2. 基于百度通用翻译API的一个翻译小工具

    前几天写了一个简单的翻译小工具,是基于有道翻译的,不过那个翻译接口有访问限制,超过一定次数后会提示访问过于频繁,偶然发现百度翻译API如果月翻译字符少于200万是不收取费用的,所以就注册了一个百度开发 ...

  3. 利用百度翻译API,获取翻译结果

    利用百度翻译API,获取翻译结果 translate.py #!/usr/bin/python #-*- coding:utf-8 -*- import sys reload(sys) sys.set ...

  4. Angular 调用百度地图API接口

    Angular 调用百度地图API接口 参考原文:https://blog.csdn.net/yuyinghua0302/article/details/80624274 下面简单介绍一下如何在Ang ...

  5. 调用百度地图Api实现的查看地图功能的小插件

    1. 功能 bMap.js 可根据地理位置调用出百度地图,采用弹出框形式 2.用法 var city = '青岛市'; var address = '香港中路'; bMap.init({ city : ...

  6. 【c#】Form调用百度地图api攻略及常见问题

    首先,在Form中调用百度地图api,我们需要使用webbrowser控件,这个在前面的文章中已经讲过了,可以参照(http://blog.csdn.net/buptgshengod/article/ ...

  7. HTML5调用百度地图API获取当前位置并直接导航目的地的方法

    <!DOCTYPE html> <html lang="zh-cmn-Hans">     <meta charset="UTF-8&quo ...

  8. 跨平台移动开发_PhoneGap 使用Geolocation基于所在地理位置坐标调用百度地图API

    使用Geolocation基于所在地理位置坐标调用百度地图API 效果图 示例代码 <!DOCTYPE html> <html> <head> <title& ...

  9. C++中使用Curl和JsonCpp调用有道翻译API实现在线翻译

    使用C++开发一个在线翻译工具,这个想法在我大脑中过了好几遍了,所以就搜了下资料,得知网络上有很多翻译API,这里我选择我平时使用较多的有道翻译API进行在线翻译工具开发的练习.翻译API返回的结果常 ...

随机推荐

  1. BZOJ 4568: [Scoi2016]幸运数字 [线性基 倍增]

    4568: [Scoi2016]幸运数字 题意:一颗带点权的树,求树上两点间异或值最大子集的异或值 显然要用线性基 可以用倍增的思想,维护每个点向上\(2^j\)个祖先这些点的线性基,求lca的时候合 ...

  2. BZOJ 1815: [Shoi2006]color 有色图 [Polya DFS 重复合并]

    传送门 题意: 染色图是无向完全图,且每条边可被染成k种颜色中的一种.两个染色图是同构的,当且仅当可以改变一个图的顶点的编号,使得两个染色图完全相同.问N个顶点,k种颜色,本质不同的染色图个数(模质数 ...

  3. Windows下Nginx的配置及配置文件部分介绍

    一.在官网下载 nginx的Windows版本,官网下载:http://nginx.org/download/ 选择你自己想要的版本下载,解压 nginx(例如nginx-1.6.3) 包到你的win ...

  4. MySQL绿色版安装

    下载MySQL绿色版 去官方下载mysql.,我下载的是 mysql-5.6.27-winx64,下载后解压缩到D:盘. 安装MySQL服务 拷贝my-default.ini重命名为my.ini,修改 ...

  5. phpMyAdmin的使用

    phpMyAdmin的使用 安装MySQL数据库后,用户即可在命令行提示符下进行创建数据库和数据表等各种操作,但这种方法非常麻烦,而且需要有专业的SQL语言知识.PHP官方开发了一个类似于SQL Se ...

  6. mysql cp复制和mysqldump备份测试

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 备份策略 针对不同的场景下, 我们应该制定不同的备份策略对数据库进行 ...

  7. Apollo阿波罗配置中心docker

    前言 在分布式系统中,要改个配置涉及到很多个系统,一个一个改效率低下,吃力不讨好.用配置中心可以解决这个问题.当然配置中心有不少,以下对比的表格是照搬Apollo Wiki的. 功能点 Apollo ...

  8. Java经典编程题50道之四十八

    某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字, 再将第一位和第四位交换,第二位和第三位交换. public ...

  9. Java经典编程题50道之二十四

    有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁. 问第三个人,他说比第2人大两岁.问第2个人, 说比第一个人大两岁.最后问第一个人,他说是10岁. 请问 ...

  10. C/C++语言简介之语言特点

    一.基本特性    1.高级语言:它是把高级语言的基本结构和语句与低级语言的实用性结合起来的工作单元.    2.结构式语言:结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交 ...