今天没事又重新写了一遍。很多注释是自己犯糊涂后来又终于跨过去的备忘。

// ImgEff.js
function ImgEff(div,time){ //构造函数,需要传入参数div的id和时间
//alert(time);时间传入很正确
this.time=time;//声明变量,以备使用
this.arr=[]; //一个数组用来装载所有div,数组的写法别搞错 a=[];
this._old=null;//一个存储旧div的变量
this._now=null;//一个存储当前div的变量
//最基本的只需要初始化这三个变量,如果要传时间,就设个time,如果存div个数就total,如果这是内层的效果,比如外面是淡入,内层是滑动,就多一个外层第几章的判断变量,divNum;
//开始装载:
for(var i=0; i<document.getElementById(div).getElementsByTagName("div").length;i++){//上层章节数目,章节容器确实是div
//alert(document.getElementById(div).getElementsByTagName("div").length) 确实是4
this.arr.push(document.getElementById(div).getElementsByTagName("div")[i]);//这句是装载的关键,要注意数组的用法 a.push(get...[i])
//给数组的每个元素设好CSS,并且初始化隐藏掉,在从零开始一张一张淡入
this.arr[i].style.position="absolute";
this.arr[i].style.top="0";
var _id="#"+this.arr[i].id; //注意是_id.id
$(_id).hide(); //有一点要注意的是,这些都是在构造函数内部完成的。
}
}
//初始化全部完成,开始做效果: ImgEff.prototype.fadeShow = function(id){ //形参上写time,其实什么也不用传入,内部的还是this.time
//alert(time);//undefined
//alert(this.time);//正确
var _id="#"+this.arr[id].id;
//alert(_id)现在每次淡入的是第三张图,再内层效果没做好之前,确实是这样的,因为图层总是向上堆叠。但如果放入的元素是<img />就不会有这种情况。总是显示第一张
$(_id).fadeIn(this.time);//fadeIn的部分相对简单,只要把传入的序号对应数组中的序号,取到改序号的id并加上#号即可
//fadeOut的部分要作一点判断,先有鸡还是先有蛋,要先有已经淡入的图作为旧的图才能淡出,所以判断有没有旧的
//this._old=this.arr[id];//如果在这里就给旧的赋值,直接出来就淡出了。。。。所以说,必须要在最后给旧的赋值
if (this._old!=null){//this._old的初始值是null
var old="#"+this._old.id $(old).fadeOut(this.time);
}
//存储旧的值,也就是给旧的重新赋值
this._old=this.arr[id];
} //被封装的淡入效果里面没有包含事件处理函数。需要在外部执行文件内编写事件的部分。

ImgEff.js

// DivEff.js
function DivEff(div,time){//构造函数,传入要起作用的div的id和时间
this.arr=[];
this._now=null;
this._old=null;
this.recordOld;
this.time=time;
this.isRight=null;//滑动多一个判断左右的布尔型
this._setNum;//外层章节的id
this.total=document.getElementById(div).getElementsByTagName("img").length;//为了计数需要total值
for(var i=0; i<this.total; i++){
this.arr.push(document.getElementById(div).getElementsByTagName("img")[i])//切记切记PUSH的语法
this.arr[i].style.postion="absolute";
if(i!=this._now){//这里当然不能是arr[i]...arr[i]装的是一大串结构!this._now才是当前的id
//因为是滑动,display:none不存在兼容问题,尽管写
this.arr[i].style.display="none";
}
}
//在构造函数内部,循环外部要写比淡入多的一句,存储旧的HTML结构
this.recordOld=this.arr[this._now];
} DivEff.prototype.show = function(divNum,width,isRight){//滑动的参数比较多,因为要知道是第几章,宽度,方向
this._now=divNum//把形参传入的章节数赋值给this._now
var _id="#"+this.arr[divNum].id //忘了章节数是存储在arr数组里的吗?只要对应 divNum的序号就调出来了
if(this.recordOld!=null){//如果有旧的
if(!isRight){//方向判断完,要执行的有两个动作,
this.arr[divNum].style.left=width+"px";//一个是新的就位准备移入。
$(_id).animate({left:-width+px},500);//一个是新的移入的动画。
}
else{
this.arr[divNum].style.left=-width+"px";//和上面的反一下负数就可以了
$(_id).animate({left:width+px},500);
}
//前面隐藏了所有的图层,这里要打开当前的
this.arr[divNum].style.display="block";
}
}
//这个封装文件也是不含有事件处理函数的,去外部执行吧!

