首页
网站首页
公司简介
资讯中心
推荐内容
返回顶部
一个js拖拽的效果类和dom,Autocomplete自动完成插件_jquery_脚本之家
发布时间:2019-12-25 16:26
浏览次数:

参考无忧cosin的方法后,整理的方法如下 复制代码 代码如下: //一段随机数,模拟用 var baseNum=[]; for(var i= 0;i< 100000 ;i++){ random = Math.floor; baseNum.push; } var baseNumLen = baseNum.length; var numSubscript = []; //将数字作为下标和值放到另一数组内,实现排序和不重复 for (var i =0;i复制代码 代码如下: var baseNum=[],tmp={},v; for(var i= 0;i< 100000 ;i++){ tmp[Math.floor]=true; }; i=0; for { baseNum[i++]=k; }; baseNum.sort { return x-y>0?1:-1 } document.write;

相对于同类插件,他的特色有3点。 1、可缓存查询结果 2、非keyup监听方式 (解决某些系统/情况下无法触发keyxxx事件的问题) 3、简洁的参数 插件性能尚好,我的E6500、2G内存,30秒内一共发生了4469次调用,耗时94.65毫秒;百度的是2432次调用,80.24毫秒。 接近1倍的调用是jQuery中的问题,但具体原因我还没弄明白,如果那位兄弟知道的还请不吝赐教。 调用方法 复制代码 代码如下: jQuery.suggest({ url:siteConfig.suggestionUrl, params:{ kw:function(){return jQuery}, n:10 } }); 参数url:baseUrl,例如http://www.target.com/search.php 参数params:url的后缀列表,范例中拼合的url为:http://www.target.com/search.php?kw=xxx&n=10&callback=? 参数delay:输入间隔时间,主要是为了降低负载,数值越大,负载越低,查询速度越慢。 参数cache:是否实用缓存,默认为true,例如当搜索“test”时,程序会将对应的查询结果缓存,当第二次搜索test时直接从缓存中读取。 参数formId:必须填写,form表单的id 参数callback:是否使用jsonp以便处理跨域问题。核心代码:suggest.js复制代码 代码如下:{ $.tools = $.tools || {version: '1.0'}; $.tools.suggest = {}; $.tools.suggest.defaults = { url : null, params : null, delay : 100, cache : true, formId : '#search_form', focus:null, callback : true } $.tools.suggest.borderKey = { UP: 38, DOWN: 40, TAB: 9, ESC: 27, ENTER:13 } $.fn.suggest=function{ var options,key = $.tools.suggest.borderKey; if){ fn=options; options = $.extend({}, $.tools.suggest.defaults, key); }else{ options = $.extend({}, $.tools.suggest.defaults, key, options); } return this.each{ var self = $, url = options.url, params = options.params, searchUrl = null, searchtimer = 0, delay = options.delay, cache = options.cache, callback = options.callback, formobj = $, focus = options.focus, rebox = $.attr, htmlLi = null, litop = null, lileft = null, liwth = null, tip = false, val = null, rlen = null, UP = options.UP, DOWN = options.DOWN, TAB = options.TAB, ESC = options.ESC, ENTER = options.ENTER, index = -1, choseKey = null, backval = null, hidden = false, locksuggest = false //init if; searchtimer = setInterval; } self.bind{ searchtimer = setInterval; // 触发焦点时初始化backval的值 backval = (backval=$.trim==''?null:backval; }) .bind{ clearInterval; searchtimer = 0; hideResult .bind{ // 少于10项不使用switch if{ clearInterval; searchtimer = 0; if.css{ reSet(); return false; } index--; if{ index=Math.abs-1; } changeSelect; e.preventDefault(); return false; }else if{ clearInterval; searchtimer = 0; if.css{ reSet(); return false; } index++; if{ index=0; } changeSelect; e.preventDefault(); return false; }else if{ clearInterval; searchtimer = 0; hideResult(); }else if{ clearInterval; searchtimer = 0; hideResult(); return false; }else if{ clearInterval; searchtimer = 0; }else if{ searchtimer = setInterval; // 获取关键词 function getKey(){ val = $.trim; // 关键词不为空且关键词不重复 if(!!val && val!=backval){ backval = val; // 如不需要缓存结果,设cache为false if(cache && !!$.tools.suggest[val]){ index = -1; rlen = $.tools.suggest[val][1]; appendSuggest($.tools.suggest[val][0]); }else{ searchurl = url+'?'+$.param; getResult(searchurl,function{ index = -1; rlen = htmllen; appendSuggest; } } // 关键词为空 if{ hideResult(); } } // 获取提示数据 function getResult{ if{searchurl = searchurl+'&callback=?';} $.getJSON(searchurl,function{ var htmltemp = '', htmllen = 0, inputWord = self.val() $.each(data.list,function{ if{ htmltemp += '

