jquery - 如何在跨度中向宽度添加过渡

标签 jquery html css css-transitions

我正在使用 jquery Wordsrotator .一切正常,如果字宽增加/减少,我想为跨度添加过渡效果。

当前宽度突然变化。

我添加了过渡,但它似乎不起作用

#myId
{
    transition: width 1s linear;
    -moz-transition: width 1s linear;
    -webkit-transition: width 1s linear;
    -o-transition: width 1s linear;
}

演示页面 here

最佳答案

这可能不是您期望的解决方案,这里的问题是宽度被设置为自动(所以并没有真正改变)这意味着我们必须做两件事之一 A) 更新每个刻度的宽度并希望它保持同步,B) 更改 Rotator 插件,让它为我们完成。

我选择了后者。这是一个 fiddle这样您就可以看到它的实际效果。

现在我要说说我做了什么。如果你看下面,你会看到我添加的 2 行


cont.width(cont.find(".wordsrotator_wordOut").width());

我在第一次填充 .wordsrotator_wordOut 之后添加了这一行,它所做的是将容器的宽度(称为 cont)设置为 .wordsrotator_wordOut 的数字宽度


cont.animate({width: cont.find(".wordsrotator_wordIn").width()});

这一行是在我们填充 .wordsrotator_wordIn 之后添加的,它使用 JQuery 的动画库来设置容器宽度的动画,容器宽度从离开的宽度变为进入的宽度。每次滴答出现时都会运行该行圆。


这是添加了这两行的最终结果。我建议也看看 fiddle ,因为我在那里做了一些其他的事情(只是一些 css flex 的东西)。

/*
 * jQuery Words Rotator plugin
 *
 * Copyright (c) 2013 Andrea Pace
 * licensed under MIT license.
 *
 * https://github.com/andreapace/wordsrotator
 * http://andreapace.co.uk/wordsrotator
 *
 * Version: 0.9.0
 */

(function($) {
  $.fn.wordsrotator = function(options) {
    var defaults = {
      autoLoop: true,
      randomize: false,
      stopOnHover: false,
      changeOnClick: false,
      words: null,
      animationIn: "flipInY",
      animationOut: "flipOutY",
      speed: 2000
    };
    var settings = $.extend({}, defaults, options);
    var listItem
    var array_bak = [];
    return this.each(function() {
      var el = $(this)
      var cont = $("#" + el.attr("id"));
      var array = [];
      if ((settings.words) || (settings.words instanceof Array)) {
        array = $.extend(true, [], settings.words);
        if (settings.randomize) array_bak = $.extend(true, [], array);
        listItem = 0
        if (settings.randomize) listItem = Math.floor(Math.random() * array.length)
        cont.html(array[listItem]);
        var rotate = function() {
          cont.html("<span class='wordsrotator_wordOut'><span>" + array[listItem] + "</span></span>");
          cont.width(cont.find(".wordsrotator_wordOut").width());
          if (settings.randomize) {
            array.splice(listItem, 1);
            if (array.length == 0) array = $.extend(true, [], array_bak);
            listItem = Math.floor(Math.random() * array.length);
          } else {
            if (array.length == listItem + 1) listItem = -1;
            listItem++;
          }
          $("<span class='wordsrotator_wordIn'>" + array[listItem] + "</span>").appendTo(cont);
          cont.wrapInner("<span class='wordsrotator_words' />");
          cont.animate({width: cont.find(".wordsrotator_wordIn").width()});
          cont.find(".wordsrotator_wordOut").addClass("animated " + settings.animationOut);
          cont.find(".wordsrotator_wordIn").addClass("animated " + settings.animationIn);
        };
        cont.on("click", function() {
          if (settings.changeOnClick) {
            rotate();
            return false;
          };
        });
        if (settings.autoLoop) {
          var t = setInterval(rotate, settings.speed);
          if (settings.stopOnHover) {
            cont.hover(function() {
              window.clearInterval(t)
            }, function() {
              t = setInterval(rotate, settings.speed);
            });
          };
        }
      };
    });
  }
}(jQuery));

希望对您有所帮助。

关于jquery - 如何在跨度中向宽度添加过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37137128/

相关文章:

html - 父容器的 CSS 全高

css - 尝试制作将主要内容推出屏幕的移动 Canvas 外滑出

c# - 我们可以在.net窗口应用程序中运行javascript吗

html - 右侧常用滚动条

javascript - 删除成功后从表中删除行吗?

javascript - onmousemove 事件不会从外部源中触发?

css - 如何为 iPad Chrome 浏览器预加载图像?

html - 溢出隐藏不隐藏子元素

jquery - 关于 jQuery Themeroller 主题,在哪里可以找到更多信息?

javascript - div 和 iframe 在页面中彼此相邻