html+css+js+jQuery学习笔记(三)

简介: html+css+js+jQuery学习笔记

3.2 jQuery中的节点操作



3.2.1 append就是往最后添加:

父亲.append(儿子)

$("#box").append("<p>么么哒</p>");

jQuery节点操作非常简单,不用createElement的过程了。实际上内部就是用innerHTML来给你加进去的。


特别的,如果我们想先创建一个孤儿节点,给这个孤儿节点加样式、加监听、加动画,可以的,那么创建孤儿节点,也是用$()函数。 $()不仅仅能够选择页面上的节点,也能够创建新的孤儿节点:

var $obj = $("<p></p>");
$obj.css("background-color","red");   //jQuery对象就可以直接调用css方法
$("#box").append($obj);

3.2.2 appendTo 表示被动, 儿子appendTo父亲

$("<p>么么哒</p>").appendTo($("#box"));

prepend 插入为第一个儿子, prependTo表示被动

$("<p>么么哒啊!</p>").prependTo($("#box"));

3.2.3 after 插入兄弟  before 插入兄弟

比如HTML结构:

<div id="box">
<p>哈哈</p>
<p>嘻嘻</p>
</div>

执行代码:

$("p").after("<h3>我是h3</h3>");

HTML将变为:

<div id="box">
<p>哈哈</p>
        <h3>我是h3</h3>
<p>嘻嘻</p>
        <h3>我是h3</h3>
</div>

3.2.4 insertBefore、insertAfter

比如HTML结构:

<div id="box">
<p>000</p>
<p>111</p>
<p>222</p>
<p>333</p>
<p>444</p>
<p>555</p>
</div>

代码:

$("<p>么么哒</p>").insertBefore($("p")[2]);

HTML结构将变为:

<div id="box">
<p>000</p>
<p>111</p>
        <p>么么哒</p>
<p>222</p>
<p>333</p>
<p>444</p>
<p>555</p>
</div>

3.2.5 wrap、warpAll

在外面包裹

$("a").wrap("<span></span>");  //每个a都用span包裹起来
$("a").wrapAll("<span></span>");  //所有a都用span包裹起来

3.2.6 empty()

$("p").empty();

等价于

$("p").html(“”);

3.2.7 remove()

删除页面上所有p标签:

$("p").remove();

3.2.8 clone()

克隆节点


克隆ul li里面的第1个,然后ul追加:

$(“ul”).append($(“ul li”).eq(0).clone());

反过来:

$(“ul li”).eq(0).clone().appendTo($(“ul”));

延时函数


!!Delay(时间)


● DOM0级的方式,只能监听冒泡阶段。不能有同名的事件,会覆盖。this是触发事件的这个元素。高版本浏览器会冒泡到window,低版本浏览器冒泡到document。


● DOM2级的方法,addEventListener(),可以自由设置冒泡、捕获。第三个参数是use capture ,true就是捕获,false就是冒泡。事件名不加on,可以有同名事件,会顺序执行,不覆盖。this是触发事件的这个元素。会冒泡到window。


● IE6、7、8是自己的方法,attachEvent(),只能监听冒泡阶段。没有第三个参数。事件名写on。可以有同名事件,会反着执行(事件栈)。this很蛋疼,是window而不是触发事件的这个元素。事件仅仅冒泡到document。


三、事件对象

任何的事件处理函数,我们的浏览器、JS引擎会默认往里面传一个实参,就是事件对象。


通常用形参event来接收:

oDiv.onclick = function(event){
console.log(event);
}

image.png


所有这次事件的细节,都被封装到了这个event对象里面。


比如clientX、clientY就是这次点击的位置。


1.1通用事件对象属性和方法

oDiv.mouse事件 = function(event){


event = event || window.event;//解决event不兼容问题一定要记住


}


● event.type 返回事件的类型,没有on, 比如”click”


● event.target 返回你点击的最小的那个元素,即使这个元素身上没有监听,也是返回它


● event.currentTarget 返回自己,this一定和event.currentTarget是一个元素,都是自己


● event.bubbles 返回一个布尔值,表示这个事件是否冒泡

oDiv.onmouseover = function(event){
console.log(event.bubbles); 
}

比如onmouesover的event.bubbles就是true;


但是onmouseenter的 event.bubbles就是false;


简称onmouseover冒泡,onmouseenter不冒泡。


Onmouseover onmouseout


这两个巨容易出现错误 尤其是我做那个京东放大镜一样


小放大镜窗口代码设想不应该出现在盒子外面,也不能移动出来


定义了onouseout以后play none 但是没有消失 我丢了淦


