animate函数无法识别height:auto属性

博客讲述在进行展开/折叠动画效果时,animate函数不识别height:auto的问题。给出了原代码,最终解决方法是先获取当前高度和height:auto的高度,再用动画过渡高度,并给出解决后的代码,还展示了相关HTML结构代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天遇到一个问题,在进行展开/折叠动画效果时,发现用animate函数不识别height:auto,具体代码如下:

$(document).ready(function () {

$(".flip").click(function () {

if($(this).hasClass("btn-close")){

$(this).removeClass("btn-close");

$("div.panel").animate({"height":"42px"},1000);

}else {

$(this).addClass("btn-close");

$("div.panel").animate({ "height": "auto" }, 1000);

}

});

});

最终想到的解决方法是,先把当前的高度获取到,然后再把height:auto的高度获取到,然后在使用动画进行高度的过渡。具体代码如下:

$(document).ready(function () {

$(".flip").click(function () {

if($(this).hasClass("btn-close")){

$(this).removeClass("btn-close");

$("div.panel").animate({"height":"42px"},1000);

}else {

$(this).addClass("btn-close");

 var currentHeight = $("div.panel").height();

var autoHeight = $("div.panel").css('height', 'auto').height();

$("div.panel").height(currentHeight).animate({ height: autoHeight }, 1000); 

}

});

});

html结构代码如下:

<div class="panel">

<p> 小蜗牛问妈妈:为什么我们从生下来,就要背负这个又硬又重的壳呢?</p>

<p> 妈妈:因为我们的身体没有骨23sc.cn骼的支撑,只能爬,又爬不快。所以要这个壳的保护!</p>

<p> 小蜗牛:毛虫姊姊没有骨头,也爬不快,为什么她却不用背这个又硬又重的壳呢? </p>

<p> 妈妈:因为毛虫姊姊能变成蝴蝶,23sc.cn天空会保护她啊。 </p>

<p> 小蜗牛:可是蚯蚓弟弟也没骨头爬不快,也不会变成蝴蝶他什么不背这个又硬又重的壳呢?</p>

<p> 妈妈:因为蚯蚓弟弟会钻土, 大地会保护他啊。</p>

<p> 小蜗牛哭了起来:我们好可怜,天空不保护,大地也不保护。 </p>

<p> 蜗牛妈妈安慰他:所以我们有壳啊!我们不靠天,也不靠地,我们靠自己。

</p>

 

</div>

 

<p class="flip">请点击这里</p>

 

 

