zoukankan      html  css  js  c++  java
  • jquery 手写一个简单浮窗的反面教材

    前言

    初学jquery写的代码,陈年往事回忆一下。

    正文

    介绍一下大体思路

    思路:

    1.需要控制一块区域,这块区域一开始是隐藏的。

    2.这个区域需要关闭按钮,同时我需要写绑定事件,关闭的时候让这块区域消失。

    3.需要动态控制遮罩层。

    4.当窗体滚动的时候,我需要去让这块移动,那么这块区域的定位应该是绝对定位的。

    5.当窗体大小变化的时候,我需要将这个登录从新定位

    说了这么多其实就是一个简单的效果:

    嗯,按照这个大体的思路,我当时写下这样一份充满了bug性代码。

    //遮罩层
    $(function () {
        var oBtn = $('#show');
        var popWindow = $('.popwindow');
        var oClose = $(' .form a.close');
        var browserwidth = $(window).width();
        var browSerHeight = $(window).height();
        //left的值=浏览器可视区域/2-弹出窗口的区域/2
        //top的值=浏览器可视区域/2-弹出窗口的区域/2
        var popWindowWidth = popWindow.outerWidth(true);
        var popWindowHeight = popWindow.outerHeight(true);
        var positionLeft = browserwidth / 2 - popWindowWidth / 2;
        var positionTop = browSerHeight / 2 - popWindowHeight / 2;
        var browserScollTop = $(window).scrollTop();
        var zhezhaowidth = $(document).width();
        var zhezaoheight = $(document).height();
        var oZZC = '<div class="zhezaocheng"><div>';
        //显示窗口事件
        oBtn.click(function () {
            popWindow.show().animate({
                'left': positionLeft + 'px',
                'top': positionTop + 'px'
    
            }, 500);
            $('body').append(oZZC);
            $('.zhezaocheng').width(zhezhaowidth).height(zhezaoheight);
        });
        //关闭按钮事件
        oClose.click(function () {
            popWindow.hide();
            $('.zhezaocheng').remove();
        });
        $(window).scroll(
                function () {
                    if (popWindow.is(':visible')) {
                        browserScollTop = $(window).scrollTop();
                        var positionTop = browSerHeight / 2 - popWindowHeight / 2 + browserScollTop;
                        popWindow.animate({
                            'left': positionLeft + 'px',
                            'top': positionTop + 'px'
    
                        }, 500).dequeue();//清除前面的运动函数
                    }
                }
        )
        $(window).resize(function () {
            if (popWindow.is(':visible')) {
                var browserwidth = $(window).width();
                var browSerHeight = $(window).height();
                var positionLeft = browserwidth / 2 - popWindowWidth / 2 ;
                var positionTop = browSerHeight / 2 - popWindowHeight / 2 + browserScollTop;
                popWindow.animate({
                    'left': positionLeft + 'px',
                    'top': positionTop + 'px'
    
                }, 500).dequeue();
            }
        })
    })
    

    在现在看来这是一份很有问题的代码;

    问题如下:

    1.没有将初始化提取出来,产生了冗余代码,有很多冗余的参数。

    2.没有将提取显示登录界面的元素采用配置文件暴露出来,比如说popwindow 区域,show 事件,oClose 事件等等等。

    3.充满了中文命名的问题

    4.没有良好的封装

    5.等等等很多细节

    问题很多,发出来是希望作为反面教材,同时希望有人能够一起重写,然后得以共同进步。不要喷哈,当时作为刚学问题很多的,我也是原封不动发出来。

    发这个主要是我觉得也许错误性案例的共同讨论,更有进步意义,能学习到先驱们的写法,同时也存在更多互动。先驱们,该出力的时候到了,在此静候。

  • 相关阅读:
    去除文件中的空行
    数据分析 numpy matplotlib
    程序员
    c#
    java
    微信小游戏
    小游戏开发手册
    模板
    微信小程序小程序代码构成(.json .js .wxss .wxml)
    微信程序
  • 原文地址:https://www.cnblogs.com/aoximin/p/13080656.html
Copyright © 2011-2022 走看看