用css3或者jquery实现切换按钮效果

switch demo地址:http://codepen.io/tianzi77/pen/VLLBmQ

整理思路:

这个 DEMO 的功能大致就是模拟开关效果,用于增强原生的 checkbox。视觉效果大致是一个白色的方块左右移动,这里我们最直接的可以想到这种实现:

左边一个蓝色方块,中间一个白色方块,右边一个灰色方块,三者宽度调整宽度和位置来完成动画

这么来看,我们需要控制的元素有3个,并且我们仔细观察后能发现边框的颜色也会发生变化,那这种控制可能成本太高了,我们想想能不能减少需要控制的元素:

把灰色部分作为背景,边框属于这个背景,激活按钮在背景上滑动

这么一想,似乎需要控制内容从 3 个变成了 2 个。那么激活按钮这块又如何实现呢?还是最直接的方式:

修改蓝色部分的宽度和白色部分的位置

刚才的经验告诉我们,也许最直接能想到的并不是最好的,由于我们知道 CSS 父级元素可以让超出其范围的子级元素隐藏,于是我们又想到这种思路:

把蓝色和白色作为一个整体,让它在背景上滑动,未激活的状态时左侧超出的部分被隐藏掉,激活状态时正常显示

似乎到此为止,我们已经得到一个比较清晰并且简单的实现思路,那么接下来开始具体实现。

通过 javascript

先讲最常见的,通过 JS 监听事件来控制样式修改。

构建 DOM 结构

按照我们上面的思路,DOM 结构大致可以如下构建:

<div class="switch">
    <div class="switch-btn"></div>
</div>

写 CSS 样式

基于以上的 DOM 结构,我们来处理 CSS 样式,可以分为已激活和未激活两种状态来处理。

未激活:

.switch {
    display:inline-block;
    overflow:hidden;
    position:relative;
    border:solid 1px #ccc;
    background-color:#ccc;
    height:25px;
    width:60px;
}
.switch-btn {
    position:absolute;
    top:0;
    left:-35px;
    height:25px;
    width:25px;
    background-color:#fff;
    border-left:solid 35px #69f;
}

已激活:

.switch {
    display:inline-block;
    overflow:hidden;
    position:relative;
    border:solid 1px #69f;
    background-color:#ccc;
    height:25px;
    width:60px;
}
.switch-btn {
    position:absolute;
    top:0;
    left:0;
    height:25px;
    width:25px;
    background-color:#fff;
    border-left:solid 35px #69f;
}

写 JS 控制

完成了 CSS 样式后进入 JS 的控制部分。从样式中我们可以看出,两种状态的差别只有很小的部分,于是我们可以通过 JS 来实现这种样式的修改:

var flag = false,
    $switch = $(‘.switch‘),
    $switchBtn = $switch.children(‘.switch-btn‘);