这是个功能非常简单的类,只实现了拖拽的功能,当然,代码也因此保持了原始的简洁,下面是这个类库的代码: 代码 复制代码 代码如下: /************************************************** * Drag.js * 作者:橡树小屋 07.17.2010 * http://www.cnblogs.com/babyzone2004/ *用法:Drag.initDrag; id是标签的id名称 **************************************************/ var Drag={ dragObject:null, mouseOffset:null, initDrag:function{ this.item=document.getElementById; this.item.onmousedown=function{ document.onmousemove=Drag.mouseMove; document.onmouseup=Drag.mouseUp; Drag.dragObject=this; Drag.mouseOffset=Drag.getMouseOffset; return false; } } }, mousePoint:function{ this.x=x; this.y=y; }, mousePosition:function { evnt=evnt||window.event; var x=parseInt; var y=parseInt; return new Drag.mousePoint; }, getMouseOffset:function{ var mousePos=Drag.mousePosition; var x=mousePos.x-target.offsetLeft; var y=mousePos.y-target.offsetTop; return new Drag.mousePoint; }, mouseUp:function { Drag.dragObject=null; document.onmousemove = null; document.onmouseup = null; }, mouseMove:function{ if return; var mousePos=Drag.mousePosition; Drag.dragObject.style.position="absolute"; Drag.dragObject.style.top=mousePos.y-Drag.mouseOffset.y+"px"; Drag.dragObject.style.left=mousePos.x-Drag.mouseOffset.x+"px"; return false; } } 由于代码不是很复杂,所以就不详细展开说了。有需要的可以直接下载使用,导入后用Drag.initDrag方法就可以应用了。 事实上,网上已经有一个轻量级的dom-drag类库,回头看到自己写的类库,内牛满面……,dom-drag类可以到http://boring.youngpup.net/projects/dom-drag/下载,代码非常简单,而且提供了很多易用的特性。并且网站上提供了非常详细的例子。 这个类库就像flash里面的startDrag方法,代码精简却功能实用。你想让某个组件能够拖动,你可以调用 Drag.init 方法。 init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper) o :是想现实鼠标拖动的组件; oRoot : 是o上层的组件,将随o一起拖动; minX, maxX, minY, maxY :设置鼠标拖动的范围, 由下面的例子cropper可以看出,如果有oRoot,那范围是由oRoot相对于页面来说的; bSwapHorzRef, bSwapVertRef :设置组件的优先权; fXMapper, fYMapper: 设置拖动的路径 其中第三个例子: 示例链接:http://boring.youngpup.net/projects/dom-drag/ex3.html 可以实现对拖动范围的限制,代码如下: 复制代码 代码如下:

在看 Discuz! 的源码的时候,发现了一段浏览器验证的代码,还是比较经典的: 复制代码 代码如下: var BROWSER = {}; var USERAGENT = navigator.userAgent.toLowerCase; BROWSER.ie = window.ActiveXObject && USERAGENT.indexOf != -1 && USERAGENT.substr(USERAGENT.indexOf; BROWSER.firefox = document.getBoxObjectFor && USERAGENT.indexOf != -1 && USERAGENT.substr(USERAGENT.indexOf; BROWSER.chrome = window.MessageEvent && !document.getBoxObjectFor && USERAGENT.indexOf != -1 && USERAGENT.substr(USERAGENT.indexOf; BROWSER.opera = window.opera && opera.version(); BROWSER.safari = window.openDatabase && USERAGENT.indexOf != -1 && USERAGENT.substr(USERAGENT.indexOf; BROWSER.other = !BROWSER.ie && !BROWSER.firefox && !BROWSER.chrome && !BROWSER.opera && !BROWSER.safari; BROWSER.firefox = BROWSER.chrome ? 1 : BROWSER.firefox;

友情链接: 网站地图
Copyright © 2015-2019 http://www.nflfreepicks.net. 新葡萄京娱乐场网址有限公司 版权所有