DivEff.js

// runtime js
//初始化全局变量 var _now=0;//存储当前值总是常用的
var chapFade;//实例化对象
var txtFade;//实例化对象 $(document).ready(function(){ //最好还是来个JQUERY的READY函数确保HTML的载入完毕 //实例化
chapFade = new ImgEff("images_all",1000);//注意参数不带#号
txtFade = new ImgEff("text_all",1000);
showImage(_now);//注意这个初始化的效果一定要在实例化以后执行。所以放到ready之上就报错了。
//内层的四个实例化
myImg_0=new ImagesDiv("img_0",1500);
myImg_1=new ImagesDiv("img_1",1500);
myImg_2=new ImagesDiv("img_2",1500);
myImg_3=new ImagesDiv("img_3",1500);
imgArr=[myImg_0,myImg_1,myImg_2,myImg_3];
}); //实例化的是运动部分,时间部分没有封装的,就在这里执行。
for(var i=0;i<document.getElementById("images_button").getElementsByTagName("div").length;i++){
var btn=document.getElementById("images_button").getElementsByTagName("div")[i] btn.onclick=onClick;
btn.onmouseover=function(e){
var e = window.event || e;
var srcElement = e.srcElement || e.target;
var id=srcElement.id.split("_")[1];
if(id!=_now){
document.getElementById("btn_"+id).style.background="#f00"; //这里已经取代了setColor的作用,那个方法其实已经多余
}
}
btn.onmouseout=function(e){
var e = window.event || e;
var srcElement = e.srcElement || e.target;
var id=srcElement.id.split("_")[1];
if(id!=_now){
document.getElementById("btn_"+id).style.background="#fff"; //这里已经取代了setColor的作用,那个方法其实已经多余
}
} } function onClick(e){
var e = window.event || e;
var srcElement = e.srcElement || e.target;
var id=srcElement.id.split("_")[1];
//alert(id+"click");//此处的点击id是对的。
//alert(_now);//问题就出在这里,由于_now是从0开始的,所以根据_now来定click_old就不会对应实际点击的按钮了
var click_old=_now;//
document.getElementById("btn_"+click_old).style.background="#fff";//成功将前面点击过的按钮清除
if(id!=_now){
showImage(id);//把id传出去,传给封装类
_now=id;
}
} //四选1的时间处理函数很多,这里举例带过。
document.getElementById("arrow_left").onclick=function (){
if(_now==0){
myImg_0.btnLClick(true);
}
if(_now==1){
myImg_1.btnLClick(true);
}
if(_now==2){
myImg_2.btnLClick(true);
}
if(_now==3){
myImg_3.btnLClick(true);
}
}; function showImage(id){//这其实只是为了避免到处都写一大段的执行,并且方便传入参数。。。。之前这里前面多传了一个参数 click_old导致类内部将这个参数当成id接收了,而这个参数不是点击的id而是从0开始的_now的随机数,用来清除旧按钮的。
//alert(id+"?"); 这里与类内部传入的id保持一致
chapFade.fadeShow(id);//从点击事件处理函数onClick内得到的id
txtFade.fadeShow(id); }

执行文件 script.js

<div class="area_gallery">

                           <img id="arrow_left" src="data:images/style/btn_left.png" width="31" height="31" />
