leetcode旋转数组(小白解题)

thbcm阅读(320)

解题思路

暴力法每次旋转1个位置, 旋转k次即为正确答案。

旋转的时候也是利用前驱结点来实现的, 前驱结点的更新也借助temp变量。

这里重点体会如何完成向后移动一次目前阶段遇到题目不要钻牛角尖, 暴力法能解就暴力法。

代码

class Solution {
    public void rotate(int[] nums, int k) {
        int previous;
		int temp;
		for (int i = 0; i < k; i++) {
			previous = nums[nums.length-1];  //前驱结点初始为最后一个结点
			for (int j = 0; j < nums.length; j++) {
				temp = nums[j]; //先保存当前结点
				nums[j]=previous;
				previous=temp; //更新前驱结点
			}
		}
    }
}

反转法 很实用

这个方法基于这个事实:当我们旋转数组 k 次,k%n 个尾部元素会被移动到头部, 剩下的元素依次向后移动。

1、反转可以把k%n个元素先放到前面,只需要对数组进行 0到k-1范围内的反转就可以得到想要的顺序;

2、反转剩下的k-1到n-1个元素即实现了元素依次后移;

3、前往要主义此处的k有可能超出数组长度,而如果恰等于数组长度就等于没变所以k=k%n。

class Solution {
    public void rotate(int[] nums, int k) {
		int n = nums.length;  
        k %= n; //k可能会查过数组长度造成错误
		//1、反转数组
		reverse(nums,0,n-1);
        //2、前k个反转,后n-k个反转
		reverse(nums,0,k-1);
		reverse(nums,k,n-1);
    }
    //反转数组 用这种写法可以方便的反转任意区间的数组 也很使用
	public void reverse(int[] nums, int start, int end) {
        while (start < end) {
            int temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;
            start++;
            end--;
        }
    }
}

环状替换

想到了但是代码实现的时候遇到了当 n%k==0的时候死循环而想不到解决的办法。

以下是leetcode提供的代码,巧妙的用了双循环循环解决了我不能解决的尴尬,核心代码都是一样的,外循环的此时必定是数组长度。

用count来控制外循环次数,内循环一镜到底都是我没有想到的。在编码方面还有很大提高。

public class Solution {
    public void rotate(int[] nums, int k) {
        k = k % nums.length;
        int count = 0;
        for (int start = 0; count < nums.length; start++) {
            int current = start;
            int prev = nums[start];
            do {
                int next = (current + k) % nums.length;
                int temp = nums[next];
                nums[next] = prev;
                prev = temp;
                current = next;
                count++;
            } while (start != current);
        }
    }
}

推荐好课:

Java:23天零基础完全入门

Java工程师基础教程

MySQL零基础入门

DIV+CSS建立符合WEB标准网页的好处

thbcm阅读(346)

使用 DIV+CSS 建立符合 W3C 标准网站对程序员是有非常多的益处的,我们看如下的八条优势。

一、使用 div 的方式进行程序的嵌套,特别是使用 php 这样的代码嵌套,可以减少出现像 table 中那样繁重的代码,对于页面嵌套可以减少因 table 代码而带来的问题。

二、使用 div 对于设计使用AJAX等的时候,可以减少 Javascript 代码对于页面控制时候的复杂度,因为使用 table 的时候,层次关系最起码有三层,table-tr-td 以上,而使用div则基本上只有两层(div-div)的概念。

三、用 div 对于页面的定位更准确,因为使用 div 的代码的宽度高度等都使用 css 或者页面的 style 方式控制,即在需要修改一个框(box)的大小、位置时候,可以直接修改 css 的代码或者该标签的 style 代码即可实现。而几乎不用修改其他代码,但是使用table的情况下,则可能会因为table的位置出现变动,而影响到对整片代码的修改。

四、在页面效果来说,由于 Firefox等浏览器再对 table 方面进行了很多的优化,才使得目前 firefox 在处理页面的输出时候可以这么接近 IE 的效果,但是在对于一些 table 的排版,用 firefox 会存在一下莫名起码的以为等问题。这些问题在 IE 中可能不存在,但是在使用Firefox 等其他引擎的浏览器就可能会出现了。

五、就是输出的代码将更小。由于使用 div 进行页面代码的组织,而布局由 CSS 等文件进行控制,因此从输出的 html 中产生输出的代码要一般比使用 table 的页面少70%。从系统的负载上考虑,将会更好解决因为代码上面的损耗,对维护系统的稳定起到一定的帮助。

六、更方便搜索引擎的搜索,目前的搜索引擎只是对页面的代码进行分析,因此页面代码更小而且有语意页面,搜索引擎的效能会更高,用户的文字信息会更容易被搜索引擎进行收集,对于 web 网站来说被将会更容易被搜索引擎所引用。

七、无可避免,在页面的一些位置,我们还是依旧使用 table 方式表现,比如说一些商品列表,订单列表,提交表单等,我们依旧使用 table 的方式来实现,因为对于这样的表格表现形式,使用 div 实现时候还不太成熟。

八、最后 W3C 标准是目前网站开发的主流,作为专业的 web开发团队,哪有理由不使用这种技术呢!