后来才发现 我定义的是大盒子的onmouseout小盒子也是大盒子的一部分就相当于鼠标没有从小盒子放大镜里面出来的话 他会一直不触发onmouseout事件


困扰了1天乱写突然发现问题出在哪里淦

image.png


onmouseover、onmouseenter IE6、7、8、9、10全面兼容!反而是chrome30之前不兼容。所以现在可以看做全线兼容,就嗷嗷用就完事儿了。


● stopPropagation() 停止传播事件流

event.stopPropagation();

● preventDefault() 阻止默认事件

event.preventDefault();

3.2 clientX、clientY、screenX、screenY

全线兼容,表示事件触发这一瞬间的鼠标位置。


clientX表示鼠标的位置,距离浏览器窗口左边边的距离


clientY表示鼠标的位置,距离浏览器窗口上边边的距离


screenX表示鼠标的位置,距离屏幕左边边的距离


screenY表示鼠标的位置,距离屏幕上边边的距离


3.3 IE中的event

IE浏览器的event对象是window对象的属性,而不是事件的实参。


$(this).addClass(“cur”).silblings().removeClass(“cur”);

页面滚动 窗口滚动


Onscroll

//当窗口卷动的时候发生这个事件
window.onscroll = function(){
}

卷动值:scroll

document.body.scrollTop || document.documentElement.scrollTop
window.onscroll = function(){

高级浏览器认为卷动值是body的属性,


IE6、7、8认为卷动值是html标签的属性


如何得到HTML标签呢,JS中document.documentElement就是html标签


h1.innerHTML=document.body.scrollTop||document.documentElement.scrollTop;
}


卷动值不是可读的,也可以设置。甚至是动画。


元素的尺寸、位置:


oDiv.offsetLeft
oDiv.offsetTop
oDiv.clientWidth //width+padding
oDiv.clientHeight
oDiv.offsetWidth //width+padding+border
oDiv.offsetHeight


event对象的鼠标当前位置


event.clientX //鼠标到视口




document.body.childNodes[a].className.indexOf("jisuan")!=-1 检索标签名字中是否含有“jisuan”// 必须配合前面的判断标签类型使用 因为页面里面可能含有未定义的text类型


Unfinde未定义 !!!Unfinde的话后面的indexOF就不能使用了 并且childNodes是亲儿子节点啊啊啊啊!!!!!!!


这个方法遍历得到亲儿子巨好用


有一个小函数,判断这个东西是不是NaN,

isNaN()

实验证明:

isNaN(NaN)   //true
isNaN(“NaN”)  //true
isNaN(undefined) //true
event.clientY
event.screenX //鼠标到屏幕
event.screenY
event.offsetX //说是不兼容火狐,但现在火狐兼容,到最小盒子的左上角
event.offsetY //这两个事件冒泡触发外层鼠标事件
窗口的
document.body.scrollTop || document.documentElement.scrollTop  //卷动值
document.body.clientWidth || document.documentElement.clientWidth  //视口宽度
if(document.body.childNodes[a].nodeType==1&&document.body.childNodes[a].className.indexOf("jisuan")!=-1)
     {
                  tar.push(bodych[a]);
     }
