相关疑难解决方法(0)

回调CSS过渡

CSS转换完成后是否可以获得通知(如回调)?

javascript css css3 css-transitions

99
推荐指数
5
解决办法
5万
查看次数

如何在浏览器中规范化CSS3 Transition功能?

Webkit的转换结束事件称为webkitTransitionEnd,Firefox是transitionEnd,opera是oTransitionEnd.在纯JS中处理所有这些问题的好方法是什么?我应该做浏览器嗅探吗?或分别实施每一个?还有其他一些方法没有发生在我身上?

即:

//doing browser sniffing
var transitionend = (isSafari) ? "webkitTransitionEnd" : (isFirefox) ? "transitionEnd" : (isOpera) ? "oTransitionEnd";

element.addEventListener(transitionend, function(){
  //do whatever
},false);
Run Code Online (Sandbox Code Playgroud)

要么

// Assigning an event listener per browser
element.addEventListener("webkitTransitionEnd", fn);
element.addEventListener("oTransitionEnd", fn);
element.addEventListener("transitionEnd", fn);

function fn() {
   //do whatever
}
Run Code Online (Sandbox Code Playgroud)

javascript css dom-events css-transitions

89
推荐指数
5
解决办法
4万
查看次数

CSS3动画后JavaScript不显示

我有id ='mainmenu'的div.我在按钮点击后通过JavaScript添加CSS3过渡(通过向#mainmenu添加'transition'并创建将添加到div元素的类.fadein和.fadeout).码:

<div id='mainmenu'></div>
<button id="btn1">Click me1</button>
<button id="btn2">Click me2</button>

#mainmenu {
    width:100px; 
    height:100px; 
    background:#eee; 
    -webkit-transition: opacity 1s; 
    -moz-transition: opacity 1s; 
    transition: opacity 1s; 
}

.fadeout {
    opacity:0;
}
.fadein {
    opacity:1;
}


var menu = document.getElementById('mainmenu'),
    btn1 = document.getElementById('btn1'),
    btn2 = document.getElementById('btn2');

