原生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返回的结果常 ...
随机推荐
- Annotation基础知识
1.Annotation介绍 Annontation是Java5开始引入的新特征.中文名称一般叫注解. Annontation像一种修饰符一样,应用于包.类型.构造方法.方法.成员变量.参数及本地变量 ...
- 《Thinking in Java》学习笔记(一)
服务器端的编程可以参考另一本书<企业Java编程>(Thinking in Enterprise Java). 1.基本类型 基本型别 大小 最小值 最大值 默认值 boolean -- ...
- MySQL二进制日志binlog简单使用
MySQL数据库进行了哪些CUD操作,通过binlog二进制文件可以查看.binlog不仅可以记录CUD的操作(select操作不包括在内),还是主从备份的基础.主库的操作记录成binlog文件,定期 ...
- BZOJ 3143: [Hnoi2013]游走 [概率DP 高斯消元]
一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分 ...
- C 洛谷 P3599 Koishi Loves Construction [构造 打表观察]
题目描述 Koishi决定走出幻想乡成为数学大师! Flandre听说她数学学的很好,就给Koishi出了这样一道构造题: Task1:试判断能否构造并构造一个长度为的的排列,满足其个前缀和在模的意义 ...
- ORM规约变更经典案例---mysql军规
先介绍一下<MySQL数据库开发的三十六条军规>,这里只介绍核心的,具体内容大家可以自行百度,这是从底层开发人员到管理者必须知道规范.出自58赶集. 写在前面的话: 总是在灾难发生后,才想 ...
- php扩展开发实战教程(1)
我的开发环境: Ubuntu16.04 apt方式安装的php5.6, apache,mysql等 由于我的本机用的是apt方式安装的php,所以我这里从头开始用最精简的方式,编译安装一个php5.4 ...
- 给Linux系统/网络管理员的nmap的29个实用例子
Nmap亦称为Network Mapper(网络映射)是一个开源并且通用的用于Linux系统/网络管理员的工具.nmap用于探查网络.执行安全扫描.网络核查并且在远程机器上找出开放端口.它可以扫描在线 ...
- MySQL数据库基础(三)(操作数据表中的记录)
1.插入记录INSERT 命令:,expr:表达式 注意:如果给主键(自动编号的字段)赋值的话,可以赋值'NULL'或'DEFAULT',主键的值仍会遵守默认的规则:如果省略列名的话,所有的字段必须一 ...
- PHP如何防止XSS攻击
PHP防止XSS跨站脚本攻击的方法:是针对非法的HTML代码包括单双引号等,使用htmlspecialchars()函数 . 在使用htmlspecialchars()函数的时候注意第二个参数, 直接 ...