web前端|js教程
javascript,可控式,透明特效
web前端-js教程
空间就全凭CSS的绝对定位实现位移了。在开始之前,我们练习一下setTimeout的递归用法(用来模拟setInterval)。
百度地图实战开发(源码 ppt),vscode内置插件,ubuntu真死,安装tomcat总结,gtk和sqlite3,js 打印 插件,前端如何学习一个框架,爬虫为什么还要文本信息,php mysql创建,园洲seo推广价格,手机网站模板源码,网页栏目分类应该叫模块,我们是谁的模板lzw
function text(el){
var node = (typeof el == "string")? document.getElementById(el) : el;
var i = 0;
var repeat = function(){
setTimeout(function(){
node.innerHTML = "
"+i+"
";i++;
if(i <= 100){
setTimeout(arguments.callee, 100);
}
},100)
}
repeat();
}
我们来试一下最简单的淡入特效,就是把node.innerHTML那一行改成透明度的设置。
jq网站源码下载,联想安装ubuntu失败,Java主题爬虫工具,php样机,seo怎么布局lzw
function fadeIn(el){
var node = (typeof el == "string")? document.getElementById(el) : el;
var i = 0;
var fade = function(){
setTimeout(function(){
!+"\v1"? (node.style.filter="alpha(opacity="+i+")"): (node.style.opacity = i / 100);
i++;
if(i <= 100){
setTimeout(arguments.callee, 100);
}
},100)
}
fade();
}
但是这样并不完美,因为IE的滤镜可能会在IE7中失效,我们必须要用zoom=1来激活hasLayout。我们再添加一些可制定参数扩充它。注释已经非常详细,不明白在留言里再问我吧。
asp查询源码,vscode配置csharp,虚拟机怎样下载ubuntu,tomcat假死问题,照片保存到sqlite,手机网页音频插件,web前端和java框架,爬虫微信图片,新闻发布系统 php,双流seo,html5网站动画效果代码,uu网页棋牌游戏完整,discuz默认模板是,java开源仓库管理系统,苹果cms8 程序影视网站lzw
function opacity(el){
//必选参数
var node = (typeof el == "string")? document.getElementById(el) : el,
//可选参数
options = arguments[1] || {},
//变化的持续时间
duration = options.duration || 1.0,
//开始时透明度
from = options.from || 0.0 ,
//结束时透明度
to = options.to || 0.5,
operation = 1,
init = 0;
if(to - from < 0){
operation = -1,
init = 1;
}
//内部参数
//setTimeout执行的间隔时间,单位毫秒
var frequency = 100,
//设算重复调用的次数
count = duration * 1000 / frequency,
// 设算每次透明度的递增量
detal = Math.abs(to - from) /count,
// 正在进行的次数
i = 0;
var main = function(){
setTimeout(function(){
if(!+"\v1"){
if(node.currentStyle.hasLayout) node.style.zoom = 1;//防止滤镜失效
node.style.filter="alpha(opacity="+ (init * 100 + operation * detal * i * 100).toFixed(1) +")"
}else{
node.style.opacity = (init + operation * detal * i).toFixed(3)
}
node.innerHTML = (init + operation * detal * i).toFixed(3)
i++;
if(i <= count){
setTimeout(arguments.callee, frequency);
}
},frequency)
}
main();
}
效果演示:
.text {width:100px;height:100px;background:red;display:inline-block;}
function opacity(el){ //必选参数 var node = (typeof el == "string")? document.getElementById(el) : el, //可选参数 options = arguments[1] || {}, //变化的持续时间 duration = options.duration || 1.0, //开始时透明度 from = options.from || 0.0 , //结束时透明度 to = options.to || 0.5, operation = 1, init = 0; if(to - from < 0){ operation = -1, init = 1; } //内部参数 //setTimeout执行的间隔时间,单位毫秒 var frequency = 100, //设算重复调用的次数 count = duration * 1000 / frequency, // 设算每次透明度的递增量 detal = Math.abs(to - from) /count, // 正在进行的次数 i = 0; var main = function(){ setTimeout(function(){ if(!+"\v1"){ if(node.currentStyle.hasLayout) node.style.zoom = 1;//防止滤镜失效 node.style.filter="alpha(opacity="+ (init * 100 + operation * detal * i * 100).toFixed(1) +")" }else{ node.style.opacity = (init + operation * detal * i).toFixed(3) } node.innerHTML = (init + operation * detal * i).toFixed(3) i++; if(i <= count){ setTimeout(arguments.callee, frequency); } },frequency) } main(); }
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
但上面并不尽善尽美,有一个Bug。我们是通过短路运算符来决定是否使用默认参数还是我们传入的参数,但在javascript中,数字0甚至0.0都会自动转换为false。因此在第个例子,如果我们在to中传入0,它永远不会用到这个0,而是默认的0.5。解决方法让它变成字符串“0”。另,参数i也不是必须的,我们可以省去它,用count负责所有的循环,但这样一来,我们的思维就要逆过来想了。原来是加的,我们要变成减的。
function opacity(el){
//必选参数
var node = (typeof el == "string")? document.getElementById(el) : el,
//可选参数
options = arguments[1] || {},
//变化的持续时间
duration = options.duration || 1.0,
//开始时透明度
from = options.from || 0.0 ,
//结束时透明度
to = (options.to && options.to + "") || 0.5,
operation = -1,
init = 1;
if(to - from < 0){
operation = 1,
init = 0;
}
//内部参数
//setTimeout执行的时间,单位
var frequency = 100,
//设算重复调用的次数
count = duration * 1000 / frequency,
// 设算每次透明度的递增量
detal = operation * Math.abs(to - from) /count;
var main = function(){
setTimeout(function(){
if(!+"\v1"){
if(node.currentStyle.hasLayout) node.style.zoom = 1;//防止滤镜失效
node.style.filter="alpha(opacity="+ (init * 100 + detal * count * 100).toFixed(1) +")"
}else{
node.style.opacity = (init + detal * count).toFixed(3)
}
count--;
if(count + 1){
setTimeout(arguments.callee, frequency);
}
},frequency)
}
main();
}
进一步优化,利用原型共享方法。
function Opacity(el){
var node = (typeof el == "string")? document.getElementById(el) : el,
options = arguments[1] || {},
duration = options.duration || 1.0,
from = options.from || 0.0 ,
to = (options.to && options.to + "") || 0.5,
operation = -1,
init = 1;
if(to - from < 0){
operation = 1,
init = 0;
}
var frequency = 100,
count = duration * 1000 / frequency,
detal = operation * Math.abs(to - from) /count;
this.main(node,init,detal,count,frequency);
}
Opacity.prototype = {
main : function(node,init,detal,count,frequency){
setTimeout(function(){
if(!+"\v1"){
if(node.currentStyle.hasLayout) node.style.zoom = 1;//防止滤镜失效
node.style.filter="alpha(opacity="+ (init * 100 + detal * count * 100).toFixed(1) +")"
}else{
node.style.opacity = (init + detal * count).toFixed(3)
}
node.innerHTML = (init + detal * count).toFixed(3)
count--;
if(count + 1){
setTimeout(arguments.callee, frequency);
}
},frequency)
}
}
演示代码:
.text {width:100px;height:100px;background:red;display:inline-block;}
function Opacity(el){ var node = (typeof el == “string”)? document.getElementById(el) : el, options = arguments[1] || {}, duration = options.duration || 1.0, from = options.from || 0.0 , to = (options.to && options.to + “”) || 0.5, operation = -1, init = 1; if(to – from < 0){ operation = 1, init = 0; } var frequency = 100, count = duration * 1000 / frequency, detal = operation * Math.abs(to – from) /count; this.main(node,init,detal,count,frequency); } Opacity.prototype = { main : function(node,init,detal,count,frequency){ setTimeout(function(){ if(!+"\v1"){ if(node.currentStyle.hasLayout) node.style.zoom = 1;//防止滤镜失效 node.style.filter="alpha(opacity="+ (init * 100 + detal * count * 100).toFixed(1) +")" }else{ node.style.opacity = (init + detal * count).toFixed(3) } node.innerHTML = (init + detal * count).toFixed(3) count–; if(count + 1){ setTimeout(arguments.callee, frequency); } },frequency) } }
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]