Jquery实现的Switch开关按钮(仿iOS开关)
honeySwitch提供了类似手机switch开关的效果风格,它不仅适用于PC端,也适用于移动端。
index.html
<!DOCTYPE html>
<html lang="zh_cn">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
<title>Honey Switch</title>
<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
<link rel="stylesheet" href="./honeySwitch.css">
<script src="./honeySwitch.js"></script>
<style>
</style>
<script>
$(function(){
// 监听swich切换事件
switchEvent("#switch",
function(){
$('#status').text('开');
},function(){
$('#status').text('关');
}
);
// 从服务器获取状态
// 在服务器返回status
var status = 2;
if(status == 1){
// 1开
honeySwitch.showOn("#switch");
$('#status').text('开');
}else{
// 2关
honeySwitch.showOff("#switch");
$('#status').text('关');
}
});
</script>
</head>
<body>
<!-- switch -->
<span class="switch-on" themeColor="#39f" id="switch" style="zoom:1;"></span>
<!-- 状态 -->
<h1 id="status"></h1>
</body>
</html>
honeySwitch.css
[class|=switch] {
position: relative;
display: inline-block;
width: 50px;
height: 30px;
border-radius: 16px;
line-height: 32px;
-webkit-tap-highlight-color:rgba(255,255,255,0);
}
.switch-on {
border: 1px solid white;
box-shadow: white 0px 0px 0px 16px inset;
transition: border 0.4s, box-shadow 0.2s, background-color 1.2s;
background-color: white;
cursor: pointer;
}
.slider {
position: absolute;
display: inline-block;
width: 30px;
height: 30px;
background: white;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
border-radius: 50%;
left: 0;
top: 0;
}
.switch-on .slider {
left: 20px;
transition: background-color 0.4s, left 0.2s;
}
.switch-off {
border: 1px solid #dfdfdf;
transition: border 0.4s, box-shadow 0.4s;
background-color: rgb(255, 255, 255);
box-shadow: rgb(223, 223, 223) 0px 0px 0px 0px inset;
background-color: rgb(255, 255, 255);
cursor: pointer;
}
.switch-off .slider {
left: 0;
transition: background-color 0.4s, left 0.2s;
}
.switch-on.switch-disabled{
opacity:.5;
cursor:auto;
}
.switch-off.switch-disabled{
background-color:#F0F0F0 !important;
cursor:auto;
}
honeySwitch.js
var honeySwitch = {};
honeySwitch.themeColor = "rgb(100, 189, 99)";
honeySwitch.init = function() {
var s = "<span class='slider'></span>";
$("[class^=switch]").append(s);
$("[class^=switch]").click(function() {
if ($(this).hasClass("switch-disabled")) {
return;
}
if ($(this).hasClass("switch-on")) {
$(this).removeClass("switch-on").addClass("switch-off");
$(".switch-off").css({
'border-color' : '#dfdfdf',
'box-shadow' : 'rgb(223, 223, 223) 0px 0px 0px 0px inset',
'background-color' : 'rgb(255, 255, 255)'
});
} else {
$(this).removeClass("switch-off").addClass("switch-on");
if (honeySwitch.themeColor) {
var c = honeySwitch.themeColor;
$(this).css({
'border-color' : c,
'box-shadow' : c + ' 0px 0px 0px 16px inset',
'background-color' : c
});
}
if ($(this).attr('themeColor')) {
var c2 = $(this).attr('themeColor');
$(this).css({
'border-color' : c2,
'box-shadow' : c2 + ' 0px 0px 0px 16px inset',
'background-color' : c2
});
}
}
});
window.switchEvent = function(ele, on, off) {
$(ele).click(function() {
if ($(this).hasClass("switch-disabled")) {
return;
}
if ($(this).hasClass('switch-on')) {
if ( typeof on == 'function') {
on();
}
} else {
if ( typeof off == 'function') {
off();
}
}
});
}
if (this.themeColor) {
var c = this.themeColor;
$(".switch-on").css({
'border-color' : c,
'box-shadow' : c + ' 0px 0px 0px 16px inset',
'background-color' : c
});
$(".switch-off").css({
'border-color' : '#dfdfdf',
'box-shadow' : 'rgb(223, 223, 223) 0px 0px 0px 0px inset',
'background-color' : 'rgb(255, 255, 255)'
});
}
if ($('[themeColor]').length > 0) {
$('[themeColor]').each(function() {
var c = $(this).attr('themeColor') || honeySwitch.themeColor;
if ($(this).hasClass("switch-on")) {
$(this).css({
'border-color' : c,
'box-shadow' : c + ' 0px 0px 0px 16px inset',
'background-color' : c
});
} else {
$(".switch-off").css({
'border-color' : '#dfdfdf',
'box-shadow' : 'rgb(223, 223, 223) 0px 0px 0px 0px inset',
'background-color' : 'rgb(255, 255, 255)'
});
}
});
}
};
honeySwitch.showOn = function(ele) {
$(ele).removeClass("switch-off").addClass("switch-on");
if(honeySwitch.themeColor){
var c = honeySwitch.themeColor;
$(ele).css({
'border-color' : c,
'box-shadow' : c + ' 0px 0px 0px 16px inset',
'background-color' : c
});
}
if ($(ele).attr('themeColor')) {
var c2 = $(ele).attr('themeColor');
$(ele).css({
'border-color' : c2,
'box-shadow' : c2 + ' 0px 0px 0px 16px inset',
'background-color' : c2
});
}
}
honeySwitch.showOff = function(ele) {
$(ele).removeClass("switch-on").addClass("switch-off");
$(".switch-off").css({
'border-color' : '#dfdfdf',
'box-shadow' : 'rgb(223, 223, 223) 0px 0px 0px 0px inset',
'background-color' : 'rgb(255, 255, 255)'
});
}
$(function() {
honeySwitch.init();
});
使用
1、swich主体switch-on
代表开启,如需设置默认关闭,可设置为 switch-off
,themeColor
是主题色,zoom
可设置swich的大小,调整 zoom
的值即可调整大小。
<span class="switch-on" themeColor="#39f" id="switch" style="zoom:1;"></span>
class添加 switch-disabled
可设置为禁用。
<span class="switch-on switch-disabled" themeColor="#39f" id="switch" style="zoom:1;"></span>
2、swich监听
通过 switchEvent
事件监听switch的切换状态。
$(function(){
switchEvent("#switch",
function(){
$('#status').text('开');
},function(){
$('#status').text('关');
}
);
}
3、设置状态
通过 honeySwitch.showOn("#switch")
和 honeySwitch.showOff("#switch")
来设置开关。
推荐阅读
简单实现微信小程序支付+php后端(回调、查询订单、订单信息入库)
微信小程序获取订单参数->向后端发起同意下单请求->获取订单参数->小程序调用Api进行发起支付->支付完成->发送回调->支付结果入库->查询订单支付状态。
TANKING赞 1阅读 1.4k
从零搭建 Node.js 企业级 Web 服务器(零):静态服务
过去 5 年,我前后在菜鸟网络和蚂蚁金服做开发工作,一方面支撑业务团队开发各类业务系统,另一方面在自己的技术团队做基础技术建设。期间借着 Node.js 的锋芒做了不少 Web 系统,有的至今生气蓬勃、有的早已夭折...
乌柏木赞 150阅读 12.3k评论 10
正则表达式实例
收集在业务中经常使用的正则表达式实例,方便以后进行查找,减少工作量。常用正则表达式实例1. 校验基本日期格式 {代码...} {代码...} 2. 校验密码强度密码的强度必须是包含大小写字母和数字的组合,不能使用特殊...
寒青赞 56阅读 7.9k评论 11
JavaScript有用的代码片段和trick
平时工作过程中可以用到的实用代码集棉。判断对象否为空 {代码...} 浮点数取整 {代码...} 注意:前三种方法只适用于32个位整数,对于负数的处理上和Math.floor是不同的。 {代码...} 生成6位数字验证码 {代码...} ...
jenemy赞 46阅读 6k评论 12
从零搭建 Node.js 企业级 Web 服务器(十五):总结与展望
总结截止到本章 “从零搭建 Node.js 企业级 Web 服务器” 主题共计 16 章内容就更新完毕了,回顾第零章曾写道:搭建一个 Node.js 企业级 Web 服务器并非难事,只是必须做好几个关键事项这几件必须做好的关键事项就...
乌柏木赞 66阅读 6.2k评论 16
再也不学AJAX了!(二)使用AJAX ① XMLHttpRequest
「再也不学 AJAX 了」是一个以 AJAX 为主题的系列文章,希望读者通过阅读本系列文章,能够对 AJAX 技术有更加深入的认识和理解,从此能够再也不用专门学习 AJAX。本篇文章为该系列的第二篇,最近更新于 2023 年 1...
libinfs赞 39阅读 6.3k评论 12
从零搭建 Node.js 企业级 Web 服务器(一):接口与分层
分层规范从本章起,正式进入企业级 Web 服务器核心内容。通常,一块完整的业务逻辑是由视图层、控制层、服务层、模型层共同定义与实现的,如下图:从上至下,抽象层次逐渐加深。从下至上,业务细节逐渐清晰。视图...
乌柏木赞 44阅读 7.4k评论 6
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。