网站出现的问题,网页制作指南,茶文化网站建设的可行性分析,国外免费域名注册平台jQuery 事件
代码下载
jQuery 单个事件注册
jQuery 提供了方便的事件注册机制#xff0c;其优缺点如下#xff1a;
优点: 操作简单#xff0c;且不用担心事件覆盖等问题。缺点: 普通的事件注册不能做事件委托#xff0c;且无法实现事件解绑#xff0c;需要借助其他方法…jQuery 事件
代码下载
jQuery 单个事件注册
jQuery 提供了方便的事件注册机制其优缺点如下
优点: 操作简单且不用担心事件覆盖等问题。缺点: 普通的事件注册不能做事件委托且无法实现事件解绑需要借助其他方法。
语法
element.事件(function(){}) $(“div”).click(function(){ 事件处理程序 })其他事件和原生基本一致。 比如mouseover、mouseout、blur、focus、change、keydown、keyup、resize、scroll 等
演示代码
bodydiv/divscript$(function() {// 1. 单个事件注册$(div).click(function() {$(this).css(background, purple);});$(div).mouseenter(function() {$(this).css(background, skyblue);});})/script
/bodyjQuery 事件处理
因为普通注册事件方法的不足jQuery又开发了多个处理方法重点讲解如下
on(): 用于事件绑定目前最好用的事件绑定方法off(): 事件解绑trigger() / triggerHandler(): 事件触发
事件处理 on() 绑定事件
因为普通注册事件方法的不足jQuery又创建了多个新的事件绑定方法bind() / live() / delegate() / on()等其中最好用的是: on()
on() 方法在匹配元素上绑定一个或多个事件的事件处理函数语法:
element.on(events,[selector],fn)events:一个或多个用空格分隔的事件类型如click或keydown 。selector: 元素的子元素选择器 。fn:回调函数 即绑定在元素身上的侦听函数。
on() 方法优势1: 可以绑定多个事件多个处理事件处理程序。
$(“div”).on({mouseover: function(){}, mouseout: function(){}, click: function(){}
});如果事件处理程序相同
$(“div”).on(“mouseover mouseout”, function() { $(this).toggleClass(“current”);
});on() 方法优势2: 可以事件委派操作 。事件委派的定义就是把原来加给子元素身上的事件绑定在父元素身上就是把事件委派给父元素。
$(ul).on(click, li, function() { alert(hello world!);
});在此之前有bind(), live() delegate()等方法来处理事件绑定或者事件委派最新版本的请用on替代他们。
on() 方法优势3: 动态创建的元素click() 没有办法绑定事件 on() 可以给动态生成的元素绑定事件
$(“div).on(click,”p”, function(){ alert(俺可以给动态生成的元素绑定事件)
});
$(div).append($(p我是动态创建的p/p));演示代码
bodydiv/divulli我们都是好孩子/lili我们都是好孩子/lili我们都是好孩子/li/ulol/olscript$(function() {// (1) on可以绑定1个或者多个事件处理程序// $(div).on({// mouseenter: function() {// $(this).css(background, skyblue);// },// click: function() {// $(this).css(background, purple);// }// });$(div).on(mouseenter mouseleave, function() {$(this).toggleClass(current);});// (2) on可以实现事件委托委派// click 是绑定在ul 身上的但是 触发的对象是 ul 里面的小li// $(ul li).click();$(ul).on(click, li, function() {alert(11);});// (3) on可以给未来动态创建的元素绑定事件$(ol).on(click, li, function() {alert(11);})var li $(li我是后来创建的/li);$(ol).append(li);})/script
/body发布微博案例 点击发布按钮 动态创建一个小li放入文本框的内容和删除按钮 并且添加到ul 中。点击的删除按钮可以删除当前的微博留言。 $(.weibo button).on(click, function() {if ($(.weibo textarea).val()) {let li $(li $(.weibo textarea).val() a hrefjavascript:;删除/a /li);$(.weibo ul).prepend(li);li.stop().slideDown();$(.weibo textarea).val();} else {alert(请输入内容);}});$(.weibo ul).on(click, a, function(e) {$(this).parent().stop().slideUp(function() {$(this).remove()});});事件处理 off() 解绑事件
当某个事件上面的逻辑在特定需求下不需要的时候可以把该事件上的逻辑移除这个过程称为事件解绑。jQuery 提供了多种事件解绑方法die() / undelegate() / off() 等甚至还有只触发一次的事件绑定方法 one()在这里重点讲解一下 off() ;
off() 方法可以移除通过 on() 方法添加的事件处理程序。
$(p).off() // 解绑p元素所有事件处理程序
$(p).off( click) // 解绑p元素上面的点击事件 后面的 foo 是侦听函数名
$(ul).off(click, li); // 解绑事件委托如果有的事件只想触发一次 可以使用 one() 来绑定事件。
演示代码
bodydiv/divulli我们都是好孩子/lili我们都是好孩子/lili我们都是好孩子/li/ulp我是一个P标签/pscript$(function() {// 事件绑定$(div).on({click: function() {console.log(我点击了);},mouseover: function() {console.log(我鼠标经过了);}});$(ul).on(click, li, function() {alert(11);});// 1. 事件解绑 off // $(div).off(); // 这个是解除了div身上的所有事件$(div).off(click); // 这个是解除了div身上的点击事件$(ul).off(click, li);// 2. one() 但是它只能触发事件一次$(p).one(click, function() {alert(11);})})/script
/body事件处理 trigger() 自动触发事件
有些时候在某些特定的条件下希望某些事件能够自动触发, 比如轮播图自动播放功能跟点击右侧按钮一致。可以利用定时器自动触发右侧按钮点击事件不必鼠标点击触发。由此 jQuery 提供了两个自动触发事件 trigger() 和 triggerHandler() ;
语法
element.click() // 第一种简写形式
element.trigger(type) // 第二种自动触发模式
element.triggerHandler(type) // 第三种自动触发模式triggerHandler模式不会触发元素的默认行为这是和前面两种的区别。
演示代码
bodydiv/divinput typetextscript$(function() {// 绑定事件$(div).on(click, function() {alert(11);});// 自动触发事件// 1. 元素.事件()// $(div).click();会触发元素的默认行为// 2. 元素.trigger(事件)// $(div).trigger(click);会触发元素的默认行为$(input).trigger(focus);// 3. 元素.triggerHandler(事件) 就是不会触发元素的默认行为$(input).on(focus, function() {$(this).val(你好吗);});// 一个会获取焦点一个不会$(div).triggerHandler(click);// $(input).triggerHandler(focus);});/script
/bodyjQuery 事件对象
jQuery 对DOM中的事件对象 event 进行了封装兼容性更好获取更方便使用变化不大。事件被触发就会有事件对象的产生。
语法
element.on(events,[selector],function(event) {})阻止默认行为:event.preventDefault() 或者 return false阻止冒泡: event.stopPropagation()
演示代码
bodydiv/divscript$(function() {$(document).on(click, function() {console.log(点击了document);})$(div).on(click, function(event) {// console.log(event);console.log(点击了div);event.stopPropagation();})})/script
/body注意jQuery中的 event 对象使用可以借鉴 API 和 DOM 中的 event 。
jQuery 拷贝对象
如果想要把某个对象拷贝(合并) 给另外一个对象使用此时可以使用 $.extend() 方法。
语法
$.extend([deep], target, object1, [objectN])deep: 如果设为true 为深拷贝 默认为false 浅拷贝target: 要拷贝的目标对象object1:待拷贝到第一个对象的对象。objectN:待拷贝到第N个对象的对象。浅拷贝目标对象引用的被拷贝的对象地址修改目标对象会影响被拷贝对象。深拷贝前面加true 完全克隆修改目标对象不会影响被拷贝对象。
演示代码 script$(function() {// 1.合并数据var targetObj {};var obj {id: 1,name: andy};// $.extend(target, obj);$.extend(targetObj, obj);console.log(targetObj);// 2. 会覆盖 targetObj 里面原来的数据var targetObj {id: 0};var obj {id: 1,name: andy};// $.extend(target, obj);$.extend(targetObj, obj);console.log(targetObj); })/scriptjQuery 多库共存
jQuery使用 作为标示符随着 j Q u e r y 的流行 , 其他 j s 库也会用这 作为标示符随着jQuery的流行,其他 js 库也会用这 作为标示符随着jQuery的流行,其他js库也会用这作为标识符 这样一起使用会引起冲突。需要一个解决方案让jQuery 和其他的js库不存在冲突可以同时存在这就叫做多库共存。
jQuery 解决方案:
把里面的 $ 符号 统一改为 jQuery。 比如 jQuery(‘‘div’’)jQuery 变量规定新的名称:$.noConflict() var xx $.noConflict();
演示代码
script$(function() {// 让jquery 释放对$ 控制权 让用自己决定var suibian jQuery.noConflict();console.log(suibian(span));})
/scriptjQuery 插件
jQuery 功能比较有限想要更复杂的特效效果可以借助于 jQuery 插件完成。 这些插件也是依赖于jQuery来完成的所以必须要先引入jQuery文件因此也称为 jQuery 插件。jQuery 插件常用的网站
jQuery 插件库 http://www.jq22.com/jQuery 之家 http://www.htmleaf.com/
jQuery 插件使用步骤
引入相关文件。jQuery 文件 和 插件文件复制相关html、css、js (调用插件)。
瀑布流插件
Pinterest Grid 是jQuery之家的开源插件瀑布流。插件的使用三点
引入css.引入JS引入html。 有的简单插件只需引入html和js甚至有的只需引入js
1.引入css.
link relstylesheet hrefcss/normalize.css
link relstylesheet typetext/css hrefcss/default.css!-- 下面的样式代码为页面布局可以引入也可以自己写自己设计页面样式一般为直接引入方便 --
style typetext/css#gallery-wrapper {position: relative;max-width: 75%;width: 75%;margin: 50px auto;}img.thumb {width: 100%;max-width: 100%;height: auto;}.white-panel {position: absolute;background: white;border-radius: 5px;box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.3);padding: 10px;}.white-panel h1 {font-size: 1em;}.white-panel h1 a {color: #A92733;}.white-panel:hover {box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.5);margin-top: -5px;-webkit-transition: all 0.3s ease-in-out;-moz-transition: all 0.3s ease-in-out;-o-transition: all 0.3s ease-in-out;transition: all 0.3s ease-in-out;}
/style2.引入js.
!-- 前两个必须引入 --
script srcjs/jquery-1.11.0.min.js/script
script srcjs/pinterest_grid.js/script
!-- 下面的为启动瀑布流代码参数可调节属性具体功能可参考readme.html --
script typetext/javascript$(function() {$(#gallery-wrapper).pinterest_grid({no_columns: 5,padding_x: 15,padding_y: 10,margin_bottom: 50,single_column_breakpoint: 700});});
/script3.引入html. !-- html结构一般为事先写好很难修改结构但可以修改内容及图片的多少article标签 --section idgallery-wrapperarticle classwhite-panelimg srcimages/P_000.jpg classthumbh1a href#我是轮播图片1/a/h1p里面很精彩哦/p/articlearticle classwhite-panelimg srcimages/P_005.jpg classthumbh1a href#我是轮播图片1/a/h1p里面很精彩哦/p/articlearticle classwhite-panelimg srcimages/P_006.jpg classthumbh1a href#我是轮播图片1/a/h1p里面很精彩哦/p/articlearticle classwhite-panelimg srcimages/P_007.jpg classthumbh1a href#我是轮播图片1/a/h1p里面很精彩哦/p/article/section总结jQuery插件就是引入别人写好的html 、css、js 有时也可以只引入一部分读懂后也可以修改部分内容
综合案例: toDoList案例
案例介绍
本页面内容刷新页面不会丢失。文本框里面输入内容按下回车就可以生成待办事项。点击待办事项复选框就可以把当前数据添加到已完成事项里面。点击已完成事项复选框就可以把当前数据添加到待办事项里面。点击事项后面圆圈可以删除该条事项。
toDoList 数据处理分析
刷新页面不会丢失数据因此需要用到本地存储 localStorage核心思路 不管按下回车还是点击复选框都是把本地存储的数据加载到页面中这样保证刷新关闭页面不会丢失数据存储的数据格式var todolist [{ title : ‘xxx’, done: false}]注意点1 本地存储 localStorage 里面只能存储字符串格式 因此需要把对象转换为字符串 JSON.stringify(data)。注意点2 获取本地存储数据需要把里面的字符串转换为对象格式JSON.parse() 我们才能使用里面的数据。 // 获取数据function getData() {let data localStorage.getItem(todolist);if (data) {return JSON.parse(data);}return [];}let data getData();// 保存数据function setData() {localStorage.setItem(todolist, JSON.stringify(data));}toDoList 本地存储数据渲染加载到页面
因为后面也会经常渲染加载操作所以声明一个函数 load方便后面调用先要读取本地存储数据。数据不要忘记转换为对象格式之后遍历这个数据$.each()有几条数据就生成几个小li 添加到 ol 里面。每次渲染之前先把原先里面 ol 的内容清空然后渲染加载最新的数据。 // 渲染UIfunction loadData() {$(ul, ol).empty();var doneCount 0;$.each(data, function(i, o) {if (o.done) {let li $(li input typecheckbox checked p o.title /p a hrefjavascript:; id i /a /li);$(ol).prepend(li);doneCount;} else {let li $(li input typecheckbox p o.title /p a hrefjavascript:; id i /a /li);$(ul).prepend(li);}});$(span).eq(0).html(data.length - doneCount);$(span).eq(1).html(doneCount);}loadData();toDoList 按下回车把新数据添加到本地存储里面
切记 页面中的数据都要从本地存储里面获取这样刷新页面不会丢失数据所以先要把数据保存到本地存储里面。利用事件对象.keyCode判断用户按下回车键13。声明一个数组保存数据。先要读取本地存储原来的数据声明函数 getData()放到这个数组里面。之后把最新从表单获取过来的数据追加到数组里面。最后把数组存储给本地存储 (声明函数 setDate()) // 添加数据$(header input).on(keydown, function(e) {if (e.keyCode 13) {if ($(this).val()) {data.push({title: $(this).val(),done: false});setData();loadData();$(this).val();} else {alert(请输入您要的操作);}}});toDoList 正在进行和已完成选项操作
当点击了小的复选框修改本地存储数据再重新渲染数据列表。修改对应数据属性 done 为当前复选框的checked状态。之后保存数据到本地存储重新渲染加载数据列表loadData 加载函数里面新增一个条件,如果当前数据的done为true 就是已经完成的就把列表渲染加载到 ul 里面如果当前数据的done 为false 则是待办事项就把列表渲染加载到 ol 里面 // 进行与完成操作$(ul, ol).on(click, input, function() {let i $(this).parent().children(a).prop(id);let o data[i];o.done !o.done;setData();loadData();});toDoList 删除操作
点击里面的a链接不是删除的li而是删除本地存储对应的数据。核心原理先获取本地存储数据删除对应的数据保存给本地存储重新渲染列表li可以给链接自定义属性记录当前的索引号根据这个索引号删除相关的数据----数组的splice(i, 1)方法存储修改后的数据然后存储给本地存储重新渲染加载数据列表因为a是动态创建的使用on方法绑定事件 // 删除操作$(ul, ol).on(click, a, function() {let i $(this).prop(id);data.splice(i, 1);setData();loadData();});