使用原生js操作dom的麻烦:
$(document).ready()
$(function () {
$("#btn1").click(function(){
$("div").show(1000);
});
$("#btn2").click(function(){
$("div").text("内容");
});
});
1.x版本是兼容IE678的, 2.x版本是不兼容 IE6,7,8, 早期的版本更新,都会两个大版本同步进行,分别有兼容与不兼容的。 等到后来 全部整合为3.X版本,并且宣布放弃 IE6,7,8。
写法1:
$(document).ready(function(){
});
写法2:
$().ready(function(){
});
写法3
$(function){
});
原生Js和jQuery入口函数加载模式不同。
编写多个入口函数的区别。
window.onload = function () {
console.log("我是js的入口函数");
};
//认识
$(document).ready(function () {
console.log("这是jQuery入口函数的第一种写法");
});
$(function () {
console.log("这是jQuery入口函数的第二种写法");
});
结果:
这是jQuery入口函数的第一种写法
这是jQuery入口函数的第二种写法
我是js的入口函数
特点:
例子:
var fakeArray01 = {0:'a',1:'b',length:2};//这是一个标准的伪数组对象
转换成真数组:
使用Array.prototype.slice.call
方法转换:
alert(arr01[0]);//a
var arr02 = [].slice.call(fakeArray01);
alert(arr02[0]);//a
使用js的方式获取到的元素就是js对象(DOM对象)使用js的方式获取到的元素就是js对象(DOM对象)
var cloth = document.getElementById("cloth");
cloth.style.backgroundColor = "pink";
使用jq的方式获取到的元素就是jq对象
var $li = $("li");
console.log($li);
$li.text("我改了内容");
jq对象其实就是js对象的一个集合,伪数组,里面存放了一大堆的js对象
在jq中注册事件时,使用this
,这个还是JS对象;需要使用$(this)
转换
JS对象转换成JQ对象
使用$()
:
var cloth = document.getElementById("cloth");
$(cloth).text("呵呵");
JQ对象转换成 JS对象:
jqobj[index]
jqobj.get(index)
$li[1].style.backgroundColor = "red";
$li.get(2).style.backgroundColor = "yellow";
$实际上是一个函数,就是 jQuery的意思。
console.log(typeof $);
// function
代表是入口函数
$(function(){
});
代表将这个JS对象转换成JQ对象
$(divObj).text("哈哈");
代表选择器来获取JQ对象
$("#btn1");
代表创建一个HTML标签
$('点我点我');
jQuery选择器返回的是jQuery对象。jQuery选择器有很多,基本兼容了CSS1到CSS3所有的选择器,并且jQuery还添加了很多更加复杂的选择器。
名称 | 用法 | 描述 |
---|---|---|
ID选择器 | $(“#id”); | 获取指定ID的元素 |
类选择器 | $(“.class”); | 获取同一类class的元素 |
标签选择器 | $(“div”); | 获取同一类标签的所有元素 |
并集选择器 | $(“div,p,li”); | 使用逗号分隔,只要符合条件之一就可。 |
交集选择器 | $(“div.redClass”); | 获取class为redClass的div元素 |
总结:跟css的选择器用法一模一样。
名称 | 用法 | 描述 |
---|---|---|
子代选择器 | $(“ul>li”); | 使用>号,获取儿子层级的元素,注意,并不会获取孙子层级的元素 |
后代选择器 | $(“ul li”); | 使用空格,代表后代选择器,获取ul下的所有li元素,包括孙子等 |
跟CSS的选择器一模一样。
这类选择器都带冒号:
名称 | 用法 | 描述 |
---|---|---|
:eq(index) | $(“li:eq(2)”).css(“color”, ”red”); | 获取到的li元素中,选择索引号为2的元素,索引号index从0开始。 |
:odd | $(“li:odd”).css(“color”, ”red”); | 获取到的li元素中,选择索引号为奇数的元素 |
:even | $(“li:even”).css(“color”, ”red”); | 获取到的li元素中,选择索引号为偶数的元素 |
:lt(index) | ||
:gt(index) | ||
:first | ||
:last | ||
:animated |
【案例:隔行变色】
名称 | 用法 | 描述 |
---|---|---|
:input | ||
:text | ||
:password | ||
:radio | ||
:checkbox | ||
:submit | ||
:image | ||
:reset | ||
:button | ||
:file | ||
:hidden | ||
:enabled | ||
:disabled | ||
:checked | ||
:selected |
筛选选择器的功能与过滤选择器有点类似,但是用法不一样,筛选选择器主要是方法。
名称 | 用法 | 描述 |
---|---|---|
children(selector) | $(“ul”).children(“li”) | 相当于$(“ul>li”),子类选择器 |
find(selector) | $(“ul”).find(“li”); | 相当于$(“ul li”),后代选择器 |
siblings(selector) | $(“#first”).siblings(“li”); | 查找兄弟节点,不包括自己本身。 |
parent() | $(“#first”).parent(); | 查找父亲 |
eq(index) | $(“li”).eq(2); | 相当于$(“li:eq(2)”),index从0开始 |
next() | $(“li”).next() | 找下一个兄弟 |
prev() | $(“li”).prev() | 找上一次兄弟 |
【案例:下拉菜单】this+children+mouseenter+mouseleave
var $li = $(".wrap>ul>li");
//给li注册鼠标经过事件,让自己的ul显示出来
$li.mouseenter(function () {
//找到所有的儿子,并且还得是ul
$(this).children("ul").show();
});
$li.mouseleave(function () {
$(this).children("ul").hide();
});
【案例:突出展示】siblings+find
$(function(){
var $lis = $(".wrap li");
$lis.mouseenter(function(){
$(this).siblings("li").css("opacity",0.4);
$(this).css("opacity", 1);
});
$lis.mouseleave(function(){
$lis.css("opacity", 1);
});
});
【案例:手风琴】next+parent
$(function () {
$(".menuGroup").mouseenter(function(){
$(this).children("div").slideDown(); //.css("display","block");
}).mouseleave(function(){
$(this).children("div").slideUp(); //css("display","none");
});
});
或者
$(this).next().slideDown(200).parent().siblings().children("div").slideUp(200);
jquery中可以链式编程
mouseenter
和 mouseleave
是一组mouseover
和 mouseout
是一组区别:
mouseover
mouseenter
mouseenter
效率更高
作用:获取元素在其兄弟元素中的索引值
<li>li>
<li>li>
<li>li>
<li>li>
<script>
$("li").click(function(){
console.log($(this).index());
// li 返回 0 1 2 3
});
script>
<li>li>
<li>li>
<li>li>
<li>li>
<script>
$("li").click(function(){
console.log($(this).index());
// li 返回 0 1 2 3
});
script>
第一天复习:
//jquery:简单、粗暴
//jq和js的关系
//js是什么? js是一门编程语言
//jq仅仅是基于js的一个库,jq可理解为就是开发js的一个工具。
//概念
//1. 为什么要学jquery ? 简单,粗暴 没有兼容性问题
//2. 什么是jquery?js库,说白了就是js文件,里面有一大堆的方法
//3. 使用jquery的步骤: 1. 引入jquery文件 2. 入口函数 功能实现
//4. 版本:1.x 2.x 3.x 1.x 压缩版和未压缩版
//5. 入口函数: $(document).ready(function) $(function(){})
//6. jQuery对象与DOM对象
//区别:方法不能混用
//联系: DOM-->jq 花钱 jq-->dom [0] get(0)
//$的实质:function
// console.log($ === jQuery);
// $(function () {
//
// });
//选择器
//基本选择器 标签 类 id选择器 交集 并集
//层级选择器: 子代 后代
//过滤选择器:
//:odd:奇数 even:偶数 :eq:指定下标
//:first :last :gt :lt
//筛选选择器
//children():找儿子
//find():找后代
//parent():找爹
//siblings():找兄弟,不包括自己
//next:下一个兄弟
//prev:上一次兄弟
//eq:指定下标
//index():返回的当前元素在所有兄弟里面的索引。
css
设置方法 |
---|
css(name, value) |
$("#four").css("backgroundColor", "red");
$("#four").css("font-size","20px");
设置css样式时,可以使用js写法,也可以使用css写法, 最终jquery都会翻译成 js写法
设置方法 |
---|
css( obj) |
$("li").css({
backgroundColor:"pink",
color: "red",
fontSize:"32px",
border: "1px solid black"
});
获取方法 |
---|
css( name) |
console.log($("li").css("fontSize"));//16px
获取的时候:只会返回第一个元素对应的值。
隐式迭代:
jquery获取属性值的时候,无论是style属性还是样式表设置的属性,都可以直接获取
jquery获取的属性,都是带单位的
写法 |
---|
addClass( className) |
$("li").addClass("basic");
写法 |
---|
removeClass( className) |
$("li").removeClass("basic");
写法 |
---|
hasClass( className) |
console.log($("li").hasClass("bigger"));;
写法 |
---|
toggleClass( className) |
$("li").toggleClass("basic");
css
来操作。attr
方法操作。既可以获取/设置正常属性,也可以获取/设置自定义属性
写法 |
---|
attr(name, value) |
$("div").attr("nihao","haha");
$("div").attr("id","haha23")
写法 |
---|
attr( obj ) |
$("img").attr({
alt:"图破了",
title:"错错错",
aa:"bb"
})
写法 |
---|
attr(name) |
console.log($("div").attr("hello"));
console.log($("div").attr("title"));
prop
As of jQuery 1.6, the .attr() method returns undefined for attributes that have not been set. To retrieve and change DOM properties such as the checked, selected, or disabled state of form elements, use the .prop() method.
对于值是true/false
的,应该用prop
而不是attr
, 用法和 attr
一样。
.prop( 'checked' ): false
.is( ':checked' ): false
show([speed], [callback]) |
hide([speed], [callback]) |
参数说明:
callback
: 回调函数,当动画结束的时候调用slideDown([speed], [callback]) |
slideUp([speed], [callback]) |
fadeIn([speed], [callback]) |
fadeOut([speed], [callback]) |
.animate( properties [, duration ] [, easing ] [, callback] ) |
properties
: 一个对象,分别对应 CSS属性名和属性值duration
: 数字,动画完成的毫秒值easing
:渐变函数,默认是swing
, 还可以写linear
,代表匀速callback
: 回调函数$("#box1").animate({left:800}, 8000);
$("#box3").animate({left:800}, 8000, "linear", function () {
console.log("hahaha");
});
给一个标签添加多个动画,那么这些动画就会加到一个动画队列中去,按顺序一个一个完成。
$("#btn").click(function () {
//把这些动画存储到一个动画队列里面
$("div").animate({left:800},function(){
console.log("完成了1");
})
.animate({top:400},function(){
console.log("完成了2");
})
.animate({width:300,height:300},function(){
console.log("完成了3");
})
.animate({top:0})
.animate({left:0})
.animate({width:100,height:100})
})
如果当动画还没完成,而队列又加入新内容的时候,会降低用户体验。
.stop([clearQueue], [jumpToEnd]) ) |
clearQueue
:是否清除动画队列 true / false(默认)jumpToEnd
:是否跳转到当前动画的最终效果 true / false(默认)最常用的情况是: .stop.animate()
$li.mouseenter(function () {
$(this).stop().animate({width:800}).siblings().stop().animate({width:100});
}).mouseleave(function () {
$li.stop().animate({width:240});
});
插入元素内部 | 示例 | 解释 |
---|---|---|
.append() |
.append( content [, content ] ) |
在匹配元素的儿子最后,插入 content |
.prepend() |
.prepend( content [, content ] ) |
在匹配元素的儿子最前,插入 content |
.appendTo( target ) |
$( " |
将元素插入目标儿子的最后 |
.prependTo( target ) |
$( " |
将元素插入目标儿子的最前 |
.wrap(元素) |
在调用者的内部,加入参数指定的元素 |
插入元素外部 | 示例 | 解释 |
---|---|---|
.after() |
$( ".inner" ).after( " |
在每个.inner 元素后面插入这个p |
.before() |
$( ".inner" ).before( " |
在每个.inner 元素前面插入这个p |
.insertAfter() |
.insertAfter( target ) |
将内容插入到每个复合条件的target后面 |
.insertBefore() |
.insertBefore( target ) |
将内容插入到每个复合条件的target前面 |
append/prepend的参数还有:
.prepend( content [, content ] )
.prepend( function )
after/before的参数还有:
.after( content [, content ] )
.after( function )
.after( function-html )
移除方法 | 解释 |
---|---|
.html('') |
将内容清空,变成空—— 有缺点,不会清理子节点注册的事件,会导致内存泄漏 |
.empty() |
清空所有内容 —— 清空子节点、文本,并且会移除子节点的事件 |
.remove() |
移除调用者,并且清理跟它有关的事件和数据; 也可以传一个选择器参数,进一步过滤 |
.detach() |
移除调用者,并且保留跟它有关的事件和数据; 也可以传一个选择器参数,进一步过滤 |
.unwrap() |
移除调用者的父元素并且返回,可以传递参数去匹配是否满足条件 |
深度拷贝 |
---|
.copy(是否赋值事件) |
$('这是一个span')
例子:
$("div").append('传智大前端');
var $li = $('')
$("div").append($li);
方法 | 解释 |
---|---|
.html(“”) |
将内容清空,变成空—— 有缺点,不会清理子节点注册的事件,会导致内存泄漏 |
.empty() |
清空所有内容 —— 清空子节点、文本,并且会移除子节点的事件 |
.remove() |
移除调用者,并且清理跟它有关的事件和数据; 也可以传一个选择器参数,进一步过滤 |
.detach() |
移除调用者,并且保留跟它有关的事件和数据; 也可以传一个选择器参数,进一步过滤 |
.unwrap() |
移除调用者的父元素并且返回,可以传递参数去匹配是否满足条件 |
深拷贝元素:
方法 |
---|
copy(是否拷贝事件) |
//false:不传参数也是深度复制,不会复制事件
//true:也是深复制,会复制事件
$(".des").clone(true).appendTo("div");
val
使用方式 |
---|
.val() 获取 |
.val("内容") 设置 |
如果多个元素匹配,会返回第一个匹配元素的value
$("#txt").focus(function () {
//如果是默认值,清空内容
if($(this).val() === "洋酒"){
$(this).val("");
}
});
$("#txt").blur(function () {
if($(this).val() === ""){
$(this).val("洋酒");
}
});
使用方式 |
---|
.html() 获取 |
.html("内容") 设置 |
.text() 获取 |
.text("内容") 设置 |
对应offset家族
使用方式 | 含义 |
---|---|
.width() |
获取width——结果是数字,没有单位 |
.width(数字) 设置width |
|
.innerWitdh() |
设置或者获取 宽(width+padding) |
.outerWitdh() |
设置或者获取 宽(width+padding + border) |
.outerWitdh(true) |
设置或者获取 宽(width+padding + border + margin) |
.height() |
获取——结果是数字,没有单位 |
.height(数字) |
设置height |
.innerHeight() |
设置或者获取 高(height+padding) |
.outerHeight() |
设置或者获取 高(height+padding + border) |
.outerHeight(true) |
设置或者获取 高(height+padding + border + margin) |
$(window).width()
$(window).height()
$(window).resize(function(){
$(window).width();
$(window).height();
});
对应scroll家族
方法/事件 | 说明 |
---|---|
scrollTop() |
获取或者设置元素的垂直滚动距离 |
scrollLeft() |
获取或者设置元素的水平滚动距离 |
scroll() |
滚动事件 |
$(window).scroll(function(){
})
[案例: 固定导航栏]
对应client家族
offset()
获取元素相对于 document
的上和左 值position()
获取定位元素相对于父元素的左 和 上jquery对js的事件进行了封装,并且增加扩展了事件处理机制。
给元素简单注册事件,就是使用对应事件名的方法:
写法 |
---|
.click( handler ) |
.click( [eventData ], handler ) |
.click() |
$("#btn").click(function () {
$("我是新增加的p元素
").appendTo("div");
});
优点:
缺点:
bind
方法绑定可以一次绑定多个事件,并且既可给多个事件绑定同样的方法,也可以绑定不同方法
写法 |
---|
.bind( eventType [, eventData ], handler ) |
.bind( eventType [, eventData ] [, preventBubble ] ) |
.bind( events ) |
$("p").bind("click mouseenter", function(){
console.log("两个事件都调用这个方法");
})
$("p").bind({
click:function () {
alert("呵呵")
},
mouseenter:function () {
alert("哈哈")
}
});
优点:
缺点:
delegate
(3.0开始已过时)委托注册的原理: 为父亲注册事件,当对儿子触发事件的时候,儿子的事件冒泡给父亲,然后父亲查看该事件是不是来自委托注册的儿子,如果是的话就由儿子触发,所以最终调用者还是儿子元素
写法 |
---|
.delegate( selector, eventType, handler ) |
.delegate( selector, eventType, eventData, handler ) |
.delegate( selector, events ) |
$("#box").delegate("p", "click", function () {
//alert("呵呵");
console.log(this);
});
优点:
缺点:
on
方法绑定jQuery1.7之后,jQuery用on统一了所有事件的处理方法。
最现代的方式,兼容zepto(移动端类似jQuery的一个库),强烈建议使用。
写法 | 解释 |
---|---|
.on( events [, selector ] [, data ], handler ) |
给自己注册简单事件 |
.on( events [, selector ] [, data ] ) |
为selector 委托注册 |
$("p").on("click", function () {
alert("呵呵");
});
$("div").on("click", "p", function () {
alert("呵呵")
});
自己绑定的事件–>冒泡上来的委托事件–>冒泡的事件
unbind方式(不用)
$(selector).unbind(); //解绑所有的事件
$(selector).unbind("click"); //解绑指定的事件
undelegate方式(不用)
$( selector ).undelegate(); //解绑所有的delegate事件
$( selector).undelegate( “click” ); //解绑所有的click事件
off方式(推荐)
// 解绑匹配元素的所有事件
$(selector).off();
// 解绑匹配元素的所有click事件
$(selector).off("click");
$(selector).click(); //触发 click事件
$(selector).trigger("click");
jQuery事件对象其实就是js事件对象的一个封装,处理了兼容性。
screenX和screenY
对应屏幕最左上角的值
clientX和clientY
距离页面左上角的位置(忽视滚动条)
pageX和pageY
距离页面最顶部的左上角的位置(会计算滚动条的距离)
event.keyCode
按下的键盘代码
event.data
存储绑定事件时传递的附加数据
event.stopPropagation()
阻止事件冒泡行为
event.preventDefault()
阻止浏览器默认行为
return false
: 既能阻止事件冒泡,又能阻止浏览器默认行为。
end
通常情况下,只有设置操作才能把链式编程延续下去。因为获取操作的时候,会返回获取到的相应的值,无法返回 jQuery对象。
end();
// 筛选选择器会改变jQuery对象的DOM对象,想要回复到上一次的状态,并且返回匹配元素之前的状态。
$(selector).each(function(index,element){});
$
的多库共存如果jquery拿到了 $
的控制权,可以调用$.noConflict()
来释放$
的控制,并且可以设置返回值名字,来改名:
<script src="itcast.js"></script>
<script src="jquery-1.12.4.js"></script>
<script>
// 此时的$是 jQuery函数
console.log($);
//jQuery释放$的控制权, 并且用$$ 来代替$的使用
var $$ = $.noConflict();
//此时$已经释放
console.log($);
jQuery(function () {
});
$$(function(){
)
</script>
能够让jquery可以处理颜色渐变动画
颜色不要使用名称,要使用十六进制表示法
<script src="jquery-1.12.4.js">script>
<script src="jquery.color.js">script>
<script>
$(function () {
//3. 直接使用即可。
//说明jquery不支持颜色的渐变,颜色最好用16进制
$('div').animate({backgroundColor:"#ffc0cb"}, 3000, function () {
alert("呵呵");
});
});
script>
在长页面中可以实现图片的懒加载
步骤:
1. 引入jquery
2. 引入jquery.lazyload.js
3. 对需要懒加载的image标签设置:
1. 统一的class属性(推荐,非必须)
2. `data-original`属性指向图片原地址(必须)
3. 原图的宽高(推荐,非必须)
4. 在js中调用:` $("img.lazy").lazyload();`
<img class="lazy" data-original="02.gif" alt="">
<script src="jquery-1.12.4.js" type="text/javascript">script>
<script src="jquery.lazyload.js" type="text/javascript">script>
<script>
$(function () {
$("img.lazy").lazyload();
});
script>
jqueryui, easyui等库的外观比较丑,一般前端人员不会主要使用这些
<script src="jquery-1.12.4.js">script>
<script src="jquery-ui.js">script>
<script>
$(function () {
$(".drag-wrapper").draggable({
handle:".drag-bar"
});
$(".sort-item").sortable({
opacity:0.3
});
$(".resize-item").resizable({
handles:"s"
});
});
script>
自己做插件的本质,就是给jQuery对象的添加添加方法,而:
$.prototype === jQuery.prototype === $.fn
所以,直接给 $.fn
点方法就可以添加了。
$.fn.bgColor = function (color) {
//this是一个jq对象
this.css("backgroundColor", color);
return this;
};
$.fn.accordion = function (colors, width) {
colors = colors || [];
width = width || 0;
var $li = this.find("li");
var boxLength = this.width();
var maxLength = boxLength - ($li.length - 1) * width;
var avgLength = boxLength / $li.length;
//更改li的颜色
$li.each(function (i, e) {
$(e).css("backgroundColor", colors[i]);
});
//给li注册鼠标经过事件
$li.on("mouseenter", function () {
$(this).stop().animate({width: maxLength}).siblings().stop().animate({width: width})
});
$li.on("mouseleave", function () {
$li.stop().animate({width: avgLength});
});
};
<script src="jquery-1.12.4.js">script>
<script src="jquery.accordion.js">script>
<script>
$(function () {
var colors = ["red","yellow","green", "cyan", "pink","hotpink", "blue", "yellowgreen","greenyellow", "skyblue"];
$("#box").accordion(colors, 20);
});
script>
$("#center>li:eq(" + $(this).index() + ")").show().siblings().hide();
$(function(){
$(".wrapper li").click(function(){
$(this).addClass("active").siblings().removeClass("active");
$(".products div").eq($(this).index()).addClass("selected").siblings().removeClass("selected");
});
});
$(function(){
$("#imagegallery a").click(function(){
$("#image").attr("src",$(this).attr("href"));
$("#des").text($(this).attr("title"));
return false;
});
});
$(function(){
$("#j_cbAll").click(function(){
// 下面的选中状态和全选框相同
$("#j_tb input").prop("checked", $(this).prop("checked"));
});
$("#j_tb :checkbox").click(function(){
var checkboxlength = $("#j_tb input:checkbox").length;
var checkedlenght = $("#j_tb input:checked").length;
console.log(checkboxlength);
console.log(checkedlenght);
if( checkboxlength == checkedlenght){
// 如果全部checkbox都选中了
$("#j_cbAll").prop("checked",true);
}
else{
$("#j_cbAll").prop("checked",false);
}
});
})
$(function(){
var totalCount = $(".slider ul li").length;
var currentSliderIndex = 0;
$(".arrow-right").click(function(){
currentSliderIndex += 1;
if(currentSliderIndex >= totalCount){
currentSliderIndex = 0;
}
$(".slider ul li").fadeOut(500).eq(currentSliderIndex).fadeIn(500);
});
$(".arrow-left").click(function(){
currentSliderIndex -= 1;
if(currentSliderIndex <= 0){
currentSliderIndex = totalCount -1;
}
$(".slider ul li").fadeOut(500).eq(currentSliderIndex).fadeIn(500);
})
});
$(function () {
var $li = $("#box li");
for (var i = 0; i < $li.length; i++) {
$li.eq(i).css("backgroundImage", "url(images/" + (i + 1) + ".jpg)");
}
//给所有的li注册鼠标经过事件
$li.mouseenter(function () {
$(this).stop().animate({width:800}).siblings().stop().animate({width:100});
}).mouseleave(function () {
$li.stop().animate({width:240});
});
});
$(function(){
$("#btn1").click(function(){
$("#src-city option").appendTo( $("#tar-city"));
});
$("#btn2").click(function(){
$("#tar-city option").appendTo( $("#src-city"));
});
$("#btn3").click(function(){
$("#src-city option:selected").appendTo( $("#tar-city"));
});
$("#btn4").click(function(){
$("#tar-city option:selected").appendTo( $("#src-city"));
});
});
$(function () {
$("#btn").click(function () {
// 如果有文字才添加
if($("#txt").val().trim().length == 0) {
return;
}
//添加一个li
$("").text($("#txt").val()).prependTo("#ul");
// 删除文本域原来文字
$("#txt").val("");
})
});
<body>
<div class="boxDom" id="boxDom">
<div class="idDom" id="idDom">
<div class="content">
<p class="title">吐槽:p>
<input type="text" class="text" id="text"/>
<button type="button" class="btn" id="btn">发射button>
div>
div>
div>
body>
<script src="jquery-1.12.4.js">script>
<script>
$(function () {
$("#btn").click(function () {
var colors = ["red", "blue", "green", "black", "pink"];
var fontsize = [14, 16, 18, 20, 22, 24];
// 判断是否有内容:
if (!($("#text").val())) {
return;
}
// 创建span, 获取内容
// 添加进父亲
$("").text($("#text").val()).appendTo($("#boxDom"))
.css({
// 设置弹幕样式 和 位置
"color": colors[parseInt(Math.random() * colors.length)],
"fontSize": fontsize[parseInt(Math.random() * fontsize.length)],
"position": "absolute",
"left": $("#boxDom").outerWidth(),
"top": 500 * Math.random()
})
.animate({
// 设置弹幕样式及其动画
"left": $(this).outerWidth() * -1,
}, 5000, "linear", function () {
//动画执行完成后移除
$(this).remove();
});
//清空输入框
$("#text").val("");
});
// 设置 回车也能发送弹幕
$("#text").keyup(function (e) {
// jquery 也有事件对象
if (e.keyCode == 13) {
$("#btn").click();
}
});
});
script>
$(function(){
$(window).scroll(function(){
var scrollHeight = $(this).scrollTop();
if(scrollHeight >= $(".top").outerHeight()){
$(".nav").addClass("fixed");
$(".main").css("marginTop", 10+ $(".nav").outerHeight());
// console.log($(".nav").outerHeight());
}
else{
$(".nav").removeClass("fixed");
$(".main").css("marginTop", 10);
}
// console.log($(this).scrollTop() );
}) ;
});
最终改动的是scrollTop属性,但是 不同浏览器兼容性不同,有些是 window,有些是 document,有些是body。
$(".actGotop").click(function () {
$("html,body").stop().animate({scrollTop:0},3000);
//$(window).scrollTop(0);
})
$(function () {
//给li注册鼠标进入事件,让li下面的span top:0 播放音乐
$(".nav li").mouseenter(function () {
$(this).children("span").stop().animate({top: 0});
//播放音乐
var idx = $(this).index();
$(".nav audio").get(idx).load();
$(".nav audio").get(idx).play();
}).mouseleave(function () {
$(this).children("span").stop().animate({top: 60});
});
//节流阀 :按下的时候,触发,如果没弹起,不让触发下一次
//1. 定义一个flag
var flag = true;
//按下1-9这几个数字键,能触发对应的mouseenter事件
$(document).on("keydown", function (e) {
if(flag) {
flag = false;
//获取到按下的键
var code = e.keyCode;
if(code >= 49 && code <= 57){
//触发对应的li的mouseenter事件
$(".nav li").eq(code - 49).mouseenter();
}
}
});
$(document).on("keyup", function (e) {
flag = true;
//获取到按下的键
var code = e.keyCode;
if(code >= 49 && code <= 57){
//触发对应的li的mouseenter事件
$(".nav li").eq(code - 49).mouseleave();
}
});
//弹起的时候,触发mouseleave事件
});
$(function () {
var currentRating = 0;
$(".comment li").mouseenter(function(){
// var thisIndex = $(this).index();
$(this).text("★").prevAll("li").text("★").end().nextAll().text("☆");
});
$(".comment").mouseleave(function () {
$(this).children().text("☆");
$(this).children(".current").text("★").prevAll().text("★").end().nextAll().text("☆");
});
$(".comment li").click(function () {
// 设置一个标记属性
$(this).addClass("current").siblings().removeClass("current");
});
});