JS入门第七周复习,JQ封装ajax,Bootstrap,scss/less

170 阅读5分钟

JQ事件

JQ如何绑定事件:

$("xx").事件名(callback)

原生JS中 window.onload 和 $(document).ready(callback) 有什么区别

1window.onload:一个页面只能使用一次,执行效率也很低下:等待所有的资源(HTMLCSSJS、图片、视频、音频...)加载完毕后才会执行,可以说是最后才执行的代码
2、$(document).ready(callback):一个页面可以用多个:执行效率相对较高,只等待DOM树加载完毕就会执行
	简写:1、$().ready(callback)
	      2、$(callback);//工厂函数的第四个功能

滚动监听事件

	作用:
	  1、做出更好看更多的特效
	  2、滚动监听搭配上ajax(往下滚动都显示出更多的新内容):效果更好

	如何使用:
	  $(window).scroll(()=>{
		//1、获取滚动条当前的位置:$(window).scrollTop();

		//2、获取xx距离页面顶部有多远:$("xx").offset().top/left;
	  })

JQ动画:

1、预定义动画:391、隐藏hide和显示show:
		$("xx").api(time,callback);
			特殊:
			  1、如果没有传入任何一个参数,不带有动画,瞬间显示和瞬间隐藏
			  2、如果带有事件参数,则具有动画,同时修改元素的宽度和高度和透明度
			  3、回调函数在动画执行完毕后才会执行 - 屌

		$("xx").toggle(time,callback); === show+hide;程序员连判断都不用自己写了

2、滑动效果:隐藏slideUp和显示slideDown:
		$("xx").api(time,callback);
			特殊:
			  1、如果没有传入任何一个参数,其实也会带有动画,只不过速度很快
			  2、如果带有事件参数,则具有动画,同时修改元素的高度
			  3、回调函数在动画执行完毕后才会执行 - 屌

		$("xx").slideToggle(time,callback); === slideUp+slideDown;程序员连判断都不用自己写了

3、淡入淡出:隐藏fadeOut和显示fadeIn:
		$("xx").api(time,callback);
			特殊:
			  1、如果没有传入任何一个参数,其实也会带有动画,只不过速度很快
			  2、如果带有事件参数,则具有动画,同时修改元素的高度
			  3、回调函数在动画执行完毕后才会执行 - 屌

		$("xx").fadeToggle(time,callback); === fadeOut+fadeIn;程序员连判断都不用自己写了

4、自定义动画:
	1、并发动画:所有动画一起执行
		$("xx").animate({
			"css":"新值",
			...
		},time,callback)

	2、排队动画:做完一个在做下一个
		$("xx").animate({
			"css":"新值"
		},time,callback).animate({
			"css":"新值"
		},time,callback).animate({
			"css":"新值"
		},time,callback).animate({
			"css":"新值"
		},time,callback).animate({
			"css":"新值"
		},time,callback).animate({
			"css":"新值"
		},time,callback)


	特殊:1、animate方法不支持颜色相关和transform转换相关的操作
		解决:1、不用animate,用css代替,但是就会损失掉动画执行完毕的回调函数
		      2、jQueryUI会对animate方法进行增强操作
	      2、只要是动画就有可能会排队,有的情况要记得停止动画
			$("xx").stop().animate()

1、jQueryUI

基于Jquery的开源网页用户界面代码库 - 提供了HTML、CSS、JS的一个组件/插件:跟组件差不多,但是具有JS功能

如何使用jQueryUI:固定步骤
	1、下载jQueryUI 
	2、在页面中引入 - JS顺序千万不能乱:因为jQueryUI是基于jquery的
		<link rel="stylesheet" href="jquery-ui-1.13.0.custom/jquery-ui.css">
		<script src="jquery-ui-1.13.0.custom/external/jquery/jquery.js" type="text/javascript" charset="utf-8"></script>
		<script src="jquery-ui-1.13.0.custom/jquery-ui.js" type="text/javascript" charset="utf-8"></script>
	3、挑选出需要的/喜欢的插件,直接放到项目中
	4、根据UI提供给你的设计图,修改样式 - 修改不成功,只有一个可能:权重不够!
	5、利用ajax去获取数据库中的数据,进行页面的数据渲染
	6、千万别忘了在最后调用jQueryUI提供的xx方法实现效果

jQuery封装的ajax

一定要先引入jquery.js:简化DOM、事件、ajax,带来了一些JS没有提供过的新东西 一切的框架:目的都是为了简化DOM开发

第一层:最麻烦,最无敌
$.ajax({//配置信息,其实是ES6提供的一个新语法,叫做解构赋值
	url:"xx.php",//必写 - 要连接的服务器的路径
	type:"GET/POST",//不是必写 - 默认值:GET
	data:"key=value&...",//不是必写 - 看服务器端需不需要接受前端传到后端的消息
	dataType:"HTML/XML/JSON",////不是必写 - 默认值为HTML,说白了json字符串
	success:data=>{ //必写,成功后才会执行的回调函数,并且会自动帮你得到服务器端响应的消息
		data->xhr.responseText
	}
})