<img id="arrow_right" src="data:images/style/btn_right.png" width="31" height="31" /> <div id="images_all">
<div id="img_0"><!--下面不能再用DIV,会冲突,但是如果换P标签,又会有层叠从下往上的问题,箭头的定位也会出现CSS的不兼容 -->
<img id="img_0_0" src="data:images/style/on_chapter01_img01.jpg" width="660" height="415" />
<img id="img_0_1" src="data:images/style/on_chapter01_img02.jpg" width="660" height="415" />
<img id="img_0_2" src="data:images/style/on_chapter01_img03.jpg" width="660" height="415" />
</div>
<div id="img_1">
<img id="img_1_0" src="data:images/style/on_chapter02_img01.jpg" width="660" height="415" />
<img id="img_1_1" src="data:images/style/on_chapter02_img02.jpg" width="660" height="415" />
<img id="img_1_2" src="data:images/style/on_chapter02_img03.jpg" width="660" height="415" />
</div>
<div id="img_2">
<img id="img_2_0" src="data:images/style/on_chapter03_img01.jpg" width="660" height="415" />
<img id="img_2_1" src="data:images/style/on_chapter03_img02.jpg" width="660" height="415" />
<img id="img_2_2" src="data:images/style/on_chapter03_img03.jpg" width="660" height="415" />
</div>
<div id="img_3">
<img id="img_3_0" src="data:images/style/on_chapter04_img01.jpg" width="660" height="415" />
<img id="img_3_1" src="data:images/style/on_chapter04_img02.jpg" width="660" height="415" />
<img id="img_3_2" src="data:images/style/on_chapter04_img03.jpg" width="660" height="415" />
</div>
</div>
<div id="round_all"></div>
<div id="text_all">
<div id="txt_0">
<p class="chap_pic"><div width="120" height="77" style="background:#C69; display:block;"></div>
<p class="chap_title">11111111</p><!--叠加隐藏 然后显示第一个-->
<p class="chap_txt">chap1txtchap1txtchap1txtchap1txtchap1txtchap1txtchap1txtchap1txtchap1txt</p>
</div>
<div id="txt_1">
<p class="chap_pic"><div width="120" height="77" style=" background:#CF9; display:block;"></div>
<p class="chap_title">22222222</p><!--叠加隐藏 -->
<p class="chap_txt">chap2txtchap2txtchap2txtchap2txtchap2txtchap2txtchap2txtchap2txtchap2txt</p>
</div>
<div id="txt_2">
<p class="chap_pic"><div width="120" height="77" style="background:#39F; display:block;"></div>
<p class="chap_title">33333333</p><!--叠加隐藏 -->
<p class="chap_txt">chap3txtchap3txtchap3txtchap3txtchap3txtchap3txtchap3txtchap3txtchap3txt</p>
</div>
<div id="txt_3">
<p class="chap_pic"><div width="120" height="77" style="background:#63C; display:block;"></div>
<p class="chap_title">44444444</p><!--叠加隐藏 -->
<p class="chap_txt">chap4txtchap4txtchap4txtchap4txtchap4txtchap4txtchap4txtchap4txtchap4txt</p>
</div>
</div>
<div id="images_button">
<div id="btn_0"></div>
<div id="btn_1"></div>
<div id="btn_2"></div>
<div id="btn_3"></div>
</div>
</div>

最后有个翻页显示

<div id="txt_bottom">
<div id="chap_awleft" style="display:none;"></div>
<div id="chap_awrgiht">chapter 2 ></div>
</div>

document.getElementById("chap_awleft").onclick=function (){
var chap_old=_now;
_now--;
if(_now<0){
_now=3;
}
setDivDisplay(chap_old);
};
document.getElementById("chap_awrgiht").onclick=function (){
var chap_old=_now;
_now++;
if(_now>3){
_now=0;
} setDivDisplay(chap_old); };
function setDivDisplay(old){
setColor(old,_now);
showImage(old,_now);
document.getElementById("chap_awrgiht").innerHTML="chapter "+(_now+2)+" >";
document.getElementById("chap_awleft").innerHTML="< chapter "+(_now);
if(_now==0){
document.getElementById("chap_awleft").style.display="none";
document.getElementById("chap_awrgiht").style.display="block";
}else{
if(_now==3){
document.getElementById("chap_awrgiht").style.display="none";
document.getElementById("chap_awleft").style.display="block";
}else{
document.getElementById("chap_awrgiht").style.display="block";
document.getElementById("chap_awleft").style.display="block";
}
}
}

最后执行部分因为我没做完,真正做完的二维的KV执行起来应该是这样,带有自动播放start和停止播放end。

//执行播放
function showImage(old,id){
//alert(old,id)
if(old!=-1){
imgArr[old].end();
}
chapFade.fadeShow(id);
txtFade.fadeShow(id);
if(id==0){
//alert(0)
myImg_0.start(); 执行自动播放的方法
return;
}
if(id==1){
//alert(1)
myImg_1.start();
return;
}
if(id==2){
//alert(2)
myImg_2.start();
return;
}
if(id==3){
//alert(3)
myImg_3.start();
return;
}
/*用SWITCH CASE写也可以
switch(id){
case "0":
alert(0);
break;
case "1":
alert(1);
break;
case "2":
break;
case "3":
break;
default:
break;
}*/
} });

执行

