信息发布软件,b2b软件,广告发布软件
标题: 您有可能没有见过这么美的JavaScript 百叶窗代码了吧 [打印本页]
作者: 群发软件 时间: 2017-6-3 21:22
标题: 您有可能没有见过这么美的JavaScript 百叶窗代码了吧
本帖最后由 群发软件 于 2017-6-3 21:24 编辑
如图所示,空心格子就好比是每个li,给它设定相对定位属性,设置overflow:hidden;黑块为li子元素,高度为li的2倍,设置absolute属性,我们正是要改变它的top值从而获得变化!(右上角多余块与本图无关)
布局分析:
注意top值得变化!默认top=0时候,显示的“一楼上铺”,当top=-40px时候,li的子元素 上移40px,这时候显示的内容就为“一楼下铺”注意p元素的包裹层div
JS分析:
1、要开多个定时器来达到效果
2、执行相反方向
3、执行多组运动
4、累加产生错落感
5、产生时间间隔的动画
JS代码如下:
<script> window.onload = function(){ var oUl = document.getElementById('ul1'); var oUl2 = document.getElementById('ul2'); toShow(oUl); //每四秒执行一次 setTimeout(function(){ toShow(oUl2); },4000); function toShow(obj){ var aDiv = obj.getElementsByTagName('div'); var iNow = 0; var timer = null; var bBtn = true; setInterval(function(){ toChange(); },2000); function toChange(){ timer = setInterval(function(){ if(iNow==aDiv.length){ clearInterval(timer); iNow = 0; bBtn = !bBtn; } else if(bBtn){ startMove(aDiv[iNow],{top:0},function(){ var p = document.getElementsByClassName('p-2'); for(var i=0; i<p.length;i++){ p.style.background = 'red'; } }); iNow++; } else{ startMove(aDiv[iNow],{top:-30}); iNow++; } },100); } } }; //运动框架 function startMove(obj,json,endFn){ clearInterval(obj.timer); obj.timer = setInterval(function(){ var bBtn = true; for(var attr in json){ var iCur = 0; iCur = parseInt(getStyle(obj,attr)) || 0; var iSpeed = (json[attr] - iCur)/8; iSpeed = iSpeed >0 ? Math.ceil(iSpeed) : Math.floor(iSpeed); if(iCur!=json[attr]){ bBtn = false; } obj.style[attr] = iCur + iSpeed + 'px'; } if(bBtn){ clearInterval(obj.timer); if(endFn){ endFn.call(obj); } } },30); } //获取非行间样式 function getStyle(obj,attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; } else{ return getComputedStyle(obj,false)[attr]; } } </script>
<title>JS实现百叶窗</title>
<!--原理:
首先,主要是根据li里的div是保存每一行所有要变化的信息,定时改变div的高度,溢出部分隐藏来实现。
通过2个setInterval来实现,外层setInterval用来控制多长时间改变一次内容,里层setInterval用来控制如何改变。-->
<style>
*{ margin:0; padding:0;}
li{ list-style:none;}
#ul1,#ul2{ width:300px; height:auto; float:left; border-top:1px #000000 solid; margin:20px;}
li{ width:100%; height:30px; overflow:hidden; position:relative; border-bottom:1px #333333 dashed; line-height:30px;}
li div{ position:absolute; top:-30px;}
li div p { height:30px;}
</style>
<script type="text/javascript" src="move.js"></script>
<script>
window.onload = function(){
var oUl = document.getElementById('ul1');
var oUl2 = document.getElementById('ul2');
//先对左侧UL标签实行百叶窗效果;
toShow(oUl);
//两秒延迟后,对右侧UL标签实行百叶窗效果;
setTimeout(function(){
toShow(oUl2);
},2000); ࡣ
//实现百叶窗函数
function toShow(obj){
var aDiv = obj.getElementsByTagName('div');
var iNow = 0;//共有的内容行数;
var timer = null;//setInterval的返回值,用于clearInterval;
var bBtn = true;
//UL定时每4秒变换1次
setInterval(function(){
toChange();
},4000);
//UL变换1次
function toChange(){
//通过setInterval来对每一个li依次改变
timer = setInterval(function(){
//如果UL的每个li都变换过了,则停止,等待外层toShow()再次调用toChange()函数;
if(iNow==aDiv.length){
clearInterval(timer);
iNow = 0;
bBtn = !bBtn;//用于从上往下信息滚完了,再从下往上回滚;
}
else if(bBtn){
startMove(aDiv[iNow],{top:0});
iNow++; //为了下次定时执行时变为操作下一条内容的变换
}
else{
startMove(aDiv[iNow],{top:-30});
iNow++;
}
},100);
}
}
};
</script>
- 在桌机上新建文本文档,命名为晓博JavaScript特效测试.txt,在文本文档里中入HTML文档的基本元素如下,并保存。
<html>
<head>
<title>晓博JavaScript特效测试</title>
</head>
<body>
<div id="zy">
<div id="login"></div>
<div id="daohang">
<ul>
<li><a href="index.html">首页</a></li>
<li><a href="jianjie.html">七夕简介</a></li>
<li><a href="#">七夕节传说</a></li>
<li><a href="#">七夕节习俗</a></li>
<li><a href="#">诗词& 歌谣</a></li>
<li><a href="#">七夕节寄语</a></li>
</ul>
</div>
</div>
</body>
</html>
2
第一步:把如下代码加入<head>区域中
<style>
<!--
.intro{position:absolute;
left:0;
top:0;
layer-background-color:green;
background-color:green;
border:0.1px solid green
}
-->
</style>
3
第二步:把如下代码加入<body>区域中 ,并重名文档为HTML文件
<div id="i1" class="intro"></div><div id="i2" class="intro"></div><div id="i3"
class="intro"></div><div id="i4" class="intro"></div><div id="i5" class="intro"></div><div id="i6" class="intro"></div><div id="i7" class="intro"></div><div id="i8" class="intro"></div>
<SCRIPT language=javascript>
<!--
var speed=30
var temp=new Array()
var temp2=new Array()
if (document.layers){
for (i=1;i<=8;i++){
temp=eval("document.i"+i+".clip")
temp2=eval("document.i"+i)
temp.width=window.innerWidth/8-0.3
temp.height=window.innerHeight
temp2.left=(i-1)*temp.width
}
}
else if (document.all){
var clipbottom=document.body.offsetHeight,cliptop=0
for (i=1;i<=8;i++){
temp=eval("document.all.i"+i+".style")
temp.width=document.body.clientWidth/8
temp.height=document.body.offsetHeight
temp.left=(i-1)*parseInt(temp.width)
}
}
function openit(){
window.scrollTo(0,0)
if (document.layers){
for (i=1;i<=8;i=i+2)
temp.bottom-=speed
for (i=2;i<=8;i=i+2)
temp.top+=speed
if (temp[2].top>window.innerHeight)
clearInterval(stopit)
}
else if (document.all){
clipbottom-=speed
for (i=1;i<=8;i=i+2){
temp.clip="rect(0 auto+"+clipbottom+" 0)"
}
cliptop+=speed
for (i=2;i<=8;i=i+2){
temp.clip="rect("+cliptop+" auto auto)"
}
if (clipbottom<=0)
clearInterval(stopit)
}
}
function gogo(){
stopit=setInterval("openit()",100)
}
gogo()
--></SCRIPT>
4
用IE浏览器打开晓博JavaScript特效测试.html文件,可以看到图片跟随鼠标移动特效,如下图
5
我们把段代码加入到我们做成的网页中做为特效,这样我们的网页就可以有页面百叶窗效果
了,如下图
作者: zzjiuzi008 时间: 2017-6-7 20:53
太久1个半月了,2个客服小哥人都不错,态度也很好应该给好评,只是设计网页的设计感太一般,应该中评。
作者: zzjiuzi008 时间: 2017-6-10 12:29
,不是我说的实在太感谢店主了。。。我正为这个头痛呢~!
作者: xiaozhu168 时间: 2017-6-11 07:31
很满意,非常有效率,交货很及时,很满意,以后还会再来。
作者: asz111 时间: 2017-6-12 06:04
很好,很有耐心,修改了几次,都很配合
作者: 脱颖而出 时间: 2017-6-13 04:12
值,值得一买,不错不错不错!!!
作者: 123 时间: 2017-6-14 05:07
序员哥哥好有耐心!点赞!
作者: ebxly 时间: 2017-6-19 09:06
雷,雷雷雷,亲很好,买了好多模板,不痛苦我就换模板
作者: a5206662 时间: 2017-6-20 12:44
喜欢,质量好,跟卖家描述的一样,卖家态度好,买家很满意,
作者: x201323 时间: 2017-6-22 19:07
真正的物超所值!
作者: yerface 时间: 2017-6-22 22:53
非常给力,服务也好,谢谢老板
作者: ebxly 时间: 2017-6-23 06:19
有竞争才有进步嘛
作者: xbaobeit 时间: 2017-6-27 00:14
别7号技术小哥服务很好!
作者: 脱颖而出 时间: 2017-7-2 07:48
及时做出评价,系统默认好评!
欢迎光临 信息发布软件,b2b软件,广告发布软件 (http://postbbs.com/) |
Powered by Discuz! X3.2 |