"锁"
“锁”,指的是状态切换,状态未切换完成,加上锁,完成后才打开锁。
下面例子要完成一个点击按钮切换颜色的小示例,先看未加“锁”时候的效果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>锁</title>
<style>
*{
margin: 0;
padding: 0;
}
.box{
width: 200px;
height: 200px;
transition: all 3s;
-webkit-transition: all 3s;
}
.color1{
background-color: #985f0d;
}
.color2{
background-color: #0BB995;
}
</style>
<script src="../base/jquery-3.1.0.js"></script>
</head>
<body>
<div class="box color1"></div>
<a class="btn" href="javascript:;">点我移动</a>
<script>
$(function () {
var box = $('.box'),
btn = $('.btn'); btn.click(function () {
box.hasClass('color1') ? box.addClass('color2').removeClass('color1') : box.addClass('color1').removeClass('color2')
})
})
</script>
</body>
</html>
具体样式自己cv看就行了。想看出错误,你可以狂点,你会发现,颜色还没变化完成,就又开始变化了。
而开发的时候,是不允许用户狂点的,但是你又不能告诉用户,“你可别狂点啊”。想要防止用户狂点,就得在代码上面做些手段了。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>锁</title>
<style>
* {
margin: 0;
padding: 0;
} .box {
width: 200px;
height: 200px;
transition: all 3s;
-webkit-transition: all 3s;
} .color1 {
background-color: #985f0d;
} .color2 {
background-color: #0BB995;
}
</style>
<script src="../base/jquery-3.1.0.js"></script>
</head>
<body>
<div class="box color1"></div>
<a class="btn" href="javascript:;">点我移动</a>
<script>
$(function () {
var box = $('.box'),
btn = $('.btn'),
changing = false; btn.click(function () {
if (changing) return false;
changing = true; if (box.hasClass('color1')) {
box.removeClass('color1').addClass('color2');
box.on('webkitTransitionEnd otransitionend transitionend', function () {
changing = false;
})
} else if (box.hasClass('color2')) {
box.removeClass('color2').addClass('color1');
box.on('webkitTransitionEnd otransitionend transitionend', function () {
changing = false;
})
}
})
})
</script>
</body>
</html>
现在,我就能跟用户说一句,‘来啊,快(kuang)活(jian)啊’。
“锁”适用情况:
1、ajax提交
2、动画(翻牌、轮播图、方块移动etc)
说白了也就是,有 过程 的都需要一个“锁”。
“锁”是为了防止用户狂点。
"锁"的更多相关文章
- 使用redis构建可靠分布式锁
关于分布式锁的概念,具体实现方式,直接参阅下面两个帖子,这里就不多介绍了. 分布式锁的多种实现方式 分布式锁总结 对于分布式锁的几种实现方式的优劣,这里再列举下 1. 数据库实现方式 优点:易理解 缺 ...
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- java中的锁
java中有哪些锁 这个问题在我看了一遍<java并发编程>后尽然无法回答,说明自己对于锁的概念了解的不够.于是再次翻看了一下书里的内容,突然有点打开脑门的感觉.看来确实是要学习的最好方式 ...
- 分布式锁1 Java常用技术方案
前言: 由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.所以自己结合实际工作中的一些经验和网上看到的一些资 ...
- 如何在高并发环境下设计出无锁的数据库操作(Java版本)
一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...
- 如何定位Oracle数据库被锁阻塞会话的根源
首先再次明确下,数据库因为要同时保证数据的并发性和一致性,所以操作有锁等待是正常的. 只有那些长时间没有提交或回滚的事物,阻塞了其他业务正常操作,才是需要去定位处理的. 1.单实例环境 2.RAC环境 ...
- java 线程 Lock 锁使用Condition实现线程的等待(await)与通知(signal)
一.Condition 类 在前面我们学习与synchronized锁配合的线程等待(Object.wait)与线程通知(Object.notify),那么对于JDK1.5 的 java.util.c ...
- Android 死锁和重入锁
死锁的定义: 1.一般的死锁 一般的死锁是指多个线程的执行必须同时拥有多个资源,由于不同的线程需要的资源被不同的线程占用,最终导致僵持的状态,这就是一般死锁的定义. package com.cxt.t ...
- Xcode 锁终端
锁终端 输入: <1>cd /Applications/Xcode.app 回车 结果显示: Xcode.app 输入: <2>sudo chown -hR root:whee ...
- mysql 行级锁的使用以及死锁的预防
一.前言 mysql的InnoDB,支持事务和行级锁,可以使用行锁来处理用户提现等业务.使用mysql锁的时候有时候会出现死锁,要做好死锁的预防. 二.MySQL行级锁 行级锁又分共享锁和排他锁. 共 ...
随机推荐
- log4cpp
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 12.18 aop身份验证
对所有卖家页面进行身份验证,采用aop编程 步骤:1.获得request 2.查询cookie 3.查询redis 4.查询不通过时,采用抛出异常,捕捉异常,再异常里加入跳转到登陆页面的方法 准备工作 ...
- python中pickle模块与base64模块的使用
pickle模块的使用 pickle模块是python的标准模块,提供了对于python数据的序列化操作,可以将数据转换为bytes类型,其序列化速度比json模块要高. pickle.dumps() ...
- YXY-压测
1.首先介绍一下组件Synchronizing Timer Number of Simulated users to Group by:集合点集合够N个用户开始并发 Timeout in millis ...
- Swift 开源项目精选
Swift 开源项目精选 站在个人的角度,并基于<Swift 语言指南>,针对开源项目做了一个甄别.筛选.当然,由于个人能力及涉足范围所限,还远远不够,其中肯定有偏颇及不足,还望同学们多多 ...
- 常见Git操作及关键知识点
一.Git三区概念 工作区 (work dict) 暂存区(stage)(add 是添加到当前的暂存区) 提交区(就是当前工作的分支master分支或者branches分支) git 所有操作都是基于 ...
- try...except包含try...finally方法
def f(): try: try: f = open(raw_input('>')) print f.readlines() finally: f.close() #1/0 except Ex ...
- NET MVC 升级到5.1后,View视图中代码报错
使用nuget将项目中MVC4 升级到MVC5,之后项目还可以正常编译运行, 但View视图中相关的很多代码都报错,比如: 1.@model找不到 2.@Html找不到,本该是System.Web.M ...
- 兼容iOs7的自定义alertView
转载请注明出处. 升级到ios7后,旧项目中使用的继承UIAlertView的自定义alertview无法正常显示了,无奈只好换思路去实现,改成从当前keywindow下创建要显示的alertview ...
- Java并发--线程间协作的两种方式:wait、notify、notifyAll和Condition
在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界 ...