document.body.childNodes[a].nodeType==1 判断节点类型是否为1 (标签)
原生js animated scrollAnimate运动框架
function scrollAnimate(target,time){
var frameNumber = 0; //帧编号
var start = document.body.scrollTop || document.documentElement.scrollTop;  //起点
var tance = target - start;
var interval = 10;
var maxFrame = time / interval;
clearInterval(timer);
var timer = setInterval(function(){
frameNumber++;
if(frameNumber == maxFrame){
clearInterval(timer);
}
//第一个参数t表示当前帧编号
//第二个参数b表示起始位置
//第三个参数c表示变化量
//第四个参数d表示总帧数
//返回当前帧应该在哪儿
document.body.scrollTop = document.documentElement.scrollTop = CubicEaseInOut(frameNumber,start,tance,maxFrame);
},10);


op.onmousedown = function(event){
var deltaX = event.clientX - op.offsetLeft;
var deltaY = event.clientY - op.offsetTop;
document.onmousemove = function(event){
var x = event.clientX - deltaX;
var y = event.clientY - deltaY;
if(x < 0){
 x= 0;
}else if(x > odiv.clientWidth - op.clientWidth){
x = odiv.clientWidth - op.clientWidth
}
op.style.left = x + "px";
}
document.onmouseup = function(){
document.onmousemove = null;
}
}

拖拽模型,脑子中一下子要想到模型:


如果想要得到鼠标在当前这个盒子中的位置:

event.offsetX;
event.offsetY;

挺好用的,新版本火狐嗷嗷好用。如果为了怕一些版本浏览器不兼容,或者为了防止冒泡干扰:


event.clientY - (getAllTop(oDiv) - scrollTop)


窗口更改尺寸事件onresize


window.onresize = function(){
}

窗口的尺寸

document.documentElement.clientWidth
document.documentElement.clientHeight

二、滚轮事件Onmousewheel


event参数最最重要的事就event.wheelDelta属性,表示滚动的方向。这是浏览器的规定:


鼠标往上滚, 120


鼠标往下滚, -120


如果滚动快速,可能出现120的整数倍,正负性是一样的。


onmousewheel事件的触发,是滚轮滚动一“咯噔”触发一次。


火狐浏览器不兼容,火狐使用自己的专用事件DomMouseWheel,并且这个事件只能通过标准的DOM2级的事件绑定方式添加。


oDiv.addEventListener("DOMMouseScroll",function(event){
oDiv.innerHTML = event.detail;
},false);


火狐添加的事件,是它自己的专门事件DOMMouseScroll,表示滚动方向的事件的属性叫做event.detail。


detail就是细节的意思。反着的,滚动方向往上,-3;滚动方向往下,3。

image.png


兼容性的解决?


当我们给Chrome或者IE添加一个DOMMouseScroll事件的时候,会静默,不会报错。


添加监听好解决,就写两个监听就行了,事件处理函数,要写判断。


function mousewheelhandler(event){
event = event || window.event;   //→ 解决IE6、7、8和高级浏览器的不兼容
//阻止默认事件
if(event.preventDefault){    //→ 解决IE6、7、8和高级浏览器的不兼容
event.preventDefault();
}else{
event.returnValue = false;
}
//Chrome、IE用的是event.wheelDelta;
if(event.wheelDelta){  //→ 解决火狐和其他浏览器的不兼容
var direction = event.wheelDelta > 0 ? 1 : -1;
}else if(event.detail){
//火狐用的是event.detail;
var direction = event.detail > 0 ? -1 : 1;
}
oDiv.innerHTML = direction;
}

这个事件处理程序中,已经屏蔽了3个事情的不兼容。


//给IE、CHrome添加事件
oDiv.onmousewheel = mousewheelhandler;
//给火狐添加事件
oDiv.addEventListener("DOMMouseScroll",mousewheelhandler,false);

try{……}catch(ex){}


try表示尝试,里面的语句可能有错误,catch(ex)参数ex就是try语句段里面出现的错误。在catch里面进行了一个捕获,可以把错误控制在这个catch语句块里,而不向浏览器抛出。


try{
console.log("123");
var a = b;  //这行语句有错误,b没有被定义
console.log("哈哈");
}catch(err){
throw new error();
}
console.log("456");

123

456


程序的执行逻辑是这样的: 运行try语句块里面的语句,如果遇见了错误的语句,不向浏览器抛出错误。而是执行catch语句段里的语句。try语句里面没有执行完的语句,不执行了。catch语句块执行完毕之后,执行后面的语句。


阻止默认事件


event.returnValue=false;//IE678


event.preventDefault();//高级浏览器


Event=event//高级浏览器


event=window.event;//IE678


三、滚滚屏原理


CSS从小到大都是height:100%; 撑高为浏览器屏幕高度


html,body{
width: 100%;
height: 100%;
overflow: hidden;
}
.contanier{
width: 100%;
height: 100%;
position: absolute;
top: -300%;
left: 0;
}
.page{
width: 100%;
height: 100%;
background: yellowgreen;
}

四、jQuery实现

4.1 拖拽

实现拖拽要用的就是jQueryUI这个插件,这是一个官方插件,用来实现:


Draggable : 拖拽


Droppable : 拖放


Resizable :改变尺寸


Selectable : 可选择


Sortable :可排序


插件的意思是,我这个插件包依赖你的jQuery:



一条语句能实现拖拽:

$("div").draggable();

重要的参数,参数都以JSON来配置

$("div").draggable(JSON);

文档:   jQuery UI API Documentation


axis//约束在哪个轴上
containment:”parent”//在父亲盒子中移动
grid:[x,y]//步长
drag :function(event,ui){console.log(ui.position.left,ui.position.top);
}//拖动以后发生的事件,值是ui.position.top;
$("p").draggable({
axis: "x",  //约束在某个轴上
containment: "parent", //在父盒子中拖拽
grid : [100], //步长
drag : function(event, ui){  //事件,值就是ui.position.top
console.log(ui.position.left,ui.position.top);
}
});

4.2 各种尺寸

$("div").width();  //计算后的内容宽度
$("div").innerWidth();  //计算后的算上padding的宽度
$("div").outerWidth();  //算上padding和border
$("div").outerWidth(true);//算上padding和border和margin

4.3 净位置(到页面顶端的位置)

就是我们昨天封装的getAllTop,jQuery中也替我们封装了。叫做offset()这个方法返回一个带有top、left、bottom、right属性的对象。

var t = $("p").offset().top;

净位置如同我们昨天学习的getAllTop(),但是他比我们牛逼许多,十年磨一剑。


IE8的border问题都解决了。


先打点调用offset()方法,然后是top属性


4.4 鼠标滚轮事件

jQuery天生没有mousewheel事件,必须依靠插件。


event.deltaY属性,鼠标滚轮往下滚-1,往上滚1。


4.5 窗口相关

窗口的卷动事件:

$(window).scroll(function(){
     console.log($(window).scrollTop());
});

还记得么?$()里面只有三个东西不加引号:$(this)、$(window)、$(document)。


原生的:


window.onscroll = function(){
console.log(document.body.scrollTop || document.documentElement.scrollTop)
}
$(window).scrollTop();  //方法!!不是属性

窗口的宽度:

$(window).width();
$(window).height();

窗口冲锋:

$(“html,body”).animate({    //对象变成了$(“html,body”)
   “scrollTop” : 2000    //变成了属性
},1000);

4.6 缓冲

就是我们说动运动公式,就是t、b、c、d


需要用插件 , jQuery eaise.js


滚动屏


html,body{
            width: 100%;
            height:100%;
   }


一、object类型

但是,下面的特殊情况,这个k必须加引号:


k是特殊字符


k是数字


k是有空格


k是关键字、保留字


先说一下,上面这些情况,也同时不能使用点语法来访问属性了,比如使用方括号:

var obj = {
name : "考拉"
}
console.log(obj["name"]);

特殊形式的k,必须要加上引号,检索属性的时候,必须用方括号:


var obj = {
"24&*$&#@@)@!" : "哈哈",
"all name" : "考拉",
"++++%%%%" : "嘻嘻",
"var" : "么么哒",
"function" : "嘻嘻"<-----这里没有,,,,,逗号
}
console.log(obj["24&*$&#@@)@!"]);
console.log(obj["all name"]);
console.log(obj["++++%%%%"]);
console.log(obj["var"]);
console.log(obj["function"]);

对象的属性的访问,点语法是有局限的,它不能访问上面的特殊的那些情况。也不能访问以变量保存的k:

var obj = {
name : "考拉",
age : 18,
sex : "男",
"study score" : 100
}
//console.log(obj."study score");//错误的
console.log(obj["study score"]); //正确的
console.log(obj["a" + "ge"]); //正确的
var a = "sex";
console.log(obj[a]); //正确的
</script>


目录
相关文章
|
10天前
|
JavaScript 前端开发
jQuery和CSS3滑动展开菜单按钮插件
这是一款jQuery和CSS3滑动展开菜单按钮插件。该滑动展开菜单按钮在用户点击主菜单按钮之后,子菜单以滑动的方式依次展开
49 21
|
9天前
|
JavaScript 前端开发
页面滚动触发css3动画js插件
delighters.js是一款页面滚动触发css3动画js插件。该js插件可以在页面向下滚动时,为进入浏览器视口的元素制作各种炫酷的CSS3动画效果。
38 13
|
7天前
|
JavaScript
jquery和CSS3响应式轮播图插件jcSlider
jcSlider是一款jquery和CSS3响应式轮播图插件。jcSlider使用CSS3过渡动画,它可以和animate.css完美结合,生成60多种轮播图过渡动画效果。
|
13天前
|
JavaScript
jQuery和CSS3精美翻页式电子时钟特效
jQuery和CSS3精美翻页式电子时钟特效
|
14天前
|
JavaScript 前端开发
jQuery和CSS3斑马线样式range滑块特效
jQuery和CSS3斑马线样式range滑块特效
|
18天前
纸屑飘落生日蛋糕场景js+css3动画特效
纸屑飘落生日蛋糕CSS3动画特效是一款js+css3制作的全屏纸屑飘落,生日蛋糕点亮庆祝动画特效。
35 3
|
1月前
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
20 0
|
28天前
|
前端开发 测试技术 定位技术
如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤
本文深入介绍了如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤。通过实例展示了主页、关于我们、产品展示、新闻动态及联系我们等页面的设计与实现,强调了合理布局、美观设计及用户体验的重要性。旨在为企业打造一个既专业又具吸引力的线上平台。
56 7
|
28天前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
35 6