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.等等等很多细节
问题很多,发出来是希望作为反面教材,同时希望有人能够一起重写,然后得以共同进步。不要喷哈,当时作为刚学问题很多的,我也是原封不动发出来。
发这个主要是我觉得也许错误性案例的共同讨论,更有进步意义,能学习到先驱们的写法,同时也存在更多互动。先驱们,该出力的时候到了,在此静候。
jquery 手写一个简单浮窗的反面教材的更多相关文章
- JQuery手写一个简单的分页
效果图: 大概思路:使用ul进行初始布局,每一次点击事件改变li里的值.完整的代码在gitup上:https://github.com/anxizhihai/Paging.gitcss部分: html ...
- JQuery手写一个简单的轮播图
做出来的样式: 没有切图,就随便找了一些图片来实现效果,那几个小星星萌不萌. 这个轮播图最主要的部分是animate(),可以先熟悉下这个方法. 代码我放到了github上,链接:https://gi ...
- 利用SpringBoot+Logback手写一个简单的链路追踪
目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简 ...
- 手写一个简单的ElasticSearch SQL转换器(一)
一.前言 之前有个需求,是使ElasticSearch支持使用SQL进行简单查询,较新版本的ES已经支持该特性(不过貌似还是实验性质的?) ,而且git上也有elasticsearch-sql 插件, ...
- 手写一个简单的starter组件
spring-boot中有很多第三方包,都封装成starter组件,在maven中引用后,启动springBoot项目时会自动装配到spring ioc容器中. 思考: 为什么我们springBoot ...
- 手写一个简单的HashMap
HashMap简介 HashMap是Java中一中非常常用的数据结构,也基本是面试中的"必考题".它实现了基于"K-V"形式的键值对的高效存取.JDK1.7之前 ...
- 手写一个简单到SpirngMVC框架
spring对于java程序员来说,无疑就是吃饭到筷子.在每次编程工作到时候,我们几乎都离不开它,相信无论过去,还是现在或是未来到一段时间,它仍会扮演着重要到角色.自己对spring有一定的自我见解, ...
- 手写一个简单版的SpringMVC
一 写在前面 这是自己实现一个简单的具有SpringMVC功能的小Demo,主要实现效果是; 自己定义的实现效果是通过浏览器地址传一个name参数,打印“my name is”+name参数.不使用S ...
- socket手写一个简单的web服务端
直接进入正题吧,下面的代码都是我在pycharm中写好,再粘贴上来的 import socket server = socket.socket() server.bind(('127.0.0.1', ...
随机推荐
- 00003-aspose for java 生成水印刻章等,可转为word,pic,pdf
对应java代码: package com.yoooya.ytp.utils.doc; import com.aspose.words.Document; import com.aspose.word ...
- vue+express上传头像到数据库中img的路径
项目结构 express中间件指定静态资源目录 app.use("/static",express.static(path.join(__dirname,"/public ...
- spark机器学习从0到1机器学习工作流 (十一)
一.概念 一个典型的机器学习过程从数据收集开始,要经历多个步骤,才能得到需要的输出.这非常类似于流水线式工作,即通常会包含源数据ETL(抽取.转化.加载),数据预处理,指标提取,模型训练与交叉 ...
- PHP+Apache+MySQL+phpMyAdmin安装和配置
下载网址: PHP:http://windows.php.net/download 版本: php-5.6.31-Win32-VC11-x64.zip Apache:https://www.a ...
- hdu3397 Sequence operation 线段树
hdu3397 Sequence operation #include <bits/stdc++.h> using namespace std; ; struct node { /// l ...
- for、forEach、for in、for of用法
循环遍历数组或者对象,for.forEach.for in . for of 使用最多 for循环 自Javascript诞生时就有,遍历数组,for 循环的语法如下: for (语句 1; 语句 2 ...
- Java Number & Math类
java Number类 Java的内置数据类型有byte.int.long.double等. Java 语言为每一个内置数据类型提供了对应的包装类. int对应的包装类为Integer long对应 ...
- [!] Unable to find a pod with name, author, summary, or description matching `AFNetworking`
大量的答案是删除~/Library/Caches/CocoaPods/search_index.json 没有起作用 有用答案: https://blog.csdn.net/qq_35827461/ ...
- python基本数据类型:字符串及其方法(一)
大小写转换类 方法一:capitalize()首字母大写字符串 name='hatusne miku' name1=name.capitalize() print(name,name1) 方法二:ti ...
- 【python爬虫】解决歌荒,下歌利器
python下载图片,mp3,想必很多人都早已耳闻,今天给大家来点不一样的, 让你下载高逼格高品质,带进度条,实时显示下载速度 详见源码:https://www.kesci.com/home/proj ...