w3cschool小编带你了解mybatis

thbcm阅读(307)

什么是mybatis:

Mybatis本质是一种半自动化的ORM框架,前身是ibatis,除了要pojo和映射关系之外,还需要些sql语句。

怎么看待ORM框架:

处理矛盾的,java程序员喜欢面向对象开发和面向接口开发,而数据库是一张张表和一个个库组成的,这两者的关系很难调和,而关系型映射解决了这一个问题。

Mybatis映射文件三要素:

  • SQL;
  • 映射规则;
  • Pojo。

为什么要用mybatis而不用hibernate?

在我们互联网的环境里面, 我们经常要面对海量数据,所以我们要基于底层的调优能力,就是sql语句。而hibernate生成的sql语句很不透明。

Mybatis核心流程三大阶段:

  • 初始化阶段,读取XML配置文件和注解中的配置信息,创建解析对象,并完成各个模块的初始化工作。就是把我们的配置文件加载到内存里面去。在sqlSession初始化的时候加载到内存中去的;
  • 代理阶段,封装iBatis的编程模型,使用mapper接口开发的初始化工作;
  • 数据读写阶段,通过SqlSession完成SQL的解析,参数的映射,SQL的执行,结果的反射解析过程。

SqlSession

SqlSession意味着创建数据库会话,代表了一次与数据库的连接;

是mybatis对外提供数据访问的主要API;

实际上SqlSession的功能都是基于Excutor来实现的。

Mybatis的两种编程模型Mybatis封装了ibatis编程模型,使用sqlsession对外提供数据库的访问。还有一种是使用mapper接口编程,就可以访问数据库

Mybatis和ibatis的区别

Mybatis前身是ibatis的,ibatis之前是Apache旗下的产品,后来到了谷歌旗下,但是谷歌发现ibatis实现起来很麻烦,还需要维护静态变量,并且没有业务含义。所以谷歌改成了mybatis,通过面向接口的方式,让所有代码有了业务含义,屏蔽掉了底层代码的复杂性。

为什么使用mapper接口就可以对数据库进行访问了呢?

其实最后它还是转成了底层的ibatis执行方法,它会使用配置文件解读+动态代理, 找到session中的对应方法执行,找到方法的命名空间和方法名。传递参数。

业务流程还是首先要实例化sqlssessionFactory,加载数据库配置文件以及mapper.xml到configuration对象。然后获取sqlsession对象。然后通过动态代理跨越面向接口编程和ibatis编程的鸿沟,最后遵循jdbc的规范,通过底层的四大对象合作完成功能。

推荐好课:

Mybatis3.x从入门到精通

MyBatis 教程

Mybatis常见面试题

jQuery代码片段:一些实用的示例代码

thbcm阅读(302)

jQuery 是当前非常火爆的一款 javascript 框架,下边是由网给大家收集的一些实用的 jQuery 示例代码片段,当然您可以下载 jQuery </code>

</pre>

 使用 jQuery 来切换样式表

$("link[media='screen']").attr("href", "Alternative.css");

 jQuery 检测浏览器类型

(if( $.browser.safari)) (if ($.browser.msie && $.browser.version > 6 )) (if ($.browser.msie && $.browser.version <= 6 )) (if ($.browser.mozilla && $.browser.version >= '1.8' ))

 jQuery 验证某个元素是否为空

