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 ...
随机推荐
- input事件以及中文输入法的处理
在项目的开发过程中,相信大家都处理过监听用户输入的事情,一般我们会用到onkeyup.onkeydown.onkeypress.onchange.oninput事件,虽然都很熟悉了,但是还是有必要巩固 ...
- Cretiria查询应用(一)
1.查询所有 Criteria criteria=session.createCriteria(Dept.class); //调用list()方法 List<Dept> li ...
- Swift - guard关键字(守护)
guard语句和if语句有点类似,都是根据其关键字之后的表达式的布尔值决定下一步执行什么.但与if语句不同的是,guard语句只会有一个代码块,不像if语句可以if else多个代码块. 那么guar ...
- js带箭头左右翻动控制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JDK + Tomcat 安装配置
学习Java 开发的第一步就是配置环境,今天第一次配置,把过程记录下以备后用. 一.下载JDK.Tomcat JDK:http://www.oracle.com/technetwork/java/ja ...
- php 之 数据访问
数据访问: 方式一:已过时,只做了解 1.造一个连接(建立通道) $db=mysql_connect("localhost","root","123& ...
- Objective-C Http常用API 同步请求与异步请求
开发iOS应用要调用Http接口.获取Http资源,有一套比较成熟的框架ASIHTTPRequest.而我还是比较喜欢使用原始一点的 API,而它跟其他的面向对象语言有许多共通之处.本文分同步请求和异 ...
- nodejs安装express遇到的坑
网上很多资料都是npm install express -g; 安装完也不报错,但使用express的时候却报找不到命令: 在网上查了好多,最后用 npm install -g express-gen ...
- Xcode6中自动布局autolayout和sizeclass的使用
Xcode6中自动布局autolayout和sizeclass的使用 一.关于自动布局(Autolayout) 在Xcode中,自动布局看似是一个很复杂的系统,在真正使用它之前,我也是这么认为的, ...
- 关于自动编译iOS工程,生成app及ipa文件的方法-备
文章地址. 1.所需语句(可直接在命令行中执行) xcodebuild -configuration Release 进入所在工程的根目录文件夹,执行上面的语句,即可开始自动使用rele ...