KV总结的更多相关文章

  1. KV存储系统

    现在的KV存储系统都是分布式的,首先介绍Zookeeper——针对大型分布式系统的高可靠的协调系统. 开发分布式系统是件很困难的事情,其中的困难主要体现在分布式系统的“部分失败”.“部分失败”是指信息 ...

  2. 计算机程序的思维逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...

  3. Redis与KV存储(RocksDB)融合之编码方式

    Redis与KV存储(RocksDB)融合之编码方式 简介 Redis 是目前 NoSQL 领域的当红炸子鸡,它象一把瑞士军刀,小巧.锋利.实用,特别适合解决一些使用传统关系数据库难以解决的问题.Re ...

  4. 从零开始山寨Caffe·柒:KV数据库

    你说你会关系数据库?你说你会Hadoop? 忘掉它们吧,我们既不需要网络支持,也不需要复杂关系模式,只要读写够快就行.    ——论数据存储的本质 浅析数据库技术 内存数据库——STL的map容器 关 ...

  5. Ping CAP CTO、Codis作者谈redis分布式解决方案和分布式KV存储

    此文根据[QCON高可用架构群]分享内容,由群内[编辑组]志愿整理,转发请注明出处. 苏东旭,Ping CAP CTO,Codis作者 开源项目Codis的co-author黄东旭,之前在豌豆荚从事i ...

  6. Red KV数据 庫设計模式

    转:http://blog.nosqlfan.com/html/3033.html NoSQL带给我们的东西很多,高性能,水平扩展性,还有不一样的思维方式.本文来自@hoterran的个人博客运维与开 ...

  7. 浅析LRU(K-V)缓存

    LRU(Least Recently Used)算法是缓存技术中的一种常见思想,顾名思义,最近最少使用,也就是说有两个维度来衡量,一个是时间(最近),一个频率(最少).如果需要按优先级来对缓存中的K- ...

  8. 基于KV Data Model实现Table Data Model

    HBase对外暴露出来的是一个表格数据模型,如下图所示 rowkey应用程序可以自己设计.每一个Cell可以保存多个版本的数据,由timestamp标示版本.应用程序可以自己指定timestamp,如 ...

  9. 基于淘宝开源Tair分布式KV存储引擎的整合部署

    一.前言 Tair支撑了淘宝几乎所有系统的缓存信息(Tair = Taobao Pair,Pair即Key-Value键值对),内置了三个存储引擎:mdb(默认,类似于Memcache).rdb(类似 ...

随机推荐

  1. MySQL slave状态之Seconds_Behind_Master

    在MySQL的主从环境中,我们能够通过在slave上运行show slave status来查看slave的一些状态信息,当中有一个比較重要的參数Seconds_Behind_Master.那么你是否 ...

  2. [PWA] Add web app to your Home Screen

    Clone: Link Modify the structure: Move css, js, image, index.html to an 'app' folder. manifest.json: ...

  3. 基于HTML5的SLG游戏开发(序)

          2012年前后,HTML5游戏凭借跨平台.易移植.部署简单.节省成本等优点被炒的火热,经过一两年的快速发展,市场出现了一些成功地HTML5游戏产品,像磊友的<修仙三国>,神奇时 ...

  4. 控件AutoCompleteTextView实现动态匹配输入内容的一种输入框

    <AutoCompleteTextView android:layout_width="match_parent" android:layout_height="w ...

  5. 1 加到 100 的 时间复杂度 C#.

    //1 加到 100 的 时间复杂度: ; ; ; i <= n; i++){ sum += i; } T() = ; //Initialize 'n'. T() = ; //Initializ ...

  6. iOS9 application:application openURL: sourceApplication: annotation: 方法不执行

    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url NS_DEPRECATED_IOS(2_0, 9 ...

  7. VisualStudio2013内置SQLServer入门

    最近做项目老大要求用到sqlserver,但是这项目的数据库只是本地演示用并不复杂,于是决定试试VisualStudio2013内置的SQLServer.对于这个东西的了解并没有多少,然后项目初学习的 ...

  8. c读写文件相关

    1.打开文件: 函数原型: FILE * fopen(const char * path,const char * mode); 返回值: 文件顺利打开后,指向该流的文件指针就会被返回.如果文件打开失 ...

  9. T-SQL语言基础

    1.T-SQL语言 CREATE:创建新对象,包括数据库.表.视图.过程.触发器和函数等常见数据库对象. ALTER:修改已有对象的结构. DROP:用来删除已有的对象.有些对象是无法删除的,因为它们 ...

  10. SQL 左外连接查询 将右表中的多行变为左表的一列或多列

    示例: --行列互转 /**************************************************************************************** ...