第二层:再次简化:3API,缺点:不能做跨域操作
1、$("xx").load("url","data",callback); - 垃圾
	缺点:
		1、数据会直接放在xx元素上,不能把数据给用户看
		2、无法设置get或者post请求类型
		3、无法给传回来的数据解开包装

2、$.get("url","data",callback,"JSON");

3、$.post("url","data",callback,"JSON");


第三层:特殊功能:跨域:你可以去拿别人电脑上的数据库和服务器,合作开发
同源策略:浏览器的保护机制,访问时服务器要求【协议、域名、端口号】相同的情况才可以,只要有一个不同则会触发此保护机制
跨域:跨过同源策略,能够访问别人的电脑上的东西:
	技术:
	  1JSONP
	  2CORS - 后端
	  3、反向代理

	前端:jQuery封装的第三层ajax自带JSONP技术,跨域技术,帮助跨域
		$.getJSON("url?自定义键名=?","data",callback);

		注意:
		  1、只能是GET请求
		  2、不需要脱衣服
		  3、?是固定写法,jQuery中JSONP会自动将?进行赋值,赋值为一个通行令函数 

	后端(PHP):
		echo $_GET["自定义键名"]."(".JSON_encode(数据库整理出来的JSON数据).")";


	沟通:
	  1、通行令的名字叫什么
	  2、你的ip完整的地址要给我:打开cmd:ipconfig - ipv4
	  3、前端还应该说些什么

git工具(9+) 对应 svn工具(1-)

git工具:分布式版本管理控制工具:分布式:人人都是客户端,人人都是服务器端(云端)
目的:就算我们在家里/多方合作开发
固定使用:
	0、注册gitee
	1、先安装:Git-2.18.0-64-bit - 命令行方式
	2、再安装:TortoiseGit-2.6.0.0-64bit.msi - 小乌龟(简化操作,并且带来了一些提示标志),一定要重启电脑
		注意:小乌龟要输入gitee的用户名和邮箱

	3、项目经理/组长:
		打开网站:gitee码云:https://gitee.com/?from=osc-index
		登录
		创建项目仓库
		把仓库地址发给对应的开发人员 https://gitee.com/daiyue0221/h52202.git

	4、开发人员
		1、拿着项目经理给你的仓库地址,把仓库拉取到本地:任意位置右键git bash here:
			git clone 仓库地址
		2、关闭掉git bash here,在项目仓库文件夹中再次打开git bash here
		3、开始进行项目开发/工作
		4、在下班之前,要提交到云端gitee:
			git add . - 文件提交到了本地
			git commit -m"必须写日志" - 文件提交到了git服务器
			git push origin master - 推送到云端
		5、第二天上班之前,更新一下
			git pull origin master - 更新

面试题:git的仓库地址:https://gitee.com/用户名/仓库名

Bootstrap

简洁、直观、强悍的前端开发框架,让web开发更迅速、简单。类似于jQueryUI,提供了HTML/CSS/JS,程序员只要复制+修改

      用于开发【响应式布局】、移动设备优先的 WEB 项目。
      目的:简化响应式开发
      重点:大部分都是直接复制,重点:1、栅格式布局  2、动态样式语言sass和less,静态样式语言css不是人写的

2、如果想要做出响应式布局必不可少的东西,即使有了bootstrap:
1、不用绝对单位(px,cm,mm),使用相对单位(rem+vw)
2、媒体查询@media
3、响应式图片,而不要直接给图片设置宽度为100%,导致图片失帧
4、元标签:<meta name="viewport">

但是不是所有的网站都适合做成响应式网页:比如电商

3、固定使用:
0、打开官方文档:
1、下载:
2、引入:
	<link rel="stylesheet" type="text/css" href="css/bootstrap.css"/>
	<script src="js/jquery-1.11.3.js" type="text/javascript" charset="utf-8"></script>
	<script src="js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
3、去挑选你喜欢的东西,复制
4、根据设计图进行样式的修改
5、根据数据渲染页面

4、bootstrap提供了三方面:提供了大概1000+个class,只需要看文档,而且还提供了css reset
1、css全局样式
2、组件
3、javascript插件



5、*****bootstrap栅格式布局方式 - 简化响应式布局开发
固定步骤:10步
1、必须放入一个父容器:<div class="container/container-fluid"></div>
2、再其中放入行:<div class="row"></div>
3、再其中放入列:<div class="col-*-*"></div>
4、第一个*:屏幕:bootstrap把屏幕分为了4种:col-lg(>=1200)/md(>=992)/sm(>=768)/xs(<=767)
5、第二个*:占的列宽,要占几份,bootstrap把一行等分为了12份
6、正是因为class支持写多个,可以设置某个div在不同屏幕,占比不同
7、更小的屏幕可以管住更大的屏幕,但是最大的屏幕只能管住自己,但是自己有一定有用自己的
	col-lg-*	只能管LG屏幕
	col-md-*	只能管LG/MD屏幕
	col-sm-*	只能管LG/MD/SM屏幕
	col-xs-*	管所有屏幕
