# share **Repository Path**: js-class/share ## Basic Information - **Project Name**: share - **Description**: 前端资料 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 4 - **Created**: 2018-01-05 - **Last Updated**: 2022-01-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 常见css,js代码 ### 以下是常用的代码收集,没有任何技术含量,只是填坑的积累。转载请注明出处,谢谢。 #### 1. css 2.x - 文字换行 ```css /*强制不换行*/ white-space:nowrap; /*自动换行*/ word-wrap: break-word; word-break: normal; /*强制英文单词断行*/ word-break:break-all; ``` - 两端对齐 ```css text-align:justify;text-justify:inter-ideogra ``` - [去掉Webkit(chrome)浏览器中input(文本框)或textarea的黄色焦点框](http://www.cnblogs.com/niao/archive/2012/09/07/2674511.html) ```css input,button,select,textarea{ outline:none;} textarea{ resize:none;} ``` - [去掉chrome记住密码后自动填充表单的黄色背景](http://www.tuicool.com/articles/EZ777n ) - ie6: position:fixed ```css .fixed-top /* position fixed Top */{position:fixed;bottom:auto;top:0; } * html .fixed-top /* IE6 position fixed Top */{position:absolute;bottom:auto;top:expression(eval(document.documentElement.scrollTop));} *html{background-image:url(about:blank);background-attachment:fixed;} ``` - clearfix ```css .clearfix:before,.clearfix:after{display:table;content:"";} .clearfix:after{clear:both;} .clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0;} .clearfix{display:inline-block;} html[xmlns] .clearfix{display:block;} * html .clearfix{height:1%;} .clearfix{*zoom: 1;} .clearfix:after{clear:both;display:table;content:"";} .clearfix{overflow:hidden;_zoom:1;} ``` [http://www.daqianduan.com/3606.html](http://www.daqianduan.com/3606.html) - seperate-table ```css .tab{border-collapse:separate;border:1px solid #e0e0e0;} .tab th,.tab td{padding:3px;font-size:12px;background:#f5f9fb;border:1px solid;border-color:#fff #deedf6 #deedf6 #fff;} .tab th{background:#edf4f0;} .tab tr.even td{background:#fff;} ``` ```html
111 222
111 222
``` - min-height: 最小高度兼容代码 ```css .minheight500{min-height:500px;height:auto !important;height:500px;overflow:visible;} ``` - 鼠标不允许点击 ```css cursor:not-allowed; ``` - mac font: osx平台字体优化 ```css font-family:"Hiragino Sans GB","Hiragino Sans GB W3",'微软雅黑'; ``` - 文字过多后显示省略号 ```css .ellipsis,.ell{white-space:nowrap;overflow:hidden;text-overflow:ellipsis} ``` #### 2. css 3 - title 换行 ```html ``` - 关闭 x 符号 ```html × ``` - 投影 ```css .b{box-shadow:inset 1px -1px 0 #f1f1f1;text-shadow:1px 1px 0px #630;} filter:progid:DXImageTransform.Microsoft.gradient(enabled='true',startColorstr='#99000000',endColorstr='#99000000');background:rgba(0,0,0,.6); background:rgba(0,0,0,0.5);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#50000000',endColorstr='#50000000')\9; ``` - [search占位](http://www.qianduan.net/search-box-style-custom-webkit.html) ```css ::-webkit-input-placeholder {} ::-moz-input-placeholder {} input:focus::-webkit-input-placeholder { color: transparent; } -webkit-appearance:none; google边框去除 input[type="search"]{-webkit-appearance:textfield;} // 去除chrome默认样式 http://i.wanz.im/2011/02/04/remove_border_from_input_type_search/ http://blog.csdn.net/do_it__/article/details/6789699 line-height: normal; /* for non-ie */ line-height: 22px\9; /* for ie */ ``` - [全部浏览器的兼容代码生成](http://www.colorzilla.com/gradient-editor/ ) [CSS 实现 textArea 的 placeholder 换行](http://segmentfault.com/a/1190000000362621) - 阻止默认事件 ```css pointer-events:none; ``` - [去掉输入框聚焦时候的白色背景](http://ntesmailfetc.blog.163.com/blog/static/20628706120139184457401/) ```css -webkit-user-modify: read-write-plaintext-only; ``` - [input:focus时input不随软键盘升起而抬高的情况](http://www.cnblogs.com/hongru/archive/2013/02/06/2902938.html) ```css :focus{-webkit-tap-highlight-color:rgba(255, 255, 255, 0); -webkit-user-modify:read-write-plaintext-only;} ``` - 变灰 gray ```css html{ filter: grayscale(100%); -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter: grayscale(100%); filter: url("data:image/svg+xml;utf8,#grayscale"); filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); -webkit-filter: grayscale(1); } ``` - firefox 阻止选中 ```css -moz-user-focus:ignore;-moz-user-input:disabled;-moz-user-select:none; ``` - 箭头 ```css display:block;border:solid transparent;line-height: 0;width:0; height:0;border-top:solid #0288ce;border-width:8px 6px 0 6px; border-style:solid; border-width:7px; border-color:transparent transparent transparent #ff7020; position:absolute;top: 0;left: 0;border-width:20px;border-style:solid;border-color:#d1ddde transparent transparent #d1ddde; ``` ie6 bug测试,把border-style设为dashed. - 取消textarea右下角可拖动手柄 ```css resize:none ``` - 取消chrome form表单的聚焦边框 ```css input,button,select,textarea{outline:none} textarea{resize:none} ``` - 取消a链接的黄色边框 ```css a{-webkit-tap-highlight-color:rgba(0,0,0,0);} ``` - 取消input,button焦点或点击时蓝色边框 ```css input{outline:none;} ``` - webkit 水平居中 ```css display:-webkit-box;-webkit-box-pack:center; -webkit-box-align: center; position:absolute; top:50%;left:50%;transform:translate(-50%,-50%); ``` - 取消chrome 搜索x提示 ```css input[type=search]::-webkit-search-decoration, input[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-results-button, input[type=search]::-webkit-search-results-decoration { display: none; } ``` - [chrome取消默认黄色背景](http://stackoverflow.com/questions/2338102/override-browser-form-filling-and-input-highlighting-with-html-css) ```css input:-webkit-autofill {-webkit-box-shadow: 0 0 0px 1000px white inset;} input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill { -webkit-box-shadow: 0 0 0 1000px white inset; } autocomplete="off" ``` - 手机版本网页a标记虚线框问题 ```css a:focus {outline:none;-moz-outline:none;} ``` - 焦点去除背景 ```css -webkit-tap-highlight-color:rgba(255, 255, 255, 0); -webkit-tap-highlight-color:transparent; // i.e. Nexus5/Chrome and Kindle Fire HD 7'' ``` - placeholder占位符颜色自定义 ```css input:-moz-placeholder {color: #369;} ::-webkit-input-placeholder {color:#369;} ``` - [IOS 禁用高亮](http://hi.barretlee.com/2014/03/31/tap-highlight-in-webview/) ```css -webkit-tap-highlight-color:rgba(255,0,0,0.5);-webkit-tap-highlight-color:transparent; /* For some Androids */ ``` - IOS iframe 滚动 [滚动回弹特效](http://www.cnblogs.com/flash3d/archive/2013/09/28/3343877.html) ```css -webkit-overflow-scrolling:touch;overflow-y:scroll; ``` - [禁止选中文本](http://www.qianduan.net/introduce-user-select/) ```css -moz-user-select:none; -webkit-user-select:none; -ms-user-select:none; user-select:none; ``` - [模糊(毛玻璃)效果1](http://www.zhangxinxu.com/wordpress/2013/11/%E5%B0%8Ftip-%E4%BD%BF%E7%94%A8css%E5%B0%86%E5%9B%BE%E7%89%87%E8%BD%AC%E6%8D%A2%E6%88%90%E6%A8%A1%E7%B3%8A%E6%AF%9B%E7%8E%BB%E7%92%83%E6%95%88%E6%9E%9C/) - [模糊(毛玻璃)效果2](http://mao.li/css3-blur-filter-pratice/) - [模糊(毛玻璃)逼真效果](http://codepen.io/ariona/pen/geFIK) ```css .blur { -webkit-filter: blur(10px); /* Chrome, Opera */ -moz-filter: blur(10px); -ms-filter: blur(10px); filter: blur(10px); } ``` ```html ``` - 显示旋转加载图片,[下拉加载数据](https://github.com/chalecao/chale/blob/master/iscroll.js) ```css #pullDown .pullDownIcon{display:inline-block;vertical-align:middle;width:40px;height:40px;background:url(https://github.com/chalecao/chale/blob/master/pull-icon%402x.png) 0 0 no-repeat;-webkit-background-size:40px 80px;background-size:40px 80px;-webkit-transition-property:-webkit-transform;-webkit-transition-duration:250ms} #pullDown .pullDownIcon{-webkit-transform:rotate(0deg) translateZ(0)} #pullDown .pullDownLabel{display:inline-block;vertical-align:middle;margin-left:5px;} #pullDown.flip .pullDownIcon{-webkit-transform:rotate(-180deg) translateZ(0)} #pullDown.loading .pullDownIcon{background-position:0 100%;-webkit-transform:rotate(0deg) translateZ(0);-webkit-transition-duration:0ms;-webkit-animation-name:loading;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-timing-function:linear} @-webkit-keyframes loading{ from{-webkit-transform:rotate(0deg) translateZ(0)} to{-webkit-transform:rotate(360deg) translateZ(0)} } ``` ```html
正在载入中...
``` - 手机多终端适配 media query[web app iphone4 iphone5 iphone6 响应式布局 适配代码](http://club.zoomla.cn/PItem?id=12594) ```css @media (device-height:480px) and (-webkit-min-device-pixel-ratio:2){/* 兼容iphone4/4s */ .class{} } @media (device-height:568px) and (-webkit-min-device-pixel-ratio:2){/* 兼容iphone5 */ .class{} } @media (device-height:667px) and (-webkit-min-device-pixel-ratio:2){/* 兼容iphone6 */ .class{} } @media (device-height:736px) and (-webkit-min-device-pixel-ratio:2){/* 兼容iphone6 Plus */ .class{} } ``` - 屏蔽苹果浏览器对数字的识别[Meta标签中的format-detection属性及含义](http://blog.sina.com.cn/s/blog_51048da70101cgea.html) ```html ``` - 移除HTML5 input在type="number"时的上下小箭头 - 在chrome下: ```css input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{ -webkit-appearance: none !important; margin: 0; } ``` - Firefox下: ```css input[type="number"]{-moz-appearance:textfield;} ``` - 第二种方案: - 将type="number"改为type="tel",同样是数字键盘,但是没有箭头。 - [HTML5手机浏览直接给一个号码打电话,发短信](http://java-er.com/blog/html5-mobile-call-sms/) ```html 移动WEB页面JS一键拨打号码咨询功能 移动WEB页面JS一键发送短信咨询功能 ``` - [CSS判断横屏竖屏](http://www.w3cways.com/1772.html) ```css @media screen and (orientation: portrait) { /*竖屏 css*/ } @media screen and (orientation: landscape) { /*横屏 css*/ } ``` ```javascript //判断手机横竖屏状态: window.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", function() { if (window.orientation === 180 || window.orientation === 0) { alert('竖屏状态!'); } if (window.orientation === 90 || window.orientation === -90 ){ alert('横屏状态!'); } }, false); //移动端的浏览器一般都支持window.orientation这个参数,通过这个参数可以判断出手机是处在横屏还是竖屏状态。 ``` - rem 适配,内容太多,只贴网址 - [rem自适应方案](https://github.com/imweb/mobile/issues/3) - [html5移动端页面分辨率设置及相应字体大小设置的靠谱使用方式](http://www.cnblogs.com/willian/p/3573353.html) - [移动端高清、多屏适配方案](http://www.html-js.com/article/Mobile-terminal-H5-mobile-terminal-HD-multi-screen-adaptation-scheme%203041) - [通过rem布局+media-query:aspect-ratio实现移动端全机型适配覆盖](http://xiaoyuze88.github.io/blog/2015/05/12/%E9%80%9A%E8%BF%87rem%E5%B8%83%E5%B1%80+media-query%E7%9A%84aspect-ratio%E5%AE%9E%E7%8E%B0%E7%A7%BB%E5%8A%A8%E7%AB%AF%E5%85%A8%E6%9C%BA%E5%9E%8B%E9%80%82%E9%85%8D%E8%A6%86%E7%9B%96/) - [web app变革之rem](http://isux.tencent.com/web-app-rem.html) - [手机淘宝的flexible设计与实现](http://www.html-js.com/article/2402) - [移动端自适应方案](https://github.com/amfe/lib-flexible) - [【原创】移动端高清、多屏适配方案](http://www.html-js.com/article/3041) - [6个html5页面适配iphone6的技巧](http://qietuwang.baijia.baidu.com/article/73861) - [关于移动端 rem 布局的一些总结](http://segmentfault.com/a/1190000003690140) - [从网易与淘宝的font-size思考前端设计稿与工作流](http://www.cnblogs.com/lyzg/p/4877277.html) - [移动端自适应方案](http://f2e.souche.com/blog/yi-dong-duan-zi-gua-ying-fang-an/) - [MobileWeb 适配总结](http://www.w3ctech.com/topic/979) - [移动端web app自适应布局探索与总结](http://www.html-js.com/article/JavaScript-learning-notes%203234) - 公式 ```javascript var PAGE_MAX_WIDTH = 1280, BASE_FONT_SIZE = 50; (function() { function n() { e.fontSize = Math.min(window.innerWidth / PAGE_MAX_WIDTH * BASE_FONT_SIZE, BASE_FONT_SIZE) + "px" } var e = document.documentElement.style; window.addEventListener("load", n), window.addEventListener("resize", n), n(); }()); ``` - 页面的切换使用了page-enter ```html ``` - css相关总结网址 - [css常用效果总结](http://www.haorooms.com/post/css_common) - [css的不常用效果总结](http://www.haorooms.com/post/css_notuse_common) - [css开发技巧](http://www.haorooms.com/post/css_skill) - [重温css的选择器](http://www.haorooms.com/post/css_selectelement) - [css的变量和继承](http://www.haorooms.com/post/css_inherit_bl) - [css3的混合模式](http://www.haorooms.com/post/css3_mixblendmode) - [css中伪元素before或after中content的特殊用法attr](http://www.haorooms.com/post/content_attr) ### 以下是常用的代码收集,没有任何技术含量,只是填坑的积累。转载请注明出处,谢谢。 #### 1. PC - js - 返回指定范围的随机数(m-n之间)的公式 ```javascript Math.random()*(n-m)+m ``` - [return false](http://stackoverflow.com/questions/1357118/event-preventdefault-vs-return-false) - [return false](http://www.75team.com/archives/201) ```javascript // event.preventDefault()会阻挡预设要发生的事件. // event.stopPropagation()会阻挡发生冒泡事件. // 而return false则是前面两者的事情他都会做: // 他会做event.preventDefault(); // 他会做event.stopPropagation(); // 停止callback function的执行并且立即return回来 ``` - 防止被Iframe嵌套 ```javascript if(top != self){ location.href = ”about:blank”; } ``` - 两种图片lazy加载的方式 第一个By JS中级交流群 成都-猎巫 第二个By 上海-zenki ```javascript // @description 准备为图片预加载使用的插件 // 使用的图片容器css类名为lazy-load-wrap // 图片真实地址为data-lazy-src // 当lazy-load-wrap容器进入视口,则开始替换容器内所有需要延迟加载的图片路径,并更改容器的加载状态 //第一种方法 $.fn.compassLazyLoad=function(){ var _HEIGHT=window.innerHeight, _lazyLoadWrap=$('.lazy-load-wrap'); var methods={ setOffsetTop:function(){ $.each(_lazyLoadWrap,function(i,n){ $(n).attr({ 'top':n.offsetTop-_HEIGHT, 'status':'wait' }); }) }, isShow:function(){ var _scrollTop=$(window).scrollTop; //利用image容器判断是否进入视口,而非image本身 $.each(_lazyLoadWrap,function(){ var _that=$(this); if (_that.attr('status')==='done') { return; }; if (_that.attr('top')<=_scrollTop) { _that.find('img[data-lazy-src]').each(function(i,n){ n.src=$(n).data('lazy-src'); }); _that.attr('status','done'); }; }) }, scroll:function(){ $(window).on('scroll',function(){ methods.isShow(); }); }, init:function(){ methods.setOffsetTop(); methods.isShow(); methods.scroll(); } }; methods.init(); } //第二种方法 var exist=(function($){ var timer=null, temp=[].slice.call($('.container')); ret={}; for(var i=0,len=temp.length-1;i<=len;i++){ ret[i]=temp[i]; } var isExist=function(winTop,winEnd){ for(var i in ret){ console.log(ret); var item=ret[i], eleTop=item.offsetTop, eleEnd=eleTop+item.offsetHeight; if((eleTop>winTop&&eleTop<=winEnd)||(eleEnd>winTop&&eleEnd<=winEnd)){ $(item).css('background','none'); new Tab($(item).attr('id'),data).init; delete ret[i]; } } } return { timer:timer; isExist:isExist; }; })($); //第三种方法 Zepto(function ($) { var swiper = new Swiper('.swiper-container', { pagination: '.swiper-pagination', paginationClickable: true, autoplay: 3000, loop: true, autoplayDisableOnInteraction: false }); (function lazyLoad() { var imgs = $(".lazyLoad"); var src = ''; $.each(imgs, function (index, item) { src = $(item).attr('data-src'); $(item).attr('src', src); }); })(); }); $(function () { var lazyLoadTimerId = null; /// 智能加载事件 $(window).bind("scroll", function () { clearTimeout(lazyLoadTimerId); lazyLoadTimerId = setTimeout(function () { // 延迟加载所有图片 var isHttp = (location.protocol === "http:"); $("#ym_images img").each(function () { var self = $(this); if (self.filter(":above-the-fold").length > 0) { var originUrl = self.attr("data-original"); self.attr("src", originUrl); } }); }, 500); }); }); ``` - 某年某月的1号为星期几 ```javascript var weekday = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]; weekday[new Date(2015, 9, 1).getDay()]; //2015年10月1号 ``` #### 2. Mobile - js - [js 判断IOS, 安卓](http://caibaojian.com/browser-ios-or-android.html) ```javascript var u = navigator.userAgent, app = navigator.appVersion; var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器 var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端 alert('是否是Android:'+isAndroid); alert('是否是iOS:'+isiOS); ``` #### 3. [微信 weixin](http://loo2k.com/blog/detecting-wechat-client/) - UserAgent 判断微信客户端 ```javascript // Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12F70 MicroMessenger/6.1.5 NetType/WIFI function isWechat() { var ua = navigator.userAgent.toLowerCase(); return /micromessenger/i.test(ua) || /windows phone/i.test(ua); } ``` - JS接口安全域名不填写,分享onMenuShareAppMessage直接会取默认值。 ```javascript // 分享onMenuShareAppMessage直接会取默认值 ``` - 关闭当前页面 ```javascript WeixinJSBridge.call('closeWindow'); ``` - [支付接口方法调用必须在addevent里边调用](http://www.cnblogs.com/true_to_me/p/3565039.html) ```javascript document.addEventListener('WeixinJSBridgeReady', function onBridgeReady(){ that.initOrder(); }, false); ``` - 支付接口方法调用必须在 ```javascript WeixinJSBridge.invoke('getBrandWCPayRequest', d, function(res){ if(res.err_msg == "get_brand_wcpay_request:ok"){ // alert("支付成功"); // union.release(d.orderId); resetUrl(); paySuccess('home', d.orderId); } else { cancelOrder(d.orderId); // alert(res.err_msg); } loading.hide(); }); ``` - 瀑布流无限加载实例 ```javascript // be dependent on jquery & jquery.infinitescroll.min.js // insert this '
' to your page.html (function($){ $(function(){ var $container = $('.list-wrap-gd'); function layOutCallBack() { $container.imagesLoaded(function(){ $container.masonry({ itemSelector: '.item-bar', gutter: 10 }); }); $container.imagesLoaded().progress( function() { $container.masonry('layout'); }); } layOutCallBack(); $container.infinitescroll({ navSelector : "#more", nextSelector : "#more a", itemSelector : ".item-bar", pixelsFromNavToBottom: 300, loading:{ img: "/images/masonry_loading.gif", msgText: ' ', finishedMsg: "已经到最后一页", finished: function(){ $("#more").remove(); $("#infscr-loading").hide(); } }, errorCallback:function(){ $(window).unbind('.infscr'); }, pathParse: function (path, nextPage) { var query = ""; var keyword=$("#search_keyword").val(); var cat_id=$("#cat_id").val(); var brand_id=$("#brand_id").val(); var country_id = $("#country_id").val(); query = query + "&namekeyword="+keyword; query = query +"&cat_id="+cat_id query = query + "&brand_id=" + brand_id; query = query + "&country_id=" + country_id; path = [path,query]; return path; } }, function(newElements) { var $newElems = $( newElements ).css({ opacity: 0 }); $newElems.imagesLoaded(function(){ $newElems.animate({ opacity: 1 }); $container.masonry( 'appended', $newElems, true ); layOutCallBack(); }); }); }); })(jQuery); ``` - [iOS,Safari浏览器,input等表单focus后fixed元素错位问题](https://www.snip2code.com/Snippet/176582/--iOS-Safari----input---focus-fixed-----) ```javascript if( /iPhone|iPod|iPad/i.test(navigator.userAgent) ) { $(document).on('focus', 'input, textarea', function() { $('header').css("position", 'absolute'); $('footer').css("position", 'absolute'); }); $(document).on('blur', 'input, textarea', function() { $('header').css("position", 'fixed'); $('footer').css("position", 'fixed'); }); } ``` - 得到地理位置 ```javascript function getLocation(callback){ if(navigator.geolocation){ navigator.geolocation.getCurrentPosition( function(p){ callback(p.coords.latitude, p.coords.longitude); }, function(e){ var msg = e.code + "\n" + e.message; } ); } } ``` - [rem计算适配](http://isux.tencent.com/web-app-rem.html) ```javascript (function(doc, win){ var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function(){ var clientWidth = docEl.clientWidth; if(!clientWidth) return; docEl.style.fontSize = 20 * (clientWidth / 320) + 'px'; }; if(!doc.addEventListener) return; win.addEventListener(resizeEvt, recalc, false); doc.addEventListener('DOMContentLoaded', recalc, false); })(document, window); ``` - [另外一种rem方案](http://www.html-js.com/article/3041) ```javascript var dpr, rem, scale; var docEl = document.documentElement; var fontEl = document.createElement('style'); var metaEl = document.querySelector('meta[name="viewport"]'); dpr = window.devicePixelRatio || 1; rem = docEl.clientWidth * 2 / 10; scale = 1 / dpr; // 设置viewport,进行缩放,达到高清效果 metaEl.setAttribute('content', 'width=' + dpr * docEl.clientWidth + ',initial-scale=' + scale + ',maximum-scale=' + scale + ', minimum-scale=' + scale + ',user-scalable=no'); // 设置data-dpr属性,留作的css hack之用 docEl.setAttribute('data-dpr', dpr); // 动态写入样式 docEl.firstElementChild.appendChild(fontEl); fontEl.innerHTML = 'html{font-size:' + rem + 'px!important;}'; // 给js调用的,某一dpr下rem和px之间的转换函数 window.rem2px = function(v) { v = parseFloat(v); return v * rem; }; window.px2rem = function(v) { v = parseFloat(v); return v / rem; }; window.dpr = dpr; window.rem = rem; ``` - 获取js所在路径 ```js function getJsDir (src) { var script = null; if (src) { script = [].filter.call(document.scripts, function (v) { return v.src.indexOf(src) !== -1; })[0]; } else { script = document.scripts[document.scripts.length - 1]; } return script ? script.src.substr(0, script.src.lastIndexOf('/')) : script; } ``` - 从全局捕获错误 ```js window.onerror = function (errMsg, scriptURI, lineNumber, columnNumber, errorObj) { setTimeout(function () { var rst = { "错误信息:": errMsg, "出错文件:": scriptURI, "出错行号:": lineNumber, "出错列号:": columnNumber, "错误详情:": errorObj }; alert(JSON.stringify(rst, null, 10)); }); }; ``` - [如何通过 js 修改微信浏览器的title?](https://www.zhihu.com/question/26228251/answer/32405529) ```javascript var $body = $('body'); document.title = 'title'; // hack在微信等webview中无法修改document.title的情况 var $iframe = $('').on('load', function(){ setTimeout(function(){ $iframe.off('load').remove() }, 0) }).appendTo($body) ``` #### 1. 常用方法 - js - 字符串长度截取 ```js function cutstr(str, len) { var temp, icount = 0, patrn = /[^\x00-\xff]/, strre = ""; for (var i = 0; i < str.length; i++) { if (icount < len - 1) { temp = str.substr(i, 1); if (patrn.exec(temp) == null) { icount = icount + 1 } else { icount = icount + 2 } strre += temp } else { break; } } return strre + "..." } ``` - 替换全部 ```js String.prototype.replaceAll = function(s1, s2) { return this.replace(new RegExp(s1, "gm"), s2) } ```` - 清除空格 ```js String.prototype.trim = function() { var reExtraSpace = /^\s*(.*?)\s+$/; return this.replace(reExtraSpace, "$1") } ``` - 清除左空格/右空格 ```js function ltrim(s){ return s.replace( /^(\s*| *)/, ""); } function rtrim(s){ return s.replace( /(\s*| *)$/, ""); } ``` - 判断是否以某个字符串开头 ```js String.prototype.startWith = function (s) { return this.indexOf(s) == 0 } ``` - 判断是否以某个字符串结束 ```js String.prototype.endWith = function (s) { var d = this.length - s.length; return (d >= 0 && this.lastIndexOf(s) == d) } ``` - 转义html标签 ```js function HtmlEncode(text) { return text.replace(/&/g, '&').replace(/\"/g, '"').replace(//g, '>') } ``` - 时间日期格式转换 ```js Date.prototype.Format = function(formatStr) { var str = formatStr; var Week = ['日', '一', '二', '三', '四', '五', '六']; str = str.replace(/yyyy|YYYY/, this.getFullYear()); str = str.replace(/yy|YY/, (this.getYear() % 100) > 9 ? (this.getYear() % 100).toString() : '0' + (this.getYear() % 100)); str = str.replace(/MM/, (this.getMonth() + 1) > 9 ? (this.getMonth() + 1).toString() : '0' + (this.getMonth() + 1)); str = str.replace(/M/g, (this.getMonth() + 1)); str = str.replace(/w|W/g, Week[this.getDay()]); str = str.replace(/dd|DD/, this.getDate() > 9 ? this.getDate().toString() : '0' + this.getDate()); str = str.replace(/d|D/g, this.getDate()); str = str.replace(/hh|HH/, this.getHours() > 9 ? this.getHours().toString() : '0' + this.getHours()); str = str.replace(/h|H/g, this.getHours()); str = str.replace(/mm/, this.getMinutes() > 9 ? this.getMinutes().toString() : '0' + this.getMinutes()); str = str.replace(/m/g, this.getMinutes()); str = str.replace(/ss|SS/, this.getSeconds() > 9 ? this.getSeconds().toString() : '0' + this.getSeconds()); str = str.replace(/s|S/g, this.getSeconds()); return str } ``` - 判断是否为数字类型 ```js function isDigit(value) { var patrn = /^[0-9]*$/; if (patrn.exec(value) == null || value == "") { return false } else { return true } } ``` - 判断具体类型 ```js function getType(a) { var typeArray = Object.prototype.toString.call(a).split(" "); return typeArray[1].slice(0, -1); } ``` - 设置cookie值 ```js function setCookie(name, value, Hours) { var d = new Date(); var offset = 8; var utc = d.getTime() + (d.getTimezoneOffset() * 60000); var nd = utc + (3600000 * offset); var exp = new Date(nd); exp.setTime(exp.getTime() + Hours * 60 * 60 * 1000); document.cookie = name + "=" + escape(value) + ";path=/;expires=" + exp.toGMTString() + ";domain=360doc.com;" } ``` - 获取cookie值 ```js function getCookie(name) { var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)")); if (arr != null) return unescape(arr[2]); return null } ``` - 加载样式文件表 ```js function LoadStyle(url) { try { document.createStyleSheet(url) } catch(e) { var cssLink = document.createElement('link'); cssLink.rel = 'stylesheet'; cssLink.type = 'text/css'; cssLink.href = url; var head = document.getElementsByTagName('head')[0]; head.appendChild(cssLink) } } ``` - 返回脚本内容 ```js function evalscript(s) { if(s.indexOf(']*?>([^\x00]*?)<\/script>/ig; var arr = []; while(arr = p.exec(s)) { var p1 = /]*?src=\"([^\>]*?)\"[^\>]*?(reload=\"1\")?(?:charset=\"([\w\-]+?)\")?><\/script>/i; var arr1 = []; arr1 = p1.exec(arr[0]); if(arr1) { appendscript(arr1[1], '', arr1[2], arr1[3]); } else { p1 = /([^\x00]+?)<\/script>/i; arr1 = p1.exec(arr[0]); appendscript('', arr1[2], arr1[1].indexOf('reload=') != -1); } } return s; } ``` - 清除脚本内容 ```js function stripscript(s) { return s.replace(/.*?<\/script>/ig, ''); } ``` - 动态加载脚本文件 ```js function appendscript(src, text, reload, charset) { var id = hash(src + text); if(!reload && in_array(id, evalscripts)) return; if(reload && $(id)) { $(id).parentNode.removeChild($(id)); } evalscripts.push(id); var scriptNode = document.createElement("script"); scriptNode.type = "text/javascript"; scriptNode.id = id; scriptNode.charset = charset ? charset : (BROWSER.firefox ? document.characterSet : document.charset); try { if(src) { scriptNode.src = src; scriptNode.onloadDone = false; scriptNode.onload = function () { scriptNode.onloadDone = true; JSLOADED[src] = 1; }; scriptNode.onreadystatechange = function () { if((scriptNode.readyState == 'loaded' || scriptNode.readyState == 'complete') && !scriptNode.onloadDone) { scriptNode.onloadDone = true; JSLOADED[src] = 1; } }; } else if(text){ scriptNode.text = text; } document.getElementsByTagName('head')[0].appendChild(scriptNode); } catch(e) {} } ``` - 返回按ID检索的元素对象 ```js function $(id) { return !id ? null : document.getElementById(id); } ``` - 检验URL链接是否有效 ```js function getUrlState(URL){ var xmlhttp = new ActiveXObject("microsoft.xmlhttp"); xmlhttp.Open("GET",URL, false); try{ xmlhttp.Send(); }catch(e){ }finally{ var result = xmlhttp.responseText; if(result){ if(xmlhttp.Status==200){ return(true); }else{ return(false); } }else{ return(false); } } } ``` - 获取当前路径 ```js var currentPageUrl = ""; if (typeof this.href === "undefined") { currentPageUrl = document.location.toString().toLowerCase(); }else { currentPageUrl = this.href.toString().toLowerCase(); } ``` - 获取页面高度 ```js function getPageHeight(){ var g = document, a = g.body, f = g.documentElement, d = g.compatMode == "BackCompat" ? a : g.documentElement; return Math.max(f.scrollHeight, a.scrollHeight, d.clientHeight); } ``` - 获取页面可视宽度 ```js function getPageViewWidth(){ var d = document, a = d.compatMode == "BackCompat" ? d.body: d.documentElement; return a.clientWidth; } ``` - 获取页面宽度 ```js function getPageWidth(){ var g = document, a = g.body, f = g.documentElement, d = g.compatMode == "BackCompat"? a: g.documentElement; return Math.max(f.scrollWidth, a.scrollWidth, d.clientWidth); } ``` - 随机数时间戳 ```js function uniqueId(){ var a=Math.random,b=parseInt; return Number(new Date()).toString()+b(10*a())+b(10*a())+b(10*a()); } ``` - 日期格式化函数 ```js Date.prototype.format = function(format){ var o = { "M+" : this.getMonth()+1, //month "d+" : this.getDate(), //day "h+" : this.getHours(), //hour "m+" : this.getMinutes(), //minute "s+" : this.getSeconds(), //second "q+" : Math.floor((this.getMonth()+3)/3), //quarter "S" : this.getMilliseconds() //millisecond }; if(/(y+)/.test(format)) format=format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); for(var k in o){ if(new RegExp("("+ k +")").test(format)) format = format.replace(RegExp.$1,RegExp.$1.length==1 ? o[k] :("00"+ o[k]).substr((""+ o[k]).length)); } return format; } //调用 //new Date().format("yyyy-MM-dd hh:mm:ss"); ``` - 返回顶部的通用方法 ```js function backTop(btnId) { var btn = document.getElementById(btnId); var d = document.documentElement; var b = document.body; window.onscroll = set; btn.style.display = "none"; btn.onclick = function() { btn.style.display = "none"; window.onscroll = null; this.timer = setInterval(function() { d.scrollTop -= Math.ceil((d.scrollTop + b.scrollTop) * 0.1); b.scrollTop -= Math.ceil((d.scrollTop + b.scrollTop) * 0.1); if ((d.scrollTop + b.scrollTop) == 0) clearInterval(btn.timer, window.onscroll = set); }, 10); }; function set() { btn.style.display = (d.scrollTop + b.scrollTop > 100) ? 'block': "none" } }; backTop('goTop'); ``` - 获得URL中GET参数值 ```js // 用法:如果地址是 test.htm?t1=1&t2=2&t3=3, 那么能取得:GET["t1"], GET["t2"], GET["t3"] function get_get(){ querystr = window.location.href.split("?") if(querystr[1]){ GETs = querystr[1].split("&"); GET = []; for(i=0;i= 0) { bn = source[0].charAt(len - i - 1); //取得某个位数前一位上的数字 } sum = sum + Number(n); if (sum != 0) { str = dw[Number(n)].concat(str); //取得该数字对应的大写数字,并插入到str字符串的前面 if (n == '0') sum = 0; } if (len - i - 1 >= 0) { //在数字范围内 if (k1 != 3) { //加小单位 if (bn != 0) { str = dw1[k1].concat(str); } k1++; } else { //不加小单位,加大单位 k1 = 0; var temp = str.charAt(0); if (temp == "万" || temp == "亿") //若大单位前没有数字则舍去大单位 str = str.substr(1, str.length - 1); str = dw2[k2].concat(str); sum = 0; } } if (k1 == 3){ //小单位到千则大单位进一 k2++; } } //转换小数部分 var strdig = ""; if (dig != "") { var n = dig.charAt(0); if (n != 0) { strdig += dw[Number(n)] + "角"; //加数字 } var n = dig.charAt(1); if (n != 0) { strdig += dw[Number(n)] + "分"; //加数字 } } str += "元" + strdig; } catch(e) { return "0元"; } return str; } ``` 转载来源:https://github.com/jsfront