$switch.bind(‘click‘, function () {
    if (flag) {
        $switch.css(‘border-color‘, ‘#ccc‘);
        $switchBtn.css(‘left‘, ‘-35px‘);
    } else {
        $switch.css(‘border-color‘, ‘#69f‘);
        $switchBtn.css(‘left‘, 0);
    }
    flag = !flag;
});

优化

之前的课上讲过最好不要直接通过 JS 来修改样式属性,而是通过控制 class 来完成对于样式的修改。那么对于上面的代码,我们可以简化成如下的形式:

CSS:

.switch {
    display:inline-block;
    overflow:hidden;
    position:relative;
    border:solid 1px #ccc;
    background-color:#ccc;
    height:25px;
    width:60px;
}
.switch-btn {
    position:absolute;
    top:0;
    left:-35px;
    height:25px;
    width:25px;
    background-color:#fff;
    border-left:solid 35px #69f;
}
.active.switch {
    border-color:#69f;
}
.active > .switch-btn {
    left:0;
}

JS:

$(‘.switch‘).bind(‘click‘, function () {
    $(this).toggleClass(‘active‘);
});

通过 css

优化后的代码 JS 部分已经非常简单,那么有没有方法可以不用 JS 来实现这个需求呢?并且,我们这里本来是准备增强 checkbox 的,结果却没有出现 checkbox,那么如果是在 form 中,岂不是会对数据的提交产生影响?

OK,那面对这些问题,我们尝试着从另一种思路来处理这件事情,即通过纯 CSS 的方式来处理。

构建 DOM 结构

<input id="switch-btn" type="checkbox" name="switch">
<label for="switch-btn" class="switch">
    <div class="switch-btn"></div>
</label>

写 CSS

由于 CSS 中没有监听事件之类的处理,那么我们这里如何来实现这个需求呢?

静心细想,发现其实我们只是在两个状态间切换罢了,所以远不用事件那么麻烦,无非是两个状态的记录。而我们正好要增强的就是 checkbox,于是结合相邻兄弟选择器,有了如下代码:

input {
    height:0;
    width:0;
    margin:0;
}
input:checked ~ label {
    border-color:#69f;
}
input:checked ~ label .switch-btn{
    left:0;
}
.switch {
    display:inline-block;
    overflow:hidden;
    position:relative;
    border:solid 1px #ccc;
    background-color:#ccc;
    height:25px;
    width:60px;
}
.switch-btn {
    transition:all 0.4s;
    top:0;
    left:-35px;
    height:25px;
    width:25px;
    background-color:#fff;
    border-left:solid 35px #69f;
}

CSS3 transition

我们已经实现了基本需求,接下来还差最后一步的动画效果。CSS3 中有一个属性叫做 transition,我们利用它便可以非常方便的实现需求。

时间: 2024-08-14 08:10:32

用css3或者jquery实现切换按钮效果的相关文章

美妙的 CSS3 动画!一组梦幻般的按钮效果

今天给大家带来的是五款梦幻般的动画按钮效果.下面是在线演示,把鼠标放在按钮上试试,有惊喜哦!CSS3 引入了众多供功能强大的新特性,让设计和开发人员能够轻松的创作出各种精美的界面效果. 温馨提示:为保证最佳的效果,请在 IE10+.Chrome.Firefox 和 Safari 等现代浏览器中浏览. 源码下载     在线演示 这些精美的效果用到了 CSS3 border-radius(圆角).box-shadow(阴影).transition(变形).transform(转换)和 animat

CSS3模拟实现iphone返回按钮效果

CSS3模拟实现iphone返回按钮效果:大家知道现在CSS3可以实现各种漂亮的效果,以前只有图片可以实现的效果,现在CSS3实现起来难度也不是太高.下面分享一段使用CSS3实现的iphone返回按钮的效果,其实这种CSS3代码根本就不用分析,只要给出代码实例,自己就完全可以看明白,当然你要首先知道各个属性的作用是什么,代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&q

jQuery 简易3D按钮效果

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server&qu

基于jquery多种切换效果的焦点图(兼容ie6)

随着html5和css3的诞生.各种非常酷.非常炫的网页焦点图在各个前端技术网上满天飞.基于html5和css3技术的焦点图有一个弊端就是要在ie9以上才支持.这让需兼容ie6到ie8的页面又爱又恨.下面为大家介绍一款完全基于juery的焦点图,而且这款插件完美支持ie6,多种百叶窗切换,效果还是相当赏目的.无图无真相,还是先上图 点击这里在线预览 点击这里下载源码 使用教程 这款插件代码很简洁,使用也非常简单.看截图 ok.今天就和大家分享到这里.周末好快,作为一名码农真是苦逼,明天还要早起,

使用 CSS3 制作一组超时尚的动画按钮效果

通过 CSS3 的新特性,我们创作出好的交互和效果的可能性大大增加.这篇文章中,我想与大家分享一些 CSS3 动画按钮效果.我们的想法是创建一个具有不同风格的一些动画链接元素,鼠标悬停时有动画效果和活动状态. 效果演示     插件下载 HTML 示例代码: <a href="#" class="a-btn"> <span class="a-btn-slide-text">$29</span> <img

javascript设计模式实践之迭代器--具有百叶窗切换图片效果的JQuery插件(一)

类似于幻灯片的切换效果,有时需要在网页中完成一些图片的自动切换效果,比如广告,宣传,产品介绍之类的,那么单纯的切就没意思了,需要在切换的时候通过一些效果使得切换生动些. 比较常用之一的就是窗帘切换了. 先贴上完成的效果. 实现原理不复杂,在动的一条一条的称之为“窗帘条”或者是“strip”,每一个strip都是一个div,类似于雪碧图的方式将其背景图的位置设置为strip的可视位置,然后用jquery的animate让他们按照一定规律动起来就完成窗帘切换效果了. 为了使用方便,将这个功能作为jq

javascript设计模式实践之职责链--具有百叶窗切换图片效果的JQuery插件(三)

在上一篇<javascript设计模式实践之模板方法--具有百叶窗切换图片效果的JQuery插件(二)>里,通过采用模板方法模式完成了切换效果对象的构建编写. 接下来就是完成各效果对象的调用和联动. 切换要求:当前图片显示指定时间后执行切换效果并切换下一张图片,最后一个切换后从头开始. 按照要求一个效果对象完成后要执行下一个,最后一个完成后要从头开始, 看上去就是一个带状态通知的环形列表,类似于这样的特征,可以采用职责链模式来构建. 职责链就是由不同的功能处理构成的链表,每一个功能处理作为一个

css3代码实现的鼠标悬浮按钮效果代码实例

css3代码实现的鼠标悬浮按钮效果代码实例:在css3之前,鼠标悬浮于按钮之上,无非是设置按钮的大小.字体颜色或者背景图片等简单的项目,但是css3的出现,可以让设置变得丰富多彩,下面就是一个css3实现的此效果.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://

CSS3结合jQuery制作的冒泡工具图片提示效果

一款基于CSS3技术的冒泡提示效果,为了演示效果,生成了许多冒泡的提示,实际使用中,可能不需要这么多,结合jQuery和jquery UI共同实现的网页提示特效,挺不错.因CSS不支持IE8及以下低版本,所以请使用IE9.chrome或火狐测试. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transition