if ($("#Demo").html()) { //null;}

 jQuery从集合中获得索引值

$("ul > li").click(function () { var index = $(this).prevAll().length; });

 jQuery选择被选中的option元素

$("#someElement").find("option:selected");

 jQuery为选择器绑定方法

$("table").delegate("td", "hover", function(){ $(this).toggleClass("hover"); }); //1.42版后,delegate替代live,因为它们提供了更好的上下文支持

 jQuery自动滚动到页面中的某区域(可以看做一个小插件)

jQuery.fn.Autoscroll = function(sel) { $('html,body').animate( {scrollTop: $(sel).offset().top},500 ); } //调用:$("#area_name").Autoscroll();

 jQuery限制”TextArea”域中的字符数(可以看做一个小插件)

(function($) { jQuery.fn.maxLength = function(max){ this.each(function(){ var type = this.tagName.toLowerCase(); var inputType = this.type ? this.type.toLowerCase() : null; if (type == "input" && inputType == "text" || inputType == "password") { //应用标准的maxLength this.maxLength = max; } else if (type == "textarea") { this.onkeypress = function(e){ var ob = e || event; var keyCode = ob.keyCode; var hasSelection = document.selection ? document.selection.createRange().text.length > 0 : this.selectionStart != this.selectionEnd; return !(this.value.length >= max && (keyCode > 50 || keyCode == 32 || keyCode == 0 || keyCode == 13) && !ob.ctrlKey && !ob.altKey && !hasSelection); }; this.onkeyup = function(){ if (this.value.length > max) { this.value = this.value.substring(0, max); } }; } }); })(jQuery); //调用:$('#macoArea").maxLength(500);

 jQuery判断某个元素是否可见

if($("#macoArea").is(":visible") == "true") { //少年,别跑 }

 jQuery元素居中显示(可以看做一个小插件)

(function($) { jQuery.fn.center = function () { this.css('position','absolute'); this.css('top', ( $(window).height() - this.height() ) / +$(window).scrollTop() + 'px'); this.css('left', ( $(window).width() - this.width() ) / 2+$(window).scrollLeft() + 'px'); return this; } })(jQuery); //调用:$("#macoArea").center();

 jQuery使用.siblings()选择同辈元素

// 少年,你是否这样操作过 $('#nav li').click(function(){ $("#macoArea li").removeClass("current"); $(this).addClass("current"); }); //这样做是不是会更好呢 $("#nav li").click(function(){ $(this).addClass("current").siblings().removeClass("current"); });

 jQuery操作复选框全选反选

var sta = false; //你懂,全局东东 $('a').click(function() { $("input[type=checkbox]").attr("checked",!sta); sta = !sta; });

 jQuery获得鼠标光标位置x和y

$(document).mousemove(function(e)} $(document).ready(function() { $().mousemove(function(e){ $("#macoArea").html("X Axis : " + e.pageX + " | Y Axis " + e.pageY); }); });

 jQuery解析XML

function ParseXml(xml) { $(xml).find("Node").each(function(){ $("#macoArea").append($(this).attr("Author") + ""); ); }

 jQuery判断图像是否被完全加载进来

$('#demoImg').attr("src", "demo.jpg").load(function() { alert("是的,你看到的是真的"); });

 jQuery让Cookie过期

var date = new Date(); date.setTime(date.getTime() + (x * 60 * 1000)); $.cookie("example", "foo", { expires: date });;

 jQuery禁止鼠标右键

$(function(){ $(document).bind("contextmenu",function(e){ return false; }); }); 

用 jQuery 和 Ajax 构建富 Internet 应用程序

thbcm阅读(311)

JQuery 受欢迎的指数迅速攀升,现已成为 Web 开发人员首选的 JavaScript 库。与此同时,人们对富 Internet 应用程序(Rich Internet Application,RIA)的应用和需求也在迅速增长,并期待用基于浏览器的应用程序代替桌面应用程序。无论是电子表格,还是薪水册和电子邮件应用程序,现在都在浏览器中再现了类似于桌面的体验。随着这些应用程序数量的增多和功能的日益复杂,JavaScript 库将会变得越来越重要,因为它是构建这些应用程序的坚实基础。JQuery 无疑成为了开发人员最佳选择。本系列文章深入探索了 jQuery,并提供了坚实的基础。开发人员借助这个基础就可以快速轻松地构建自己的 RIA。

在本系列 之前的一篇文章 中,您了解了用来构建 RIA 以及为页面添加交互性的三个基本组件。第一个模块是 Event 模块,借助此模块,能捕获用户对页面的任意交互并以编程的方式进行响应。比如,您可以向按钮点击、鼠标移动等事件附加代码。下一个模块是 Attributes 模块,它解释了如何在页面元素上获得/设置值,以及如何将其作为带有变量的数据对象。这些值包含了决定为用户提供何种响应的大部分信息。最后,您还看到了如何进行 CSS 处理,以及如何在不重新加载页面的情况下更改页面上任意元素的布局、颜色、字体等。了解这三个模块之后,就等于掌握了交互 Web 页面的三个基本元素 — 获取用户交互(Event)、收集信息(Attribute)以及在事件和信息基础上提供反馈(CSS)。

在本文中,将对交互 Web 页面的这三个基本元素进行更进一步的探究,提供当今高级 Web 应用程序必备的 “酷” 效果和特征。这些附加的模块对提供 RIA 而言并不是至关重要的,但这些效果和特征会给用户留下深刻印象,并且还会极大地扩展 RIA 的可用范围和特性。您将看到的第一个模块是 Effects 模块,它包含很多特性,比如隐藏元素、随处移动元素、淡入淡出元素等。换言之,这些都是让 Web 页酷起来的 “亮点”。最后一个要讨论的模块是 Asynchronous JavaScript + XML (Ajax) 模块。大多数人都将该模块等同为 RIA。Ajax 让 Web 应用程序无需重载页面就能与服务器进行交互、向服务器传递信息并从中获取信息(与 Web 上的一些意见相反,Ajax 不 单纯是一个很酷的 JavaScript 动画工具)。您将发现 jQuery 提供了极其简单易用的 Ajax 工具。实际上,jQuery 使 Ajax 的使用与调用其他 JavaScript 方法一样简单。

本文中的示例应用程序是个总结,展示了 Effects 和 Ajax 模块如何融入到这个示例 Web 邮件应用程序中。我将向这个示例程序添加一些效果使其更加漂亮,而且更重要的一点是,我将添加一些 Ajax 代码,以便无需重载页面邮件应用程序就能显示信息。

Effects 模块

从其名字往往容易得出这样的结论,Effects 模块只包含一些动画和效果,而这些动画和效果往往是一些 “正规” 的 Web 页面所竭力避免的。但实际情况并非如此。几乎所有的应用程序都会遇到这样的情况,即某个页面元素需要隐藏或其视图应该根据另一个页面元素的状态进行切换。这类更改对于一个 RIA 而言非常重要,因为它们让您能够加载某个页面的所有页面元素,然后通过隐藏/显示特定的元素只显示所需的信息。重载页面的方式并不可取。比如一个具有两个选项的组合框,一个选项是隐藏 div,一个选项是显示此 div。很显然,与更改组合框并重载页面隐藏/显示 div 相比,用客户端代码隐藏/显示此 div 更简单和高效。而仅隐藏/显示还是要让它淡入/淡出,则完全取决于您。

如上所述,最基本的效果函数是 show() 和 hide() 函数。这非常直观;它们可分别用来显示和隐藏页面上的某个元素。

清单 1. 隐藏和显示函数

以下为引用的内容:

// shows every <p> on the page

$("p").show();

// hides every <p> on the page

$("p").hide();

// hides every other <p> on the page

$("p:odd").hide();

除了这些基本操作,利用 show() 和 hide() 这两个函数,还能更多地控制页面元素如何显示和隐藏。相关文档将 hide() 描述为 “优美” 的显示/隐藏,对于 show(),就是综合淡入和滑出的效果。

在开始深入探讨一些例子之前,不妨回过头来看看传递给这些效果函数的参数。每个函数(除了通用的 show() 和 hide() 函数之外)都允许在效果完成时传入要调用的速度和函数。速度用来控制效果出现的快慢。这个参数可以是一个 “slow”、”fast” 或 “normal” 字符串。此外,如果需要精确控制动画时间,那就需要用参数指定毫秒数。Effects 函数的第二个参数本身就是一个函数,此函数在效果完成后调用。如果想要将几个效果组合成一个较大规模的效果,这一点将非常重要,因为利用它,能够可靠地控制一个效果何时完成,下一个效果何时开始。

清单 2. 复合效果

以下为引用的内容:

// the img with an ID of "picture" should start hidden

// when the "showPicture" button is pressed, show the img with an ID of "picture"

// and animate it, so it appears quickly in a fade In and slide out, and when

// it's done being shown, show the caption of the picture, which is

// always in the span right after the <img> tag

<input type="button" id="showPicture">

<img src="/pic.jpg" id="picture"><span>This is the picture's caption</span>

// jQuery code inside the document.ready() function

$("#picture").hide().next().hide();

$("#showPicture").click(function(){

   $("#picture").show("fast", function(){

       $("#picture").next().show();

   });

});

// notice how it took more text to describe what you want to happen than it took

// to actually code it!

Effects 模块还有其他一些函数,它们与 show() 和 hide() 非常类似,并且最终所实现的功能也基本相同;只不过实现的方式不同。slideDown() 和 slideUp() 函数分别用来显示和隐藏一个页面元素。不过,这是通过将该元素滑下或滑上的动画效果实现的(从其名称中不难看出这一点)。与我刚刚提到的增强了的 hide() 和 show() 函数类似,您也可以控制滑动的速度以及在效果完成时要调用的函数。此外,要显示/隐藏页面元素还有另一种选择,即 fadeIn() 和 fadeOut() 函数,正如其名字所示,这两个函数用来淡入页面元素直至该元素透明,然后使该元素消失。它们允许在效果完成时定制速度和要调用的函数。

你值得掌握的Windows的15个热键

thbcm阅读(296)

你值得掌握的Windows的15个热键

  • 1. win+ctrl+D 创建虚拟桌面
  • 2. win+ctrl+左右箭头 切换桌面
        win+ctrl+F4 关闭当前虚拟桌面
  • 3. win+M 全部窗口最小化 (win+逗号可以查看桌面)
  • 4. win+数字 打开任务栏中从左到右的应用,数字代表该程序的位置
  • 5. win+左右箭头,可将当前程序置于左半或右半部分屏幕,用此热键可实现两个应用分屏。
  • 6. 应用切换ctrl+alt+tab显示当前桌面运行的所有应用程序
        win+tab 显示所有正在运行的程序以及可用桌面
  •     ctrl+tab 向右切换切换选项卡

  • 7. ctrl+shift+Esc 打开任务管理器
  • 8. win+E 打开文档管理器
  • 9. win+加号/减号 打开放大镜
  • 10. win+PrtScr截取当前屏幕并保存到图片文件夹中PrtScr仅截取当前屏幕不保存至文件夹
  • 11. win+A打开通知中心
  • 12. win+I打开设置
  • 13. 聆听模式下按 win+C打开Win10 小娜 Cortana:你的私人助理
  • 14. win+G打开游戏录制工具栏
  • 15. win+L 锁定

推荐好课:

计算机系统原理入门

电脑快捷键大全

jQuery的高级教程:动画、遍历和事件绑定实例

thbcm阅读(309)

学习目标:

  • 学会如何使用jQuery的动画效果
  • 学会如何进行遍历和事件绑定
  • 熟练应用jQuery进行相关复杂操作

学习内容:

一、jQuery高级

1、动画:三种方式显示和隐藏元素
  • 默认显示和隐藏元素show([speed,[easing],[fn]])hide([speed,[easing],[fn]])toggle([speed,[easing],[fn]])
  • 滚动显示和隐藏元素slideDown([speed,[easing],[fn]])slideUp([speed,[easing],[fn]])slideToggle([speed,[easing],[fn]])
  • 淡入淡出显示和隐藏元素fadeIn([speed,[easing],[fn]])fadeOut([speed,[easing],[fn]])fadeToggle([speed,[easing],[fn]])
  • 参数speed:速度,三种预定义的值(“slow”,“normal”,“fast”)或表示动画时长的毫秒数值(如:1000)easing:用来指定切换效果,默认是”swing”,可用参数”linear”swing:动画执行时效果是“先慢,中间快,又慢”linear:动画执行时的速度是匀速的fn:在动画完成时执行的函数,每个元素执行一次
2、遍历
  • js遍历方式for(初始化值;循环结束条件;步长)
  • jq遍历方式jq对象.each(callback)$.each(object,[callback])for…of jQuery3.0之后提供的版本
3、事件绑定
  • jQuery标准的绑定方式jq对象.事件方法(回调函数);如果调用事件方法,不传递回调函数,则触发浏览器默认行为表单对象.submit(); // 让表单提交
  • on绑定事件/off解绑事件jq对象.on(事件,回调函数);jq对象.off(事件); 如果不传递事件名称,则解绑所有的事件
  • 事件切换:togglejq对象.toggle(fn1,fn2…); 多次点击依次执行传递的函数
4、案例
  • 广告显示和隐藏需求当页面加载完成后,3秒后,自动显示广告广告显示5秒后,自动消失分析使用定时器来完成 setTimeOut()执行一次的定时器jQuery的显示和隐藏的动画效果其实就是控制display属性使用show/hide相关方法完成广告的显示
  • 抽象需求点击开始,小相框快速切换点击停止,小相框停止切换分析给开始按钮绑定单击事件定义循环定时器切换小相框的src属性定义数组,存放图片资源路径生成随机数,数组索引给结束按钮绑定单击事件停止定时器给大相框设置src属性
5、插件:增强jQuery功能
  • 实现方式$.fn.extend(object);增强通过jQuery获取对象的功能 $(“#id”)$.extend(object);增强jQuery对象自身的功能 $/jQuery

学习产出:

1、 动画
<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title>Insert title here</title>
   <script type="text/javascript" src="../js/jquery-3.3.1.min.js"></script>
   <script>
       // 隐藏div
       function hideFn() {
           /*$("#showDiv").hide("slow","swing",function () {
              // alert("隐藏了。。。");
          })*/
           // 默认方式
           // $("#showDiv").hide("slow","swing");
           // 滑动方式
           // $("#showDiv").slideDown("slow","swing");
           // 淡入淡出方式
           $("#showDiv").fadeOut("slow","swing");
      }

       // 显示div
       function showFn() {
           /*$("#showDiv").show("slow","linear",function () {
              // alert("显示了。。。");
          })*/
           // 默认方式
           // $("#showDiv").show("slow","swing");
           // 滑动方式
           // $("#showDiv").slideUp("slow","swing");
           // 淡入淡出方式
           $("#showDiv").fadeIn("slow","swing");
      }

       // 切换显示隐藏div
       function toggleFn() {
           /*$("#showDiv").toggle("slow","swing",function () {
              // alert("切换显示隐藏了。。。");
          })*/
           // 默认方式
           // $("#showDiv").toggle("slow","swing");
           // 滑动方式
           // $("#showDiv").slideToggle("slow","swing");
           // 淡入淡出方式
           $("#showDiv").fadeToggle("slow","swing");
      }
   </script>
</head>
<body>
<input type="button" value="点击按钮隐藏div" onclick="hideFn()">
<input type="button" value="点击按钮显示div" onclick="showFn()">
<input type="button" value="点击按钮切换div显示和隐藏" onclick="toggleFn()">

<div id="showDiv" style="width:300px;height:300px;background:pink">
  div显示和隐藏
</div>
</body>
</html>
2、遍历
<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title></title>
   <script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
   <script type="text/javascript">

       $(function () {
           // 获取所有ul下面的li
           var citys = $("#city li");
           // 遍历li
           // js遍历方式
           for (var i = 0;i < citys.length; i++){
               // 获取内容
               alert(i+":"+citys[i].innerHTML);
          }

           // jq遍历方式
           citys.each(function (index,element) {
               // 获取li对象,直接用this
               // alert(this.innerHTML);
               // alert($(this).html());
               // 获取li对象,在回调函数中定义参数index(索引) element(元素对象)
               // alert(index+":"+element.innerHTML);
               // alert(index+":"+$(element).html());

               // 判断如果是上海,结束循环
               if ("上海"==$(this).html()){
                   // 如果当前回调函数返回值是false,终止循环
                   // 如果当前回调函数返回值是true,终止本次循环,继续下次循环
                   return false;
                   // return true;
              }
               alert(index+":"+$(element).html());
          });

           $.each(citys,function () {
               alert($(this).html());
          });

           for (li of citys){
               alert($(li).html());
          }

      });

   </script>
</head>
<body>
<ul id="city">
   <li>北京</li>
   <li>上海</li>
   <li>天津</li>
   <li>重庆</li>
</ul>
</body>
</html>
3、 事件绑定与解绑
<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title></title>
   <script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
   <script type="text/javascript">
       $(function () {
           // 获取name对象,绑定click事件
           // $("#name").click(function () {
           //     alert("我被点击了!");
           // });

           // 给name对象绑定鼠标移动元素之上事件与鼠标移除事件
           // $("#name").mouseover(function () {
           //     alert("鼠标来了!");
           // });
           // $("#name").mouseleave(function () {
           //     alert("鼠标走了!");
           // });

           // 简化操作,链式编程
           // $("#name").mouseover(function () {
           //     alert("鼠标来了");
           // }).mouseleave(function () {
           //     alert("鼠标走了");
           // })


           $("#name").focus();// 让文本输入框获得焦点
           // 表单对象.submit()   // 让表单提交
      })

   </script>
</head>
<body>
<input id="name" type="text" value="绑定点击事件">
</body>
</html>

<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title></title>
   <script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
   <script type="text/javascript">
       $(function () {
           // 使用on绑定事件
           $("#btn").on("click",function () {
               alert("我被点击了!");
          });

           // 使用off解绑事件
           $("#btn2").click(function () {
               // 解除btn按钮的click绑定事件
               $("#btn").off("click");
          });
      });



   </script>
</head>
<body>
<input id="btn" type="button" value="使用on绑定点击事件">
<input id="btn2" type="button" value="使用off解绑点击事件">
</body>
</html>

<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title></title>
   <script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
   <script src="../js/jquery-migrate-1.0.0.js" type="text/javascript" charset="utf-8"></script>
   <script type="text/javascript">
       $(function () {
           $("#btn").toggle(function () {
               // 改变背景色为绿色
               $("#myDiv").css("backgroundColor","green");
          },function () {
               // 改变背景色为黄色
               $("#myDiv").css("backgroundColor","yellow");
          })
      })
   </script>
</head>
<body>

   <input id="btn" type="button" value="事件切换">
   <div id="myDiv" style="width:300px;height:300px;background:pink">
      点击按钮变成绿色,再次点击黄色
   </div>
</body>
</html>
4、案例1:广告显示和隐藏
<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title>广告的自动显示与隐藏</title>
   <style>
       #content{width:100%;height:500px;background:#999}
   </style>

   <!--引入jquery-->
   <script type="text/javascript" src="../js/jquery-3.3.1.min.js"></script>
   <script>
       $(function () {
           // 定义定时器,3秒之后显示广告
           setTimeout(adShow,3000);
           // 定义定时器,5秒之后隐藏广告
           setTimeout(adHide,8000);
      });
       // 显示广告
       function adShow() {
           $("#ad").show("slow");
      }
       // 隐藏广告
       function adHide() {
           $("#ad").hide("slow");
      }
   </script>
</head>
<body>
<!-- 整体的DIV -->
<div>
   <!-- 广告DIV -->
   <div id="ad" style="display: none;">
       <img style="width:100%" src="../img/adv.jpg" />
   </div>

   <!-- 下方正文部分 -->
   <div id="content">
      正文部分
   </div>
</div>
</body>
</html>
5、案例2:抽奖
<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title>jquery案例之抽奖</title>
   <script type="text/javascript" src="../js/jquery-3.3.1.min.js"></script>
   <script>
       var img = ["../img/man00.jpg",
           "../img/man01.jpg",
           "../img/man02.jpg",
           "../img/man03.jpg",
           "../img/man04.jpg",
           "../img/man05.jpg",
           "../img/man06.jpg"];
       $(function () {
           $("#startID").prop("disabled",false);
           $("#stopID").prop("disabled",true);

           var startId;
           var index;
           $("#startID").click(function () {
               $("#startID").prop("disabled",true);
               $("#stopID").prop("disabled",false);
               startId = setInterval(function () {
                   index = Math.floor(Math.random()*7);
                   $("#img1ID").prop("src",img[index])
              },20);
          });
           $("#stopID").click(function () {
               $("#startID").prop("disabled",false);
               $("#stopID").prop("disabled",true);
               clearInterval(startId);
               $("#img2ID").prop("src",img[index]).hide();
               $("#img2ID").show(1000);
          });
      })
   </script>
</head>
<body>

<!-- 小像框 -->
<div style="border-style:dotted;width:160px;height:100px">
   <img id="img1ID" src="../img/man00.jpg" style="width:160px;height:100px"/>
</div>

<!-- 大像框 -->
<div
       style="border-style:double;width:800px;height:500px;position:absolute;left:500px;top:10px">
   <img id="img2ID" src="../img/man00.jpg" width="800px" height="500px"/>
</div>

<!-- 开始按钮 -->
<input
       id="startID"
       type="button"
       value="点击开始"
       style="width:150px;height:150px;font-size:22px"
       onclick="imgStart()">

<!-- 停止按钮 -->
<input
       id="stopID"
       type="button"
       value="点击停止"
       style="width:150px;height:150px;font-size:22px"
       onclick="imgStop()">


<script language='javascript' type='text/javascript'>
   //准备一个一维数组,装用户的像片路径
   var imgs = [
       "../img/man00.jpg",
       "../img/man01.jpg",
       "../img/man02.jpg",
       "../img/man03.jpg",
       "../img/man04.jpg",
       "../img/man05.jpg",
       "../img/man06.jpg"
  ];

</script>
</body>
</html>
6、01-jQuery对象进行方法扩展
<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title>01-jQuery对象进行方法扩展</title>
   <script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
   <script type="text/javascript">
       // 使用jQuery插件,给jq添加两个方法,check()选中所有复选框,uncheck()取消所有选中
       // 定义jQuery对象的插件
       $.fn.extend({
           // 定义一个check方法,所有的jq对象都可以调用该方法
           check:function () {
               this.prop("checked",true);
          },
           uncheck:function () {
               this.prop("checked",false);
          }
      });
       $(function () {
           $("#btn-check").click(function () {
               $("input[type='checkbox']").check();
          });
           $("#btn-uncheck").click(function () {
               $("input[type='checkbox']").uncheck();
          });
      })
   </script>
</head>
<body>
<input id="btn-check" type="button" value="点击选中复选框" onclick="checkFn()">
<input id="btn-uncheck" type="button" value="点击取消复选框选中" onclick="uncheckFn()">
<br/>
<input type="checkbox" value="football">足球
<input type="checkbox" value="basketball">篮球
<input type="checkbox" value="volleyball">排球

</body>
</html>
7、02-jQuery全局进行方法扩展
<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title>01-jQuery对象进行方法扩展</title>
   <script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
   <script type="text/javascript">
       //对全局方法扩展2个方法,扩展min方法:求2个值的最小值;扩展max方法:求2个值最大值
       $.extend({
           max:function (a,b) {
               return a >= b ? a : b;
          },
           min:function (a,b) {
               return a <= b ? a : b;
          }
      });

       var max = $.max(2,3);
       alert(max);
       var min = $.min(1,8);
       alert(min);
   </script>
</head>
<body>
</body>
</html>

关于input框 限制输入长度记录

thbcm阅读(331)

问题描述:input输入框长度限制&非正则表达式

方式一

type = "number"  -> 输入类型

oninput ->{

oninput 事件在用户输入时触发。

该事件在 <input> 或 <textarea> 元素的值发生改变时触发。

提示: 该事件类似于 onchange 事件。不同之处在于 oninput 事件在元素值发生变化是立即触发, onchange 在元素失去焦点时触发。另外一点不同是 onchange 事件也可以作用于 <keygen> 和 <select> 元素

}
value.slice(start,end)

return ' <input type="number" value="'+value+'" οninput="if(value.length>16)value=value.slice(0,3)" />';
参数 描述
start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

注:如果 end 未被规定,那么 slice() 方法会选取从 start 到数组结尾的所有元素。

具体用法请自行前往官网学习!

方式二

maxlength属性 ->
{
maxlength 属性规定输入字段的最大长度,以字符个数计。

maxlength 属性与 <input type="text"> 或 <input type="password"> 配合使用
}
return ' <input type="number" value="'+value+'" maxlength = “长度” />';

H5之外部浏览器唤起微信分享

thbcm阅读(306)

最近在做一个手机站,要求点击分享可以直接打开微信分享出去。而不是 jiathis,share 分享这种的点击出来二维码。在网上看了很多,都说 APP 能唤起微信,手机网页实现不了。也找了很多都不能直接唤起微信。

总结出来一个可以直接唤起微信的。适应手机 qq 浏览器和 uc 浏览器。

下面上代码,把这些直接放到要转发的页面里就可以了:

html 部分:

<script src="mshare.js"></script>//引进mshare.js
<button data-mshare="0">点击弹出原生分享面板</button>
<button data-mshare="1">点击触发朋友圈分享</button>
<button data-mshare="2">点击触发发送给微信朋友</button>

js部分:

<script>
var mshare = new mShare({
  title: 'Lorem ipsum dolor sit.',
  url: 'http://m.ly.com',
  desc: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quaerat inventore minima voluptates.',
  img: 'http://placehold.it/150x150'
});
$('button').click(function () {
  // 1 ==> 朋友圈 2 ==> 朋友 0 ==> 直接弹出原生
  mshare.init(+$(this).data('mshare'));
});
</script>

下面是 mshare.js 的代码分享,把这些代码新建一个 js 文件放进去,然后在页面中引进就 ok 了。

/**
* 此插件主要作用是在UC和QQ两个主流浏览器
* 上面触发微信分享到朋友圈或发送给朋友的功能
*/
'use strict';
var UA = navigator.appVersion;
/**
* 是否是 UC 浏览器
*/
var uc = UA.split('UCBrowser/').length > 1 ? 1 : 0;
/**
* 判断 qq 浏览器
* 然而qq浏览器分高低版本
* 2 代表高版本
* 1 代表低版本
*/
var qq = UA.split('MQQBrowser/').length > 1 ? 2 : 0;
/**
* 是否是微信
*/
var wx = /micromessenger/i.test(UA);
/**
* 浏览器版本
*/
var qqVs = qq ? parseFloat(UA.split('MQQBrowser/')[1]) : 0;
var ucVs = uc ? parseFloat(UA.split('UCBrowser/')[1]) : 0;
/**
* 获取操作系统信息 iPhone(1) Android(2)
*/
var os = (function () {
  var ua = navigator.userAgent;
  if (/iphone|ipod/i.test(ua)) {
      return 1;
  } else if (/android/i.test(ua)) {
      return 2;
  } else {
      return 0;
  }
}());
/**
* qq浏览器下面 是否加载好了相应的api文件
*/
var qqBridgeLoaded = false;
// 进一步细化版本和平台判断
if ((qq && qqVs < 5.4 && os == 1) || (qq && qqVs < 5.3 && os == 1)) {
  qq = 0;
} else {
  if (qq && qqVs < 5.4 && os == 2) {
      qq = 1;
  } else {
      if (uc && ((ucVs < 10.2 && os == 1) || (ucVs < 9.7 && os == 2))) {
          uc = 0;
      }
  }
}
/**
* qq浏览器下面 根据不同版本 加载对应的bridge
* @method loadqqApi
* @param {Function} cb 回调函数
*/
function loadqqApi(cb) {
  // qq == 0
  if (!qq) {
      return cb && cb();
  }
  var script = document.createElement('script');
  script.src = (+qq === 1) ? '//3gimg.qq.com/html5/js/qb.js' : '//jsapi.qq.com/get?api=app.share';
  /**
    * 需要等加载过 qq 的 bridge 脚本之后
    * 再去初始化分享组件
    */
  script.onload = function () {
      cb && cb();
  };
  document.body.appendChild(script);
}
/**
* UC浏览器分享
* @method ucShare
*/
function ucShare(config) {
  // ['title', 'content', 'url', 'platform', 'disablePlatform', 'source', 'htmlID']
  // 关于platform
  // ios: kWeixin || kWeixinFriend;
  // android: WechatFriends || WechatTimeline
  // uc 分享会直接使用截图
  var platform = '';
  var shareInfo = null;
// 指定了分享类型
  if (config.type) {
      if (os == 2) {
        platform = config.type == 1 ? 'WechatTimeline' : 'WechatFriends';
    } else if (os == 1) {
        platform = config.type == 1 ? 'kWeixinFriend' : 'kWeixin';
      }
  }
  shareInfo = [config.title, config.desc, config.url, platform, '', '', ''];
  // android
  if (window.ucweb) {
      ucweb.startRequest && ucweb.startRequest('shell.page_share', shareInfo);
      return;
  }
  if (window.ucbrowser) {
      ucbrowser.web_share && ucbrowser.web_share.apply(null, shareInfo);
      return;
  }
}
/**
* qq 浏览器分享函数
* @method qqShare
*/
function qqShare(config) {
  var type = config.type;
  //微信好友 1, 微信朋友圈 8
  type = type ? ((type == 1) ? 8 : 1) : '';
  var share = function () {
      var shareInfo = {
          'url': config.url,
          'title': config.title,
          'description': config.desc,
          'img_url': config.img,
          'img_title': config.title,
          'to_app': type,
          'cus_txt': ''
      };
      if (window.browser) {
          browser.app && browser.app.share(shareInfo);
      } else if (window.qb) {
          qb.share && qb.share(shareInfo);
      }
  };
  if (qqBridgeLoaded) {
      share();
  } else {
      loadqqApi(share);
  }
}/**
* 对外暴露的接口函数
* @method mShare * @param {Object} config 配置对象
*/
function mShare(config) {
  this.config = config;
  this.init = function (type) {
      if (typeof type != 'undefined') this.config.type = type;
      try {
          if (uc) {
              ucShare(this.config);
          } else if (qq && !wx) {
              qqShare(this.config);
          }
      } catch (e) {}
  }
}
// 预加载 qq bridge
loadqqApi(function () {
  qqBridgeLoaded = true;
});
if (typeof module === 'object' && module.exports) {
  module.exports = mShare;
} else {
  window.mShare = mShare;
}

好了,这样就可以直接唤起微信进行分享啦

针对 vue 实现防抖

thbcm阅读(309)

1.首先新建一个 debounce.js 代码如下

const debounce=function(fn, delay){
let timer = null
return function(){
let content = this;
let args = arguments;
if(timer){
clearTimeout(timer)
}
timer = setTimeout(()=>{
fn.apply(content,args)
}, delay)
}
}
export default debounce

2.在需要防抖的 vue 文件中引入 debounce,内容如下;这是一个输入框的 500ms 的防抖

<template>
  <div class="main">
      <el-input v-model="input" @change="changeSeletc" placeholder="请输入内容"></el-input>
  </div>
</template>
<script>
  import debounce from "../utils/debounce"
   export default {
      name: "alarm",
      data(){
          return{
              input: ''
          }
      },
      methods:{
          changeSeletc:debounce(function () {
              console.log(this.input)
          },500),
      }
  }
</script>
<style scoped>
</style>

3.效果如下图

联系我们