JS模拟土豆弹窗——链式运动

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>JS模拟土豆弹窗——链式运动</title>
        <style>
            *{padding: 0; margin: 0;}
            body{ font-size: 12px; font-family: "微软雅黑"; overflow: hidden;}
            #foot{ width: 187px; padding-left: 10px; height: 34px; line-height: 34px; background: #f80; color: #fff; position: absolute; bottom: 0; right: /*0*/-154px; cursor: pointer;}
            #content{width: 197px; height: 280px; background: #ddd; position: absolute; right: 0; bottom: /*34*/-280px;}
            #close{float: right; padding: 0px 8px; font-size: 20px; background: #ccc; display: inline-block; cursor: pointer;}
        </style>
    </head>
    <body>
        <div id="box">
            <div id="content">
                <span id="close">×</span>
            </div>
            <div id="foot">展开</div>
        </div>

        <script>
        // 封装getStyle函数
        function getStyle(obj,attr){
            return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj,false)[attr];
        }

        // 封装完美运动框架startMove函数
        function startMove(obj,json,fnEnd){
            clearInterval(obj.timer);
            obj.timer = setInterval(function(){
                var bStop = true;
                for(var attr in json){
                    var cur = 0;
                    if(attr == ‘opacity‘){
                        cur = Math.round(parseFloat(getStyle(obj,attr))*100);
                    }else{
                        cur = parseInt(getStyle(obj,attr));
                    }

                    // 缓冲运动,向上/下取整
                    var speed = (json[attr] - cur)/6;
                    speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);

                    if(cur != json[attr]){bStop = false;}
                    if(attr == ‘opacity‘){
                        obj.style.filter = ‘alpha(opacity:‘+ (cur + speed) +‘)‘;
                        obj.style.opacity = (cur + speed)/100;
                    }else{
                        obj.style[attr] = cur + speed + ‘px‘;
                    }
                }
                if(bStop){
                    clearInterval(obj.timer);
                    fnEnd && fnEnd();
                }
            },30);
        }
        </script>
        <script type="text/javascript">
            window.onload = function(){
                var oCon = document.getElementById(‘content‘);
                var oClose = document.getElementById(‘close‘);
                var oFoot = document.getElementById(‘foot‘);

                oFoot.onclick = function(){
                    oFoot.innerHTML = ‘收起‘;
                    startMove(oFoot,{right:0},function(){
                        startMove(oCon,{bottom:34});
                    });
                };

                oClose.onclick = function(){
                    startMove(oCon,{bottom:-280},function(){
                        startMove(oFoot,{right:-154});
                        oFoot.innerHTML = ‘展开‘;
                    });
                };
            };
        </script>
    </body>
</html>
时间: 2024-08-12 15:43:53

JS模拟土豆弹窗——链式运动的相关文章

HTML+JavaScript实现链式运动特效

在学习js的过程中,发现这家伙做特效真是不错,虽然说目前水平还不够,不过也能写点简单的效果.今天分享一个简单的运动框架,然后利用这个框架实现简单的链式运动特效. 1.move.js 在运动框架中,主要进行长宽变化和透明度的变化.长宽的变化可以实现DIV的体积运动变化效果,透明度的话主要是在鼠标移入移出事件中添加淡入淡出的效果.我将这个简单的运动框架封装到一个单独的js文件中,方便调用. 先看看代码: <span style="font-family:KaiTi_GB2312;"&

Javascript 链式运动框架——逐行分析代码,让你轻松了运动的原理

所谓链式运动,就是一环扣一环.我们的很多运动实际上来说指的就是分阶段的,第一个阶段动完,下个阶段开始动.这个链式运动框架就是用来处理这些问题的. 我们先来看下之前的运动框架,以下是Javascript 代码 function getStyle(obj, name) { if (obj.currentStyle) { return obj.currentStyle[name]; } else { return getComputedStyle(obj, null)[name]; } } funct

链式运动的一些思路

前面的一些运动都是只完成一种运动,完成后一般就不会在增加其他运动,在实际中可能会有多种情况,如果想要一个对象完成一个运动后,再接着完成另外一个运动,这时可以考虑用链式运动框架实现一些功能,最主要的还是在定时器封装的函数里再增加一个参数作为传值,一般这个参数是函数,下面这个小例子: function setMove(obj,arr,iTarget,fun){ //设置多个参数,第二个参数为要改变的样式,链式运动框架 var timer = null; clearInterval(obj.timer

运动回调-链式运动

1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>无标题文档</title> 6 <style> 7 #div1 {width:100px; height: 100px; background: red;

js实现方法的链式调用

假如这里有三个方法:person.unmerried();person.process();person.married();在jQuery中通常的写法是:person.unmerried().process().married();而在js中要实现链式调用,只需在类中的每个方法中通过this关键字返回对象实例的引用. function Person(){}; Person.prototype.status =false; Person.prototype.married =function()

原生JS实现jquery的链式编程。

这是我根据之前遇到的一个面试题,题目:用原生JS实现$("#ct").on("click",fn).attr("id"). 然后看了篇jquery源码分析(http://www.cnblogs.com/aaronjs/p/3279314.html),自己写出来的一个实现,选择器用的querySelector,关于链式编程也只是返回this而已,这也算是自己看jquery源码解决的第一个问题吧,继续加油. 现在想来当年面试官确实没说错,我jquer

原生 js 模拟 alert 弹窗

复制头部的 js 代码到你的 js 文件的任何地方,调用Chef.alert方法传入相应的参数即可并没有什么功能,只是一个提示的作用,可能样式比 alert 的弹窗好看点,css是写在js里的,只要你会写 css 就可以自行修改样式. Chef.alert 使用说明: 此方法有6个参数: 1,title 弹出框的标题 2,content 弹出框的提示文字也可以以字符串的形式传入任何html标签, 3,firm 弹出框按钮的文字 4,offset 弹出框距离顶部的位置,左右默认水平居中, 5,wi

链式运动实例 运动框架应用 微博

源代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Con

JS 联接函数(链式函数)

Date.prototype.addDay = function (value) { this.setDate(this.getDate() + value); return this;}Date.prototype.addMonth = function (value) { this.setMonth(this.getMonth() + value); return this;}Date.prototype.addYear = function (value) { this.setFullYe