zoukankan      html  css  js  c++  java
  • 多组抖动效果的图片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>

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

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

  • 相关阅读:
    42. Trapping Rain Water
    223. Rectangle Area
    645. Set Mismatch
    541. Reverse String II
    675. Cut Off Trees for Golf Event
    安装 VsCode 插件安装以及配置
    向上取整 向下取整 四舍五入 产生100以内随机数
    JS 判断是否为数字 数字型特殊值
    移动端初始配置,兼容不同浏览器的渲染内核
    Flex移动布局中单行和双行布局的区别以及使用
  • 原文地址:https://www.cnblogs.com/web001/p/8110865.html
Copyright © 2011-2022 走看看