8、可以设置某列在某个屏幕下隐藏:
	hidden-屏幕	只管当前屏幕
9、列可以设置偏移量:理解为向左顶出几份位置
	col-lg-offset-*	只能管LG屏幕
	col-md-offset-*	只能管LG/MD屏幕
	col-sm-offset-*	只能管LG/MD/SM屏幕
	col-xs-offset-*	管所有屏幕
10、栅格式布局是一个怪异盒模型:设置间距,绝对不能使用margin,使用边框设置间距
	标准盒模型:内容+内边距+边框+外边距
	怪异盒模型:内容+外边距

扩展:$sql="SELECT 字段名,... FROM 表名 ORDER BY id DESC LIMIT 开始位置,截取的个数;";

scss、less

静态样式语言:css,作为一门语言,并不称职,不具备语言的一些基础概念(变量、运算、循环、分支、函数...)
              所以,导致我们在开发和维护大型项目的时候极不方便
                根本就不是人写的:
                        1、是动态样式语言【编译】出来的
                        2、写起来太麻烦

1、动态样式语言:scss、less:在css的基础上,添加了新特性,目的:简化css开发
        常见动态样式语言:
                1、sass->*scss
                2、less
                3、stylus - 和css的语法差别太大
                scss和less,你只要会css,基本就会了

2、编译:浏览器只认识css,不认识其他的动态样式语言,动态样式语言=(编译)=>自动生成一个css,HTML真正引入的是css
        如何编译:
          1、vscode - 安装一个插件,easy sass,编写你的sass/scss只要一保存,就会自动生成一个css
          2、HBuilder - 安装一个插件
          3、网上还有很多很多的编译工具

3、学习:scss的新特性:
        1、*变量:
           创建:$变量名:值;
           特殊:1、使用时:$不能省略
                 2、不区分中划线和下划线
                 3、依然具有类似于我们js的作用域:全局变量和局部变量,如果你的某个变量出现在某个选择器中,则为一个局部变量

        2、*****嵌套:选择器可以进行嵌套
                语法:
                        .d1{
                                ...
                                .d2{
                                        ...
                                        .d4{
                                                ...
                                        }
                                }
                                +.d3{
                                        ...
                                }
                                &:hover{...}
                        }

                编译:
                        .d1{...}
                        .d1 .d2{...}
                        .d1+.d3{...}
                        .d1 .d2 .d4{...}
                        .d1:hover{...}

                特殊:
                  1、层级选择器:由自己来决定,如果省略不写,默认是后代选择器(空格)
                  2、&类似于javascript中this,&在那个大括号里面,就是指的谁 .nav>.container+ul~li>a:hover

        3、*引入/导入:
                @import "文件名";
                把多个scss汇总为一个css

        4、注释:多行注释:/*注释内容*/

        5、*****混合器:类似于javascript中函数:
                1、创建混合器
                        @mixin 混合器名($形参名:默认值,...){
                                css属性名:$形参名,
                                ...
                        }

                2、调用混合器
                        @include 混合器名($形参名:实参);

                特殊:
                  1、使用时,关键字别掉了
                  2、传参的顺序无所谓,并且不传实参,使用默认值
                  3、碰到重复的代码了,在提取出来封装成一个混合器

        6、继承:垃圾

        7、运算:尤其是颜色值运算,越往0靠近数字越小,就会越暗淡,数字越靠近f越大,就会越明亮

        8、也支持分支和循环,但是不推荐,scss目的:简化css


学完scss就意外着学完了less,几乎完全相同:
        1、变量:@变量名:值;
        2、混合器,不用任何关键字
        没了,其余都一模一样

扩展

git(9+):分布式版本管理控制工具:人人都是客户端,人人都是服务器端(云端) - 有可能被黑客攻击、破解
svn(1-):集中式版本管理控制工具:小乌龟操作:一个公司里,只有一台电脑是服务器端,其余人都是客户端(局域网使用),缺点:服务器坏了
        哪些公司:老公司,老项目,保密性要求极强的公司

        使用步骤:
          0、如果你是项目经理:安装svn服务器端:VisualSVN-Server-4.3.2-x64.msi
                1、为每一个参与此项目的员工创建一个账号
                2、创建项目仓库
                3、把账号和仓库地址发你
                4、统筹全局(监督、任务进度)

          1、开发者:安装小乌龟:TortoiseSVN-1.14.1.29085-x64-svn-1.14.1.msi
                1、任意位置右键svn checkout拉出/检出仓库
                2、开发
                3、下班之前,提交:右键svn commit,选中你修改的/创建的提交,记得写日志
                4、第二天,更新:右键svn update