Javascript CSS动画/转换无法正常工作
这里没有动画/过渡代码,请检查: .调整大小{ 字号:2.8vh; 空白:nowrap; 颜色:黑色; 背景:黄色; 光标:移动; 宽度:300px; 高度:130像素 } 点击我! 一些很长的名字 $.fn.fontResize=函数{ 返回this.eachfunction{ const$el=$this; $el.css'font-size',$el.width*$el.height/2800+'px'; }; } $按钮。调整大小。单击功能{ $'chartdiv'.width600.fontResize//使用插件函数 } $'.resize'。可调整大小{ 最小宽度:210, 身高:120, 调整大小:functionevent,ui{ $this.fontdesize;//使用插件函数 } };Javascript CSS动画/转换无法正常工作,javascript,html,jquery,css,Javascript,Html,Jquery,Css,这里没有动画/过渡代码,请检查: .调整大小{ 字号:2.8vh; 空白:nowrap; 颜色:黑色; 背景:黄色; 光标:移动; 宽度:300px; 高度:130像素 } 点击我! 一些很长的名字 $.fn.fontResize=函数{ 返回this.eachfunction{ const$el=$this; $el.css'font-size',$el.width*$el.height/2800+'px'; }; } $按钮。调整大小。单击功能{ $'chartdiv'.width600.
如果检查计算的字体大小,您会发现一些问题: 所以我的假设是,由于您通过设置transition:0.3s来转换所有CSS属性,所以您没有排除任何属性更改,因此在计算新字体大小时,.resize的宽度不是600px。尝试更长的过渡时间,比如2秒。您可能需要单击2次以上才能获得最终字体大小。如果发生这种情况,那么您就发现了问题
如果您还想转换宽度更改,一个解决方案是将所需的宽度600px传递给fontResize,而不依赖HTML元素宽度,该宽度将更改0.3秒。如果检查计算的字体大小,您会发现一些问题: 所以我的假设是,由于您通过设置transition:0.3s来转换所有CSS属性,所以您没有排除任何属性更改,因此在计算新字体大小时,.resize的宽度不是600px。尝试更长的过渡时间,比如2秒。您可能需要单击2次以上才能获得最终字体大小。如果发生这种情况,那么您就发现了问题
一个解决方案,如果您想转换宽度变化,将所需的宽度600px传递给fontResize,而不依赖HTML元素宽度,该宽度将在.3秒内更改。文本立即调整大小-问题是调整大小功能将黄色矩形的初始尺寸作为调整大小的措施,而不是动画后的最终尺寸完成。因此,文本大小正在调整为相同的大小,您看不到任何差异 当您单击按钮时,您告诉文本调整为黄色矩形的大小。但此时黄色矩形没有完全调整大小,基本上文本元素的大小是相对于黄色矩形的初始尺寸调整的 要验证这一点,您只需对文本动画应用setTimeout,您就会看到,如果黄色矩形有时间设置动画,则文本元素将按预期设置动画 要了解我的意思,请用以下代码替换click处理程序
$('button.do-resize').click(function() {
$('#chartdiv').width(600)
setTimeout(function() {
$('#chartdiv').fontResize()
}, 300)
})
所以你看,如果你给矩形一点时间来展开,文本将能够从中得到更大的尺寸来展开
但如果硬编码最终字体大小,动画将立即开始
而不是:
$el.css('font-size', ($el.width() * $el.height()) / 2800 + 'px');
尝试:
关键是,确保在单击按钮时确定适当的尺寸。文本立即调整大小-问题是调整大小功能将黄色矩形的初始尺寸作为调整大小的措施-而不是动画完成后的最终尺寸。因此,文本大小正在调整为相同的大小,您看不到任何差异 当您单击按钮时,您告诉文本调整为黄色矩形的大小。但此时黄色矩形没有完全调整大小,基本上文本元素的大小是相对于黄色矩形的初始尺寸调整的 要验证这一点,您只需对文本动画应用setTimeout,您就会看到,如果黄色矩形有时间设置动画,则文本元素将按预期设置动画 要了解我的意思,请用以下代码替换click处理程序
$('button.do-resize').click(function() {
$('#chartdiv').width(600)
setTimeout(function() {
$('#chartdiv').fontResize()
}, 300)
})
所以你看,如果你给矩形一点时间来展开,文本将能够从中得到更大的尺寸来展开
但如果硬编码最终字体大小,动画将立即开始
而不是:
$el.css('font-size', ($el.width() * $el.height()) / 2800 + 'px');
尝试:
关键是,确保在单击按钮时确定适当的尺寸。添加以下内容:
$('#chartdiv').on('transitionend', function () {
$(this).fontResize()
});
每次转换结束时都会触发fontResize,以确保使用正确的div
$.fn.fontResize=函数{
返回this.eachfunction{
const$el=$this;
$el.css'font-size',$el.width*$el.height/2800+'px';
};
}
$按钮。调整大小。单击功能{
$'chartdiv'.widthMath.random*600.fontResize//使用插件函数
}
$'chartdiv'。关于'transitionend',函数{
$this.fontsize
};
$'.resize'。可调整大小{
最小宽度:21
0,
身高:120,
调整大小:functionevent,ui{
$this.fontdesize;//使用插件函数
}
};
.调整大小{
字号:2.8vh;
空白:nowrap;
颜色:黑色;
背景:黄色;
光标:移动;
宽度:300px;
高度:130像素
}
.调整大小{
过渡:0.3s;
}
点击我!
一些非常长的名称添加以下内容:
$('#chartdiv').on('transitionend', function () {
$(this).fontResize()
});
每次转换结束时都会触发fontResize,以确保使用正确的div
$.fn.fontResize=函数{
返回this.eachfunction{
const$el=$this;
$el.css'font-size',$el.width*$el.height/2800+'px';
};
}
$按钮。调整大小。单击功能{
$'chartdiv'.widthMath.random*600.fontResize//使用插件函数
}
$'chartdiv'。关于'transitionend',函数{
$this.fontsize
};
$'.resize'。可调整大小{
最小宽度:210,
身高:120,
调整大小:functionevent,ui{
$this.fontdesize;//使用插件函数
}
};
.调整大小{
字号:2.8vh;
空白:nowrap;
颜色:黑色;
背景:黄色;
光标:移动;
宽度:300px;
高度:130像素
}
.调整大小{
过渡:0.3s;
}
点击我!
一些非常长的名称,因为您正在通过执行$'chartdiv'.width600对单击处理程序中的最终宽度进行硬编码,您不妨将其作为参数传递,以帮助调整文本大小 而不是像这样:
$el.css('font-size', ($el.width() * $el.height()) / 2800 + 'px');
$el.css('font-size', (parameter * parameter) / 2800 + 'px');
更像这样:
$el.css('font-size', ($el.width() * $el.height()) / 2800 + 'px');
$el.css('font-size', (parameter * parameter) / 2800 + 'px');
这是一张工作票
在我的示例中,一切都将立即动画到正确的位置
请参阅我所做更改的注释:
$.fn.fontResize = function(newSize) { // receive parameter
return this.each(function() {
$el = $(this)
const halfSize = newSize/2 // divide width by 2
$el.css('font-size', (halfSize * halfSize) / 2800 + 'px'); // apply in calculation
});
}
$('button.do-resize').click(function(){
const newSize = 600 // declare as const to use twice in next line
$('#chartdiv').width(newSize).fontResize(newSize) // pass as parameter to fontResize
})
由于您是通过执行$'chartdiv'.width600在单击处理程序中硬编码最终宽度,因此您不妨将其作为参数传递,以帮助调整文本大小 而不是像这样:
$el.css('font-size', ($el.width() * $el.height()) / 2800 + 'px');
$el.css('font-size', (parameter * parameter) / 2800 + 'px');
更像这样:
$el.css('font-size', ($el.width() * $el.height()) / 2800 + 'px');
$el.css('font-size', (parameter * parameter) / 2800 + 'px');
这是一张工作票
在我的示例中,一切都将立即动画到正确的位置
请参阅我所做更改的注释:
$.fn.fontResize = function(newSize) { // receive parameter
return this.each(function() {
$el = $(this)
const halfSize = newSize/2 // divide width by 2
$el.css('font-size', (halfSize * halfSize) / 2800 + 'px'); // apply in calculation
});
}
$('button.do-resize').click(function(){
const newSize = 600 // declare as const to use twice in next line
$('#chartdiv').width(newSize).fontResize(newSize) // pass as parameter to fontResize
})
你能帮我怎么做吗?你能帮我怎么做吗?是的,你是对的,但是有没有其他解决方案可以用$el.css'font-size',$el.width*$el.height/2800+'px'解决这个问题;这些代码。是的,你是对的,但是有没有其他解决方案可以用$el.css'font-size'、$el.width*$el.height/2800+'px'解决这个问题;这些代码还不能解决我的问题,请阅读问题clearly@RRSuthar你说我只想用点击操作。->它在我的代码中只需单击一下就可以工作,但很多时候它都无法工作,请再次查看plz@RRSuthar是的,你注意到我用的是随机函数了吗?是的!这是什么,我对你们说,这并不能解决我的问题,请阅读问题clearly@RRSuthar你说我只想用点击操作。->它在我的代码中只需单击一下就可以工作,但很多时候它都无法工作,请再次查看plz@RRSuthar是的,你注意到我用的是随机函数了吗?是的!那是什么,我对你说它工作了,但是,现在鼠标拖动功能不工作了,请再次检查它,但是,现在鼠标拖动功能不工作了,请再次检查