Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CSS动画/转换无法正常工作_Javascript_Html_Jquery_Css - Fatal编程技术网

Javascript CSS动画/转换无法正常工作

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.

这里没有动画/过渡代码,请检查:

.调整大小{ 字号: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;//使用插件函数 } };
如果检查计算的字体大小,您会发现一些问题:

所以我的假设是,由于您通过设置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是的,你注意到我用的是随机函数了吗?是的!那是什么,我对你说它工作了,但是,现在鼠标拖动功能不工作了,请再次检查它,但是,现在鼠标拖动功能不工作了,请再次检查