javascriptt切换组件MyTab.js封装
之前做的大多数是jquery的插件,就优雅性来说,我觉得还是原生的代码,写起来更舒服一点,虽然麻烦很多。
之前写了一个利用完美运动框架的轮播效果,因为使用的是原生的代码,因为不懂原生对象封装的原因一直耽搁了。
今天群里有人问了iScroll.js的问题,我看了下他发的图,感觉正事现在自己想要的例子。
通过自己的理解和其中的代码,思绪本来很清楚的,但是看了一会又乱了,其实我也应该想到,通过构造函数和原形的模式把
私有属性和公有方法,属性,以构造函数和原形模式的混合式开发封装,
这个组件很简单,但是也算是一个开始吧,至少其中大概自己是了解了些了,接着就是封装以前的轮播了。
先上js吧
javascript:
//MyTab构造函数+原型模式
(function(window){
function MyTab(id,options){
var that = this,
doc = document;
that.wrapper = typeof id == 'object' ? id : doc.getElementById(id); //选项
that.options = {
moveStep:330,
intMove:0,
} //返回核心函数,不用在外部重新调用
return this.tabAni();
}
MyTab.prototype = { //获取css类名称函数
getClass : function(oParent,tClass){ //保存目标到数组
var arrResult = []; //获取父级元素
var oClass = oParent.getElementsByTagName('*'); //在全部的父级元素循环
for(var i= 0 ;i<oClass.length ;i++){ //通过空格获取每个classname
var tempArr = oClass[i].className.split(/\s+/);
for(var j = 0 ;j < tempArr.length ; j++){
if(tempArr[j] == tClass){
arrResult.push(oClass[i]);
}
} }
return arrResult;
}, //获取css样式函数
getStyle : function(obj, attr){
if (obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj, false)[attr];//获取样式的最终值,改变之后的值,没有的话就获取css样式的值
}
}, //动画函数
moveStart : function(obj,json,fn){
var that = this;
clearInterval(obj.timer);
obj.timer = setInterval(function() {
var bStop = true;
for (attr in json) {
var icur = 0;
icur = (attr == 'opacity') ? Math.round(that.getStyle(obj, attr) * 100) : parseInt(that.getStyle(obj, attr));
//icur 不断变化
//json[attr]值写死,1920 var iSpeed = (json[attr] - icur) / 8;
// alert('iSpeed'+iSpeed)
iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
if (icur != json[attr]) {
bStop = false;
}
if (attr == 'opacity') {
obj.style.filter = 'alpha(opacity:' + (icur + iSpeed) + ')';
obj.style.opacity = (icur + iSpeed) / 100;
} else {
obj.style[attr] = icur + iSpeed + 'px';
}
}
if (bStop) {
clearInterval(obj.timer);
if (fn) {
fn();
} }
}, 30);
}, //运动核心函数
tabAni:function(){
var that = this;
that.tabNav = that.getClass(that.wrapper,'tab-nav')[0].getElementsByTagName('li');
that.tabTxt = that.getClass(that.wrapper,'txt');
for(var i = 0 ;i < that.tabNav.length ; i++){
that.tabNav[i].onclick = (function(arg){
return function(){
for(var j = 0 ; j < that.tabTxt.length ; j++){
if(that.tabTxt[j].style.left == '0px' && j == arg){
console.log(that.tabTxt.length)
return false;
} that.moveStart(that.tabTxt[j],{left:-that.options.moveStep},function(){
that.moveStart(that.tabTxt[arg],{left:that.options.intMove})
})
}
}
})(i);
}
}
} //输出对象
if(typeof exports !== 'undefined'){
exports.MyTab = MyTab;
}else{
window.MyTab = MyTab;
}
})(window) //对象实例化
var tab = new MyTab('myTab',{moveStep:300,intMove:0});
html:
<div class="gnrl-list myTab" id="myTab">
<div class="tab-cont">
<div class="date">
19<span>/02</span>
</div>
<div class="txt" style="left:0px">
<p class="caption">南油-内参-02月19日早评策略</p>
<p class="text">美国劳工部公布的美国11月14日当周初请失业金人数数据显示,美国11月14日当周初请失业金人数降至27.1万,表明美国劳动力市场强劲升。</p>
</div>
<div class="txt">
<p class="caption">粤贵银-内参-02月19日早评策略</p>
<p class="text">美国劳工部公布的美国11月14日当周初请失业金人数数据显示,美国11月14日当周初请失业金人数降至27.1万,表明美国劳动力市场强劲升。</p>
</div>
<div class="txt">
<p class="caption">邮币卡-内参-02月19日早评策略</p>
<p class="text">美国劳工部公布的美国11月14日当周初请失业金人数数据显示,美国11月14日当周初请失业金人数降至27.1万,表明美国劳动力市场强劲升。</p>
</div>
<div class="txt">
<p class="caption">本周环球视觉-内参-02月19日早评策略</p>
<p class="text">美国劳工部公布的美国11月14日当周初请失业金人数数据显示,美国11月14日当周初请失业金人数降至27.1万,表明美国劳动力市场强劲升。</p>
</div>
</div>
<div class="tab-nav">
<ul>
<li class="active">南油</li>
<li>粤贵银</li>
<li>邮币卡</li>
<li>本周环球视觉</li>
</ul>
</div>
</div>
css:
.main .general-box .myTab{
border-top: 1px solid #e4e4e4;
overflow: hidden;
background: #F9F9F9 url(../images/tabbg.png) no-repeat left bottom;;
height: 309px;
border-bottom: 1px solid #e4e4e4;
}
.main .general-box .myTab .tab-cont{
float: left;
width:290px;
position: relative;
}
.main .general-box .myTab .tab-nav{
float: right;
width:175px;
}
.main .general-box .myTab .tab-nav li{
width: 100%;
height: 76px;
border-bottom: 1px solid #eee;
display: block;
background: #fff;
color:#363b52;
font-size: 16px;
text-align: center;
cursor: pointer;
line-height: 76px;
}
.main .general-box .myTab .tab-nav li.active{
height:78px;
}
.main .general-box .myTab .tab-nav li:hover{
color:#2f86bf;
}
.main .general-box .myTab .tab-cont .date{
padding:20px;
color:#2f86bf;
font-size: 40px;
font-weight: bold;
background: url(../images/calendar.png) no-repeat 200px center;
}
.main .general-box .myTab .tab-cont .date span{
color:#666666;
font-size: 20px;
vertical-align: top;
line-height: 40px;
margin-left:10px;
}
.main .general-box .myTab .txt{
margin-top:20px;
padding:20px;
width:250px;
position: absolute;
left:-330px;
}
.main .general-box .myTab .txt .caption{
color:#363b52;
font-size: 18px;
text-align: justify;
height:50px;
}
javascriptt切换组件MyTab.js封装的更多相关文章
- 用jQuery基于原生js封装的轮播
我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...
- 标签页(tab)切换的原生js,jquery和bootstrap实现
概述 这是我在学习课程Tab选项卡切换效果时做的总结和练手. 原课程中只有原生js实现,jquery和bootstrap实现是我自己补上的. 本节内容 标签页(tab)切换的原生js实现 标签页(ta ...
- 城市三级联动 AJAX-原生js封装
话不多说我们先来一张效果图给大家看一下: html代码如下: <!DOCTYPE html><html lang="en"><head> < ...
- 使用原生JS封装一个动画函数
最近一直在忙项目,很少有时间回顾之前的知识,今天刚好要做一个轮播,因为对兼容性有一定的要求,使用了各种插件和库中的轮播,效果都不是很理想,一怒之下,使用原生JS封装了一个轮播组件,其中重要的功能就是一 ...
- 从零搭建react+ts组件库(封装antd)
为什么会有这样一篇文章?因为网上的教程/示例只说了怎么做,没有系统详细的介绍引入这些依赖.为什么要这样配置,甚至有些文章还是错的!迫于技术洁癖,我希望更多的开发小伙伴能够真正的理解一个项目搭建各个方面 ...
- 原生JS封装Ajax插件(同域&&jsonp跨域)
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...
- 使用NW.js封装微信公众号菜单编辑器为桌面应用
开发微信公众号的朋友都会遇到一个常见的需求就是修改自定义菜单,如果每个人都去开发这个不经常使用的功能确实有点浪费时间.前段时间在github上找到一个仿企业号的菜单编辑界面,结合微信的C# SDK开发 ...
- 第54课 Qt 中的多页面切换组件
1. 多页面切换组件(QTabWidget) (1)能够在同一个窗口中自由切换不同页面的内容 (2)是一个容器类型的组件,同时提供友好的页面切换方式 2. QTabWidget的使用方式 (1)在应用 ...
- 原生JS封装简单动画效果
原生JS封装简单动画效果 一致使用各种插件,有时候对原生JS陌生了起来,所以决定封装一个简单动画效果,熟悉JS原生代码 function animate(obj, target,num){ if(ob ...
随机推荐
- Sherpa | Complete Navigation System 介绍与教材
这里的夏尔巴人在iPad上使用的一种新的视频. 正如其名称所暗示的,夏尔巴人是所有您的导航需求的整体解决方案. 夏尔巴人带来了每个接口的三个主要的导航元素结合在一起 - 导航栏,侧边栏和页脚粘. 每一 ...
- RxJava漫谈-RxAndroid使用
RxJava在github上的地址:https://github.com/ReactiveX/RxJava RxAndroid在github上的地址:https://github.com/Reacti ...
- window对象BOM
BOM的和新对象是window,他表示流浪器的一个实例,作为一个Global对象,有权访问parseInt()等方法 在全局作用域声明的变量,函数都有钱访问 ; function sayName () ...
- SDP (Session Description Protocol)
SDP的描述网络上一大堆中文的,可以看看RFC2327 SDP 信息是文本信息,采用 UTF-8 编 码中的 ISO 10646 字符集.SDP 会话描述如下:(标注 * 符号的表示可选字段): v ...
- Word隐藏回车符技巧
每一次在Word中敲击回车时,都会留下一个回车符,回车次数多了回车符也就跟着变多了,这的确是太影响视觉效果了,我们要如何操作才能将这些回车符去掉呢?特意为大家献上Word2003和Word2007中隐 ...
- C#自定义Attribute值的获取与优化
C#自定义Attribute值的获取是开发中会经常用到的,一般我们的做法也就是用反射进行获取的,代码也不是很复杂. 1.首先有如下自定义的Attribute [AttributeUsage(Attri ...
- [SDOI2008]仪仗队
P2158 [SDOI2008]仪仗队 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线 ...
- Zookeeper,也要接触起来啦
分布式的东东,就是部署也方便,但管理,想法,大集群应用是要点...! 参考如下URL简单实现 ,以后应用时多留意. http://blog.csdn.net/shirdrn/article/detai ...
- WINDOWS+NGINX+DJANGO+FLUP+PYTHON起步~
参考的文档是 http://blog.163.com/sky20081816@126/blog/static/1647610232010824262695/ 但在实操时,作了更改之后才生效,就是#in ...
- logstash 发送zabbix 给消息加上type
input { file { type => "zj_api" path => ["/data01/applog_backup/zjzc_log/zj-api ...