已有文件目录如下: webserver/ ├── data └── contact.json ├── images ├── img ├── js ├── action.js └── jquery-1.9.1.min.js ├── css ├── About.html ├── Contact.html ├── Work.html └── Index.html 请根据此已有文件,使用C语言多线程实现一个简单的web server(端口80)承载附件的web,提供完善Debug机制,Web server需完成get post等基础请求处理 已知contact.html是登录的页面,action.js源代码如下: // JavaScript Document /* *所有js效果就绪,加载网页即执行 * */ $(function(){ /**** 根据显示器分辨率,选择css文件 ****/ if(screen.width > 960){ $("link").attr("href","css/style.css"); $("head").append("<link>"); } /**** 根据显示器分辨率,选择css文件 ****/ /*********** About页面Banner切换 ***********/ $("#about_slider").easySlider({ auto:true, width:415, height:362}); /*********** About页面Banner切换 ***********/ /*********** Contact页面表单验证 **************/ var inputNameObj = $("#name"); var inputEmailObj = $("#email"); var inputMessageObj = $("#message"); var isNameOn = false; var isEmailOn = false; var isMessageOn = false; /* 初始化按钮是否可按 */ isButton(); /* 处理name字段缓存 */ if(!isNull(inputNameObj.val())){ var text = inputNameObj.val(); if(!isName(text)){ $("#name").css("border-color","red"); isNameOn = false; } else{ $("#name").css("border-color","black"); isNameOn = true; } isButton(); } /* 处理email字段缓存 */ if(!isNull(inputEmailObj.val())){ var text = inputEmailObj.val(); if(isNull(text) || !isEmail(text)){ $("#email").css("border-color","red"); isEmailOn = false; } else{ $("#email").css("border-color","black"); isEmailOn = true; } isButton(); } /* 处理message字段缓存 */ if(!isNull(inputMessageObj.val())){ var text = inputMessageObj.val(); if(isNull(text) || !isMessage(text)){ $("#message").css("border-color","red"); isMessageOn = false; } else{ $("#message").css("border-color","black"); isMessageOn = true; } isButton(); } /* 检测SUBMIT按钮是否可按*/ function isButton(){ if(isNameOn && isEmailOn && isMessageOn){ $("#button").css("background-color","#f04922"); $("#button").removeAttr("disabled"); } else{ $("#button").css("background-color","#666"); $("#button").attr("disabled",true); } }; /* name字段输入时的格式检测 */ inputNameObj.keyup(function(){ var text = inputNameObj.val(); if(isNull(text) || !isName(text)){ $("#name").css("border-color","red"); isNameOn = false; } else{ $("#name").css("border-color","black"); isNameOn = true; } isButton(); }); /* email字段输入时的格式检测 */ inputEmailObj.keyup(function(){ var text = inputEmailObj.val(); if(isNull(text) || !isEmail(text)){ isEmailOn = false; } else{ $("#email").css("border-color","black"); isEmailOn = true; } isButton(); }); /* message字段输入时的格式检测 */ inputMessageObj.keyup(function(){ var text = inputMessageObj.val(); if(isNull(text) || !isMessage(text)){ $("#message").css("border-color","red"); isMessageOn = false; } else{ $("#message").css("border-color","black"); isMessageOn = true; } isButton(); }); /* 检测是否为空或者空格 */ function isNull(str){ if(str == "") { return true; } var regu = "^[ ]+$"; var re = new RegExp(regu); return re.test(str); }; /* name字段只有字母和数字,以字母开头 */ function isName(str){ var regu = /^[a-zA-Z][0-9a-zA-Z]*$/; var re = new RegExp(regu); if(regu.test(str)){ return true; } else{ return false; } }; /* email字段符合邮件格式 */ function isEmail(str){ var myReg = /^[-_A-Za-z0-9\.]+@([_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/; if(myReg.test(str)){ return true; } else{ return false; } }; /* message字段能含可见字符,如+#&=|<>^~ */ function isMessage(str){ var myReg = /[\+\#\&\=\|\<\>\^\~]/; if(myReg.test(str)){ return false; } else{ return true; } }; /* name字段光标移出时的检测 */ $("#name").blur(function(){ var text = inputNameObj.val(); if(isNull(text) || !isName(text)){ $("#name").css("border-color","red"); isNameOn = false; } else{ $("#name").css("border-color","black"); isNameOn = true; } isButton(); }); /* email字段光标移出时的检测 */ $("#email").blur(function(){ var text = inputEmailObj.val(); if(isNull(text) || !isEmail(text)){ $("#email").css("border-color","red"); isEmailOn = false; } else{ $("#email").css("border-color","black"); isEmailOn = true; } isButton(); }); /*message字段光标移出时的检测*/ $("#message").blur(function() { var text = inputMessageObj.val(); if(isNull(text) || !isMessage(text)){ $("#message").css("border-color","red"); isMessageOn = false; } else{ $("#message").css("border-color","black"); isMessageOn = true; } isButton(); }); /* 按钮触发事件 */ $("#button").click(function(){ /* post的httprequest请求 夹带name、email、message url为"data/contact.json" */ $.post("data/contact.json", { name:$("#name").val(), email:$("#email").val(), message:$("#message").val() },function(data){ $.each(data,function(InfoIndex,Info){ if(InfoIndex == "callback") { alert(Info); } }); }); }); /*********** Contact页面表单验证 **************/ /*********** 鼠标经过图片效果 **************/ $("#about_text ul img").each(function(k,img){ new JumpObj(img,10); $(img).hover(function(){ this.parentNode.parentNode.className="hover"; }); }); $("#footer ul img").each(function(k, img) { new JumpObj(img,10); $(img).hover(function() { this.parentNode.parentNode.className="hover"; }); }); /*********** 鼠标经过图片效果 **************/ }); /* *About页面Banner实现从右到左切换效果函数 * */ (function($) { $.fn.easySlider = function(options){ // 默认参数设置 var defaults = { speed: 1300, auto: false, pause: 3000, width: 415, height: 362, }; var options = $.extend(defaults, options); this.each(function() { var obj = $(this); var s = $("li", obj).length; var w = options.width; var h = options.height; obj.width(w); obj.height(h); obj.css("overflow","hidden"); var ts = s-1; var t = 0; $("ul", obj).css('width',s*w); $("li", obj).css('float','right'); function animate(dir,clicked){ var ot = t; if(ot == ts){ t = 0; $("ul",obj).css("margin-left","0px") }; t = t + 1; p = (t*w*-1); $("ul",obj).animate( { marginLeft: p }, options.speed ); if(options.auto){; timeout = setTimeout(function(){ animate("next",false); },options.speed+options.pause); }; }; // 初始化 var timeout; if(options.auto){; timeout = setTimeout(function(){ animate("next",false); },options.pause); }; }); }; })(jQuery); /* * *鼠标经过图片抖动函数 * */ function JumpObj(elem, range, startFunc, endFunc) { //图片鼠标移上去的动画效果 var curMax = range = range || 6; startFunc = startFunc || function(){}; endFunc = endFunc || function(){}; var drct = 0; var step = 1; init(); function init() { elem.style.position = 'relative';active() } function active() { elem.onmouseover = function(e) {if(!drct)jump()} } function deactive() { elem.onmouseover = null } function jump() { var t = parseInt(elem.style.top); if (!drct) motionStart(); else { var nextTop = t - step * drct; if (nextTop >= -curMax && nextTop <= 0) elem.style.top = nextTop + 'px'; else if(nextTop < -curMax) drct = -1; else { var nextMax = curMax / 2; if (nextMax < 1) {motionOver();return;} curMax = nextMax; drct = 1; } } setTimeout(function(){jump()}, 200 / (curMax+3) + drct * 3); } function motionStart() { startFunc.apply(this); elem.style.top='0'; drct = 1; } function motionOver() { endFunc.apply(this); curMax = range; drct = 0; elem.style.top = '0'; } this.jump = jump; this.active = active; this.deactive = deactive; }
最新发布
08-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值