btn1.addEventListener('click', function() {
    menu.className = 'fadeout';
}
btn2.addEventListener('click', function() {
    menu.className = 'fadein';
}
Run Code Online (Sandbox Code Playgroud)

问题是现在我想添加display none和block to fadeout和fadein选项.所以在fadeout动画div之后应该显示none,并且在fadein显示块之后:

btn1.addEventListener('click', function() {
    menu.className = 'fadeout';
    menu.style.display = 'none';
}
btn2.addEventListener('click', function() {
    menu.className = 'fadein';
    menu.style.display = 'block'; …
Run Code Online (Sandbox Code Playgroud)

javascript css css3

18
推荐指数
4
解决办法
3万
查看次数

CSS3动画填充模式polyfill

前言

让我们假设一个div从动画opacity:0;opacity:1;,我想保留opacity:1;动画结束之后.

这是什么animation-fill-mode:forwards;.

@keyframes myAnimation {
    from { opacity:0; }
    to { opacity:1; }
}
div {
    opacity:0;
    animation-name:myAnimation;
    animation-delay:1s;
    animation-duration:2s;
    animation-fill-mode:forwards;
}?
<div>just a test</div>?
Run Code Online (Sandbox Code Playgroud)

在jsFiddle上运行它

  • 注1:我在这里没有包含供应商前缀以简化
  • 注2:这只是一个例子,请不要回复"只使用jQuery fadeIn函数"等.

有些事要知道

这个答案中,我读到animation-fill-modeChrome 16+,Safari 4 +,Firefox 5+支持.

但Chrome 1+和Opera也支持animation单独使用.因此,即使不支持,使用Modernizr进行的一般测试也可能会返回正值.fill-mode

目标animation-fill-mode我在Modernizr上添加了一个新的测试:

Modernizr.addTest('animation-fill-mode',function(){
    return Modernizr.testAllProps('animationFillMode');
});
Run Code Online (Sandbox Code Playgroud)

现在我有一个.no-animation-fill-modeCSS和Modernizr.animationFillModeJavaScript 的课程.

我还从CSS3动画规格中读到:

文档样式表中指定的动画将从文档加载开始


最后,问题

是否可以在动画结束的确切秒数内运行简单的jQuery函数

$(document).ready(function(){ …
Run Code Online (Sandbox Code Playgroud)

jquery animation css3 modernizr polyfills

14
推荐指数
1
解决办法
4729
查看次数

事件'transitionend'被称为太早,它会延迟渲染

我在做什么,什么是错的

当我点击一个按钮时,会出现一个滑块.(这里是它的样子的一个例子,不要注意这段代码)

滑块通过动画显示.动画结束后,我应该包含一个我从服务器加载的HTML页面.我需要在动画之后在滑块中应用HTML,否则动画停止(重新计算DOM).

我的算法

  1. 启动请求以使HTML显示在滑块内
  2. 开始动画
  3. 等待数据准备就绪完成转换

    为什么?如果我在动画期间应用HTML,它会在将新HTML添加到DOM时停止动画.所以我等到第4步之前结束.

  4. 在滑块内应用HTML

这是缩短的代码:

// Start loading data & animate transition
var count = 0;
var data = null;

++count;
$.get(url, function (res) {
    data = res;
    cbSlider();
});

// Animation starts here

++count;
$(document).on('transitionend', '#' + sliderId, function () {
    $(document).off('transitionend', '#' + sliderId);
    cbSlider()
});

function cbSlider() {
    --count;
    // This condition is only correct when both GET request and animation are finished
    if …
Run Code Online (Sandbox Code Playgroud)

javascript css animation css-animations

12
推荐指数
1
解决办法
899
查看次数

webkit过渡结束于mozilla和歌剧?

我想知道是否有一些预定义的事件,如webkitTransitionEnd在Mozilla和Opera浏览器中的Chrome?

我怎样才能检测到浏览器是否启用了webkit和CSS3?

javascript jquery events html5 webkit

8
推荐指数
1
解决办法
5902
查看次数

你如何检测CSS动画何时开始和结束JavaScript?

我习惯用JavaScript动画元素.我发现用CSS3做起来更简单.

使用JavaScript如何检测CSS动画何时开始以及何时结束?有什么办法吗?

javascript css animation

6
推荐指数
1
解决办法
8930
查看次数

css样式上的javascript事件从块更改为无

是否有一个纯粹的javascript事件(没有jQuery),当我将div的css样式从块更改为无时触发.我的印象是我可以通过"onBlur"捕获它,但看起来我不能!

请指教!

javascript css dom-events

5
推荐指数
1
解决办法
1万
查看次数

检查CSS3转换是否正在运行

有没有办法在我的Javascript中检测一个元素当前是否正在使用CSS3过渡动画?

一个"transitionstart"-event(相当于'transistionend'事件)也可以解决,但我在规范中找不到任何提及它.

html5 css3 css-transitions

5
推荐指数
1
解决办法
1655
查看次数

为什么 JS .focus() 只能在 50ms 或更长的 setTimeout 内工作

问题

我正在为客户创建一个工作页面,带有一个滑出搜索栏。当我单击打开搜索输入字段的按钮(它从隐藏开始)时,我希望焦点(光标)移动到搜索栏(输入)。

出于某种奇怪的原因,我似乎能够获得焦点来切换输入字段的唯一方法是,如果我将其放入最短时间约为 50 毫秒的 setTimeout 中(我尝试了 0,但不起作用)。

奇怪的警告 - 当我关闭搜索栏(单击隐藏搜索的打开/关闭按钮)时,我可以暂时使输入字段获得焦点/光标,但当它打开时不会,这就是我想要的。除非它在 ​​setTimeout ....

我试过的

将焦点设置为其他内容,然后对其进行模糊处理,然后将焦点设置为我的输入字段。[X]

  • 用 0 ms [x]包裹.focus()asetTimeout

  • 将焦点设置为我创建的不同的“测试”输入字段。[作品]

  • 添加tabindex到 -1 [x] 的输入

const icon = document.getElementById("search-icon");
const form = document.getElementById("search-form");
const input = document.getElementById("search-input");

icon.parentElement.addEventListener("click", e => {
  form.classList.toggle("visible");
  icon.classList.toggle("fa-search");
  icon.classList.toggle("fa-times");  

  setTimeout(() => input.focus(), 50);

});
Run Code Online (Sandbox Code Playgroud)
<div class="header__search">
    <i id="search-icon" class="fas fa-search">click me</i>
    <form
      id="search-form"
      class="header__search-area"
      onclick="event.stopPropagation()"
    >
      <input
        id="search-input"
        tabindex="-1"
        type="text"
        placeholder="Enter Search Term..."
      />
      <button type="submit">search</button>
    </form>
</div>
Run Code Online (Sandbox Code Playgroud)

为了更快地理解,您单击图标 …

javascript

5
推荐指数
1
解决办法
749
查看次数

如何检测css3转换何时结束

我正在学习javascript和css3游戏,我正在研究外星人游戏.游戏是一个猜谜游戏,你输入X和Y位置的猜测,导弹使用css3过渡向外星人移动.当导弹到达外星人时,爆炸应该出现; 但我很难确定转换何时结束.目前,当您进行X和Y猜测并且导弹起飞时,爆炸就会出现.当css3转换结束时,如何使用Javascript检测爆炸?

这是我目前拥有的:

样式表:

#explosion
{
  width: 20px;
  height: 20px;
  position: absolute;
  display: none;
  background-image: url(../images/explosion.jpg);
}

#alien
{
  width: 20px;
  height: 20px;
  position: absolute;
  top: 20px;
  left: 80px;
  background-image: url(../images/alien.jpg);
}

#missile
{
  width: 10px;
  height: 10px;
  position: absolute;
  top: 240px;
  left: 145px;
  background-image: url(../images/missile.jpg);
  /*Transition*/
  -webkit-transition: all 0.5s ease-out 0s;
  -moz-transition: all 0.5s ease-out 0s;
  transition: all 0.5s ease-out 0s;
}
Run Code Online (Sandbox Code Playgroud)

和Javascript:

if(guessX >= alienX && guessX <= alienX + 20)
{
  //Yes, it's within the X range, …
Run Code Online (Sandbox Code Playgroud)

javascript css3

4
推荐指数
2
解决办法
181
查看次数

所有活动CSS转换完成后jQuery计算宽度和高度

动画完成后使用jQuery可以计算元素的大小吗?我的简化示例是:

<style>
  .brick
  {
    transition: all 0.4s ease-in-out;
  }
  .large
  {
    width: 400px;
    height: 400px;
  }
  .small
  {
    width: 200px;
    height: 200px;
  }
</style>

<script>
  $('.brick').removeClass('small').addClass('large');
  $('.brick').height(); // returns 200px but desired 400px
  $('.brick').width();  // returns 200px but desired 400px
</script>
Run Code Online (Sandbox Code Playgroud)

我不能等到动画完成后才能获得大小,我不能硬编码JS中的任何大小.有任何想法吗?

编辑:小尺寸和大尺寸的错字

javascript css jquery

4
推荐指数
1
解决办法
3753
查看次数

Underscore的油门功能不会触发

_.throttle(function() {}, 250)功能是否仅触发click?因为我试图以一个小延迟运行一些代码,并且由于某种原因它似乎不起作用.

return _.throttle(function() {
    return ( $(this).hasClass('dataRevealed') ) ? $(this).addClass('animated fadeOut') : true;
}, 350);
Run Code Online (Sandbox Code Playgroud)

编辑:该函数看起来像这样:

Application.CardView.prototype.removeSimilarCards = function(_container) {
    return $(_container).find('[data-identifier="card-view"]').each(function() {
        console.log("first");
        _.throttle(function() {
            console.log("inner");
            return ( $(this).hasClass('dataRevealed') ) ? $(this).addClass('animated fadeOut') : true;
        }, 350);
    });
};
Run Code Online (Sandbox Code Playgroud)

javascript underscore.js

0
推荐指数
1
解决办法
3034
查看次数