• 多组抖动效果的图片js封装


    昨天提到了单个图片的抖动效果,那么今天来写一下多组图片实现抖动效果的封装,这种效果也许在日常的项目中会用到,简单封装一下,就不用每次都写差不多一样的代码了,好的来看html和css的布局,其实很简单就是两张图片:

    <style>
            img{position:absolute; top:200px; left:300px; width:180px;}
            #img1{left:560px;}
    </style>
    
    <body>
    <!--需求:点击图片,图片会抖动几下-->
    <img id="img" width="180" src="img/pic1.jpg"/>
    <img id="img1" width="180" src="img/pic2.jpg"/>
    </body>

    js代码如下:

    <script>
        //兼容不同浏览器获取行间样式
        function getStyle ( obj, attr ) {
            return obj.currentStyle?obj.currentStyle[attr] : getComputedStyle( obj )[attr];
        }
    
        window.onload=function(){
            //第一步先追加多个div
            var oImg=document.getElementById("img");
            var oImg1=document.getElementById("img1");
            //添加点击事件
            oImg.onclick=fn;
            oImg1.onclick=fn;
                //两个点击效果相同,那么就可以重用代码了
                function fn(){
                    var _this=this;
                    shake(_this,'left',function(){//这里的回调函数实现的效果就是上下抖动
                        shake(_this,'top'); //注意:若没有任何声明的情况下,回调函数里不能直接用this,所以 _this=this不能少
                    })
                }
            //抖动效果的代码封装需要的参数也就是对象,方向,回调函数
            function shake(obj,attr,endFn){
                var pos=parseFloat(getStyle(obj,attr));
                var arr=[];
                var num=0;
                var timer=null;
                //抖动频率de数组,一正一负[20,-20,18,-18...]
                for(var i=20;i>0;i-=2){
                    arr.push(i,-i)
                }
                arr.push(0);
                //启用定时器前先关闭定时器
                clearInterval(obj.timer);
                obj.timer=setInterval(function(){
                    //让图片的left跟随数组里的值变化就会实现左右移动效果
                    obj.style[attr]=pos+arr[num]+"px";
                    num++;
                    if(num===arr.length){
                        clearInterval(obj.timer);
                        endFn && endFn();
                    }
                },50)
            }
        };
    
    </script>

    好了,就是这样了,我写的比较啰嗦,也是希望看的比较明白,这只是两张图片点击之后的抖动效果,若是多组也是适用的,当然对于其他对象,比如说表单等等也都试用,还是那句话万变不离其宗,可以多试试!

    好了,今天就到这里了!加油!

  • 相关阅读:
    Ubuntu 配置IP地址方法
    ubuntu server 16.04安装GPU服务器
    Ubuntu 自动获取ip地址
    Typedef 用法
    linux mount命令详解(iso文件挂载)
    specrate 与specspeed 的区别
    SPEC CPU 使用简介
    编译错误you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check)
    SPEC CPU 2006编译perl 出错:undefined reference to `pow'
    'gets' undeclared here (not in a function)
  • 原文地址:https://www.cnblogs.com/web001/p/8110865.html
Copyright © 2020-2023  润新知