添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

javascript写函数的时候,常常遇到一个函数还没有运行完就再次调用同一个函数的情况,而这种情况下就可能发生一些未预期的结果。

之前在javascript论坛上回答过一个问题, JS中图片抖动问题

它这个图片,mouseover时间会让它抖动一阵子,然后回到原来的位置,但是如果在它还没有抖动结束的时候,再去触发mouseover的时候,就会在原来的函数还没有执行完恢复到原地的时候再次执行,从而导致最终图片偏离原位。

<title></title> <style type="text/css"> img{width:150px; height:150px; top:50px; left:300px; } </style> <script> window.onload = function(){ function getStyle(obj,attr){ return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj)[attr]; function shake(obj,attr,endFn){ var arr = []; for(var i=20;i>0;i-=2){ arr.push(i,-i); arr.push(0); var num = 0; var origin = parseInt(getStyle(obj,attr)); obj.shake = setInterval(function(){ obj.style[attr] = origin + arr[num] + 'px'; num++; if(num == arr.length){ clearInterval(obj.shake); endFn && endFn(); },50) var img = document.getElementsByTagName("img")[0]; img.onmouseover = function(){ shake(this,'top'); </script> </head> <img src="http://avatar.csdn.net/2/9/2/3_liusaint1992.jpg"> </body> </html> 只要保证一次函数没有执行结束之前不再次执行该函数就可以了。 这里给出两种方法。
                window.onload = function(){
			function getStyle(obj,attr){
				return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj)[attr];
		        var shaking = false;
			function shake(obj,attr,endFn){
				if(shaking == true){
					return;
				shaking = true;
				var arr = [];
				for(var i=20;i>0;i-=2){
					arr.push(i,-i);
				arr.push(0);
				var num = 0;
				var origin = parseInt(getStyle(obj,attr));
				obj.shake = setInterval(function(){
					obj.style[attr] = origin + arr[num] + 'px';
					num++;
					if(num == arr.length){
						clearInterval(obj.shake);
						endFn && endFn();
						shaking = false;
				},50)
			var img = document.getElementsByTagName("img")[0];
			img.onmouseover = function(){
				shake(this,'top');
        var num = 0;
        var origin = parseInt(getStyle(obj,attr));
        obj.shake = setInterval(function(){
            obj.style[attr] = origin + arr[num] + 'px';
            num++;
            if(num == arr.length){
                clearInterval(obj.shake);
                endFn && endFn();
                // shaking = false;
                shake = backup;//抖动结束之后恢复
        },50)
 经测试,两种方法实现了同样的效果! 
 不知道还没有其他更好的方法可以实现同样的效果,甚至有更高的效率。 欢迎留言交流。 
                                    javascript 声明函数
JavaScript两种声明函数的方式,一个函数表达式定义函数,也就是我们说的匿名函数方式,一个函数语句定义函数,下面看代码:
/*方式一*/
var FUNCTION_NAME = function() { /* FUNCTION_BODY */};
/*方式二*/
function FUNCTION_NAME () { /* FUNCTION_BODY */}; 
方式一的声明方式是先声明后使用 
方式二的声明方式可以先调用,后声明
/*方式一:
 *先声明后使用
//f1();这里调用就会出错
var f1 = function
                                    在JavaScript中我们需要用到trim的地方很多,但是JavaScript没有独立的trim函数或者方法可以使用,所以我们需要自己写个trim函数来实现我们的目的。
以原型方式调用,即obj.trim()形式,此方式简单且使用方面广泛,定义方式如下:
 代码如下:
[removed]
* 删除左右两端的空格
String.prototype.trim=function()
     return this.replace(/(^\s*)|(\s*$)/g, ”);
* 删除左边的空格
String.
                                    <br />拦截器的实现原理很简单,就是动态代理,实现AOP机制。当外部调用被拦截bean的拦截方法,可以选择在拦截之前或者之后等条件执行拦截方法之外的逻辑,比如特殊权限验证,参数修正等操作。但是如果现在一个需求是,当外部调用拦截bean的候,不但要执行拦截当前方法,如果当前方法内部同调用了其他内部方法,也要被拦截。按照目前的拦截器实现逻辑,是无法拦截当前方法内部调用方法的,这样说有点抽象,看一个代码:<br />public class BeanA{
public void method1(){
       在开发基于 Spring 的应用的过程中碰到了一个让我困惑了好久的问题,我在一个 Service 类的 doSomething1() 方法中通过
this.doSomething2(); 语句调用了同一个类中的 doSomething2 方法运行通过调试发现
                                    js阻止函数连续执行一、问题描述二、实现思路三、代码实现1.不需要传递参数2.传递参数
一、问题描述
当一些情况下,我们不希望我们的js方法被连续的执行,比如说登录按钮的点击事件,我们不希望用户恶意的点击出现一些意外情况。还有一些vue中的自定义事件传值函数,我们希望其不被连续触发,而是接收其最后一次触发的值
二、实现思路
我们可以在每次事件触发将我们的方法增加一个器,当然增加之前要进行一个判断,如果已有定器说明已经处在执行队列中,清除其定器,让其继续等待执行。当定结束执行需要触发的方法
                                    一个线程或者函数或者进度条未执行就马上执行一个出现崩溃,使用QTimer::singleShot阻塞一下,再执行一个函数,
QTimer::singleShot(10, [&]
 ;//写想要执行函数
                                    }一旦执行到return代表函数结束,返回结果!如果没有执行return,函数执行也会返回结果,结果就是undefined}}function(x){…}这是一个匿名函数,但是可以把结果赋值给abs,通过abs就可以调用函数!方式一和方式二等价假设在函数体中声明,则在函数体外不可以使用(非要想实现的话,后面可以研究一下闭包)}x = x + 2;在es6之前,怎么定义常量:只要用全部大写字母命名的变量就是常量,建议不要修改这样值。..............................
&lt;script&gt;
     //加载的规则,先定义 var function(从上往下),后执行,除了定义代码之外,都是执行代码(从上往下),简称变量提升
     //请按照顺序写出答案
     fn(); //3:调用 fn
     var  a={}; ...
//在间段08:00:00——17:00:00不可以调用
    public static boolean checkPeriod() throws Exception{
        //现在间
        Calendar calendar = Calendar.getInstance();
        Date nowDate = calendar.getTime();
事件循环:JS 会创建一个类似于 while (true) 的循环,每执行一次循环体的过程称之为 Tick。每次 Tick 的过程就是查看是否有待处理事件,如果有则取出相关事件及回调函数放入执行栈中由主线程执行。待处理的