CSS过渡 && bootstrap transition

bootstrap插件自带的动画都是用CSS3的过渡实现的,transition动画相比jQuery自带的动画有许多优点,这些动画比较平滑,使用起来比较方便和灵活,并且对资源的消耗比较少,但是也有缺点,比如动画完成时间等等。既然bootstrap插件采用了transition来进行动画效果修改,那么这样的方法还是很值得去学习一下的。

CSS transition

CSS transition是CSS样式在一定时间内从一个状态平滑地过渡到另外一个状态,我们可以使用伪类来很容易地实现这样的CSS transition。

.testRect {
  height: 200px;
  width: 200px;
  background-color: #444;
  transition: background-color 1s linear; 
}

.testRect:hover {
  background-color: #36f;
}

上面的代码可以让一个类为testRect的元素的背景色在鼠标移动到该元素上1s内按照线性变化从灰色变成蓝色。
但是如果仅仅是通过伪类实现,那么这个CSS transition也太过鸡肋了,毕竟CSS的伪类能实现的功能太少,如果我们使用JavaScript为某个DOM元素添加一个类,这个类中包含动画效果,那么在添加到这个类名的时候,就会执行这个动画效果了。例如:

.testRect {
  height: 200px;
  width: 200px;
  background-color: #444;
  transition: background-color 1s linear; 
}

.testRect.blue {
  background-color: #36f;
}

可以设置这个div的点击函数为colorChange,点击这个div矩形,就可以得到1秒之内颜色的平滑过渡。

function colorChange(){
    var className = $('.testRect').attr('class').split(' ');
    if (!className[1])
        $('.testRect').addClass('blue');
    else
        $('.testRect').removeClass('blue');
}

TransitionEnd

transitionEnd事件是在CSS过渡动画结束之后自动触发的一个事件,这个事件在bootstrap插件中起到了很大的作用,这个事件的回调函数可以完成对发生动画的DOM元素进行清理的工作。
transitionEnd事件在不同浏览器中有着不同的事件名称,所以在使用之前尽量先检测浏览器的支持情况。下面是bootstrap中测试浏览器支持的transitionEnd事件的事件名。

function transitionEnd(){
    var bs = document.createElement('bootstrap');
    var transitionEndEventNames = {
        WebkitTransition : 'webkitTransitionEnd',
        MozTransition    : 'transitionend',
        OTransition      : 'oTransitionEnd otransitionend',
        transition       : 'transitionend'
    };
    for (var name in transitionEndEventNames){
        if(bs.style[name] !== undefined)
            return {end:transitionEndEventNames[name],};
    }
    return false;  //IE8以下不支持transition,所以不会有transitionEnd事件
}

如果浏览器支持CSS transition,并且已经得到了transitionEnd事件的事件名,就可以添加对该事件的监听函数。来监听动画何时结束。

$(document).ready(function(){
    $(document).on(transitionEnd().end,function(){
        event.preventDefault();
        alert('动画完成啦~~');
    });
});

结合之前判定浏览器支持的事件名,就可以完成对于CSS过渡完成事件的监听。

emulateTransitionEnd

在bootstrap插件中,除了transitionEnd事件,插件还在jQuery的插件库中添加一个名为emulateTransitionEnd的方法,刚开始对这个方法并看不太懂(bootstrap源码的风格看的人好心酸啊喂),后来查阅了一些资料才大概搞清楚这个方法的作用。先上源码

  $.fn.emulateTransitionEnd = function (duration) {
    var called = false
    var $el = this
    $(this).one('bsTransitionEnd', function () { called = true })
    //在这里检测transitionEnd事件是否被自动触发,回调函数是否调用
    //如果调用了则设置called变量为true
    var callback = function () { 
      if (!called)   
        $($el).trigger($.support.transition.end) 
    }
    //如果没有自动触发transitionEnd事件以及回调,那么就再用trigger方法触发
    //一个duration时间后的回调函数,保证transitionEnd的回调肯定会执行
    setTimeout(callback, duration)
    return this
  }

bootstrap插件新增的这个方法,是由于transitionEnd事件有时候并不能被正常触发,所以需要手动在transitionEnd事件没有触发的时候自动触发一个事件,并且给这个事件绑定上与transitionEnd事件一样的回调函数,保证这个回调函数的执行。

这就是bootstrap transition函数的几个主要部分,总的来说这种动画风格非常的简约,适合作为官方网站的动画效果的,棒棒的。

Bootstrap 是一个流行的前端框架,它提供了响应式、移动优先的前端开发工具集。在 Bootstrap 中,可以通过 CSS 样式来实现响应式的旋转按钮过渡效果,但请注意,Bootstrap 框架本身并不直接提供一个名为“响应式旋转按钮过渡”的组件或类。不过,我们可以通过组合使用 Bootstrap 的工具类和一些自定义的 CSS 代码来实现这样的效果。 为了创建一个响应式的旋转按钮过渡,你需要考虑以下几个方面: 1. 使用 `.btn` 类来创建一个按钮,并应用 `.btn-primary`、`.btn-secondary` 等来设置按钮的样式。 2. 使用媒体查询(Media Queries)来确保按钮在不同屏幕尺寸下都能保持响应性。 3. 应用 CSS3 的 `transition` 属性来添加按钮的旋转过渡效果。 4. 使用 `:hover` 伪类来触发动画效果。 下面是一个简单的示例代码,展示如何实现一个响应式的旋转按钮过渡效果: ```html <!DOCTYPE html> <html lang="zh"> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <style> .rotating-button { transition: transform 0.5s ease; display: inline-block; } .rotating-button:hover { transform: rotate(90deg); } </style> </head> <body> <button type="button" class="btn btn-primary rotating-button">Hover to rotate</button> </body> </html> ``` 在这个例子中,`.rotating-button` 类定义了按钮在悬停时会有旋转过渡效果,而 `transform: rotate(90deg);` 表示按钮将旋转 90 度。`transition: transform 0.5s ease;` 则指定了过渡效果会在 0.5 秒内以“ease”方式完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值