javascript实现 百度翻译 可折叠的分享按钮列表


Posted in Javascript onMarch 12, 2015

自从开始学习前端后,平时看到浏览器上的一些出彩的控件都想自己实现一下O(∩_∩)O,不知大家有没有这个感觉。接下来就和大家分享一个,原控件来自百度翻译右下方,大家仔细找找应该能找到,如图所示:

javascript实现 百度翻译 可折叠的分享按钮列表

感觉蛮有意思的,实现起来也不复杂,比较适合练手。好吧,废话不多说了,直接上代码吧。

html代码:

<!DOCTYPE html>

<html>

    <head>

        <meta charset = 'utf-8'/>

        <title>zoom</title>

        <link rel="stylesheet" type="text/css" href="zoom.css"/>

    </head>

    <body onload = "zoom()">

        <div id = 'zoom'>

            <span title = "分享....."></span>

            <ul>

                <li title="QQ空间" class="li1"></li>

                <li title="腾讯微博" class="li2"></li>

                <li title="新浪微博" class="li3"></li>

                <li title="人人网" class="li4"></li>

                <li title="百度" class="li5"></li>

                <li title="豆瓣网" class="li6"></li>

                <li title="搜狐" class="li7"></li>

                <li title="开心网" class="li8"></li>

            </ul>

        </div>

        <script type="text/javascript" src = "zoom.js"></script>

    </body>

</html>

css代码:

*{

  margin:0px;

  padding:0px;

}

#zoom{

  position: absolute;

  top: 20px;

  right: 200px;

  border: 1px solid rgb(38,147,255);

  height: 40px;

  width: 40px;

}

#zoom > span{

  display: inline-block;

  position: absolute;

  top: 0px;

  bottom: 0px;

  left: 0px;

  width: 40px;

  background-image: url(sprite.png);

  background-repeat: no-repeat;

  background-position: -5px -7px;

  opacity: 0.8;

  filter:Alpha(opacity=50);/*IE78*/

}

#zoom ul{

  display: none;

  position: absolute;

  top: 0px;

  bottom: 0px;

  left: 50px;

  list-style: none;

}

#zoom ul li{

  display: inline-block;

  *display: inline;/*IE7*/

  *zoom:1;/*IE7*/

  *margin-left: 5px;/*IE7*/

  width: 16px;

  height: 16px;

  margin-top: 12px;

  background-image: url(sprite.png);

  background-repeat: no-repeat;

}

#zoom .li1{

  background-position: -57px -20px; 

}

#zoom .li2{

  background-position: -77px -20px; 

}

#zoom .li3{

  background-position: -98px -20px; 

}

#zoom .li4{

  background-position: -119px -20px; 

}

#zoom .li5{

  background-position: -140px -20px; 

}

#zoom .li6{

  background-position: -161px -20px; 

}

#zoom .li7{

  background-position: -182px -20px; 

}

#zoom .li8{

  background-position: -203px -20px; 

}
#zoom li:hover{

  cursor: pointer;

  opacity: 0.8;

  filter:Alpha(opacity=50);/*IE78*/

}

#zoom span:hover{

  cursor: pointer;

  opacity: 1;

  filter:Alpha(opacity=100);/*IE78*/

}

js代码:

var zoom = (function(){

  var zoomDom = document.getElementById('zoom'),

      state = {opened: false, onaction: false, length: 0},

      showSpan,

      ul;

  if (zoomDom.firstElementChild) {

    showSpan = zoomDom.firstElementChild;

    ul = showSpan.nextElementSibling;

  }else{ /*IE*/

    showSpan = zoomDom.firstChild;

    ul = showSpan.nextSibling;

  }

  /*兼容IE78的注册事件方法*/

  var addEvent = function(el, eventType, eventHandler){

    if(el.addEventListener){

      el.addEventListener(eventType, eventHandler,false);

    } else if(el.attachEvent){

      el.attachEvent('on' + eventType, eventHandler);/*IE78*/

    }

  };

  /*兼容IE的阻止默认事件方法*/

  var stopDefault = function(e){

    if(e&&e.preventDefault){

      e.preventDefault();

    } else {

      window.event.returnValue = false;/*IE*/

    }

  };

  /*展开控件*/

  var onOpen = function(){

    if(state.length>250){

      ul.style.display = 'inline-block';

      state.onaction = false; state.opened = true;

    }else{

      if(!state.onaction){ state.onaction = true;} 

      state.length += 10;

      zoomDom.style.width = state.length + 'px';

      setTimeout(onOpen, 0)

    }

  };

  /*关闭控件*/

  var onCollapse = function(){

    if(state.length<41){

      state.onaction = false; state.opened = false;

    }else{

      if(!state.onaction){ state.onaction = true;} 

      state.length -= 10;

      zoomDom.style.width = state.length + 'px';

      setTimeout(onCollapse, 0);

    } 

  };

  /*点击触发按钮的回调*/

  var onSpanClick = function(e){

    stopDefault(e);

    if(!state.onaction){

      if(!state.opened){

        onOpen();

      }else{

        ul.style.display = 'none';

        onCollapse();

      }

    }

  };

  return function(){

    addEvent(showSpan, 'click', onSpanClick);

  };

})();

下图是css中用到的图片(直接从百度翻译上截的图^_^):

javascript实现 百度翻译 可折叠的分享按钮列表

大家下下来,改改名字放到根目录下就行了,或者直接将css中两处:

background-image: url(sprite.png);

改为:

background-image: url(http://images.cnitblog.com/blog2015/680599/201503/110916459332808.png);

直接使用我上传的这个图片资源也是可以的(感谢强大的互联网^_^)。

接下来是我实现的效果展示:

javascript实现 百度翻译 可折叠的分享按钮列表

接着说说,我在编写过程中的主要技术要点:

控件兼容到IE7,手头没有IE6,无法测试了,主要解决的兼容问题代码中都有标注。
采用了css sprites 技术,大家应该已经发现了吧^_^,好技术就要用。

JS中应用闭包,避免全局污染。

在html中script标签放到body底部,这种小细节俺也会注意到的(虽然都是本地资源?(???)?)。
好吧,就是这些,不过这个小控件,还是有进一步完善的余地的,比如,可以使用css3属性来实现div的动态伸缩,可以将这个控件组件化,可以用JQ框架更加方便的实现(JQ练手)等等。

以上就是本文分享给大家的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
JQuery 常用方法基础教程
Feb 06 Javascript
JQuery each()函数如何优化循环DOM结构的性能
Dec 10 Javascript
jquery实现表格隔行换色效果
Nov 19 Javascript
jquery常用的12个小功能
Jul 22 Javascript
JQuery动态添加Select的Option元素实现方法
Aug 29 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
Oct 28 Javascript
解决前端跨域问题方案汇总
Nov 20 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
Dec 19 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
Sep 11 Javascript
elementUI 动态生成几行几列的方法示例
Jul 11 Javascript
微信公众号服务器验证Token步骤图解
Dec 30 Javascript
让Vue响应Map或Set的变化操作
Nov 11 Javascript
基于jquery实现的自动补全功能
Mar 12 #Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
Mar 12 #Javascript
window.open()实现post传递参数
Mar 12 #Javascript
js运动动画的八个知识点
Mar 12 #Javascript
js实现最短的XML格式化工具实例
Mar 12 #Javascript
微信中一些常用的js方法汇总
Mar 12 #Javascript
javascript实现checkBox的全选,反选与赋值
Mar 12 #Javascript
You might like
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
PHP实现获取FLV文件的时间
2015/02/10 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
jQuery操作json常用方法示例
2017/01/04 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
vue中利用iscroll.js解决pc端滚动问题
2020/02/15 Javascript
js实现时钟定时器
2020/03/26 Javascript
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
Python 实现简单的电话本功能
2015/08/09 Python
Python如何实现转换URL详解
2019/07/02 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
Python 实现自动完成A4标签排版打印功能
2020/04/09 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
2020/04/10 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
详解scrapy内置中间件的顺序
2020/09/28 Python
神经网络训练采用gpu设置的方式
2021/03/03 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
临床医学大学生求职信
2013/09/28 职场文书
绩效专员岗位职责
2013/12/02 职场文书
根叔历年演讲稿
2014/05/20 职场文书
科技之星事迹材料
2014/06/02 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
毕业论文致谢词
2015/05/14 职场文书
毕业论文致谢信
2015/05/14 职场文书
入团介绍人意见范文
2015/06/04 职场文书
2016大学生求职自荐信范文
2016/01/28 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js