开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
博客专区 - 开源中国社区

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

使用Remix编译和部署以太坊智能合约

![以太坊remix汇智网](https://static.oschina.net/uploads/img/201804/20113835_7UHh.png "以太坊remix汇智网") Remix 是一个开源的 Solidity 智能合约开发环境,提供基本的编译、部署至本地或测试网络、执行合约等功能。Solidity 是 以太坊Ethereum 官方设计和支持的开发语言,专门用于编写智能合约。 本文希望将一个很简单的代币合约(只能发行和转账),部署在本地和测试网络上,测试下它的功能。 详细描述使用 Remix 的步骤及使用上可能碰到的问题。 之前开发过以太坊Ethereum智能合约,但没有记录过开发的过程和碰到的问题,觉得挺可惜。这次重新开始,从最基础开始,一步步学习。 ### 开发环境 不需要安裝,直接在任何浏览器启动 Remix。 ![以太坊remix汇智网](https://static.oschina.net/uploads/img/201804/20113913_wFJy.png "以太坊remix汇智网") ### 取得代币合约 代币合约的范例很多,Ethereum 官网有提供一个最小可执行的代币合约(MINIMUM VIABLE TOKEN): ``` pragma solidity ^0.4.0; contract MyToken { /* This creates an array with all balances */ mapping (address => uint256) public balanceOf; /* Initializes contract with initial supply ...
笔阁 发布于 2天前 阅读 219

AI领袖、应用指南、窥见风口……你还能从这场全球峰会中获得更多

时代的潮流浩浩荡荡,上升到国家发展战略与基础设施的人工智能,正以不可思议的速度占据着我们生活的头条。如果说2017年宣告了人工智能接棒时代脉搏,那么2018年的人工智能将作为颠覆性变革力量迭代世界机器的运作。
GAITC

Vue-cli(四) 项目中引入Axios

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。 从浏览器中创建 XMLHttpRequest 从 node.js 发出 http 请求 支持 Promise API 拦截请求和响应 转换请求和响应数据 取消请求 自动转换JSON数据 客户端支持防止 CSRF/XSRF 安装Axios 我们直接使用npm install来进行安装。 npm install axios --save 由于axios是需要打包到生产环境中的,所以我们使用--save来进行安装。 也可以选择使用cnpm来安装,加快安装速度。 引入Axios 只需要在需要的vue文件中引入axios就可以。 import axios from 'axios' 使用 发送一个GET请求 //通过给定的ID来发送请求 axios.get('/user?ID=12345') .then(function(response){ console.log(response); }) .catch(function(err){ console.log(err); }); //以上请求也可以通过这种方式来发送 axios.get('/user',{ params:{ ID:12345 } }) .then(function(response){ console.log(response); }) .catch(function(err){ console.log(err); }); 发送一个POST请求 axios.post('/user',{ firstName:'Fred', lastName:'Flintstone' }) .then(function(res){ console.log(res); }) .catch(funct...
阿刚ABC 发布于 3天前 阅读 244

手把手教你打造一个可视化接口自动化测试系统

现如今,接口开发几乎成为一个互联网公司的标配了,无论是web还是app,哪怕是小程序,都离不开接口作为支撑,当然,这里的接口范围很广,从http到websocket,再到rpc,只要能实现数据通信的都可以称之为接口,面临着如此庞大的接口数据,如果更好的管理和测试他们都是一个比较头疼的问题,更主要的是很多业务场景是需要多个接口进行联调的,因此在接口开发完成后,一轮自动化测试能快速反馈出当前系统的状况,面对这样的需求,一个对测试人员友好的可视化接口自动化测试系统就显得必不可少了。那么,我们今天就来和大家聊聊如何实现一个小型的http接口自动化测试系统! 我们拿DOClever 做为这套系统的范本进行阐述,因为它是开源的,源码随时可以从GitHub和OSChina上获取,同时,这套系统内置了完整的自动化测试框架,从无需一行代码的UI测试用例编写,到更强大更灵活的代码模式,都提供了很友好的支持。 系统需求: 1.   能在一个测试用例里可以对一个接口自由编辑其入参,运行并判断出参是否正确,同时可以查看该接口完整的输入输出数据 2.   能在一个测试用例里可以对一组接口进行测试,自由调整他们的执行顺序,并根据上一接口的出参作为下一接口的入参条件。 3.  ...
ansun123 发布于 3天前 阅读 2189 点赞 7

Sass指南:Sass前世今生和如何安装以及使用Webstorm直接支持编写

Sass简易指南   什么是Css预处理器?   CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这种语言进行编码工作。   通俗的说,“CSS 预处理器用一种专门的编程语言,进行 Web 页面样式设计,然后再编译成正常的 CSS 文件,以供项目使用。CSS 预处理器为 CSS 增加一些编程的特性,无需考虑浏览器的兼容性问题”,例如你可以在 CSS 中使用变量、简单的逻辑程序、函数(如右侧代码编辑器中就使用了变量$color)等等在编程语言中的一些基本特性,可以让你的 CSS 更加简洁、适应性更强、可读性更佳,更易于代码的维护等诸多好处。   CSS 预处理器语言: - Sass(SCSS) - LESS - Stylus - Turbine - Swithch CSS - CSS Cacheer - DT CSS   什么是 Sass?   l  官方定义 Sass 是一门高于 CSS 的元语言,它能用来清晰地、结构化地描述文件样式,有着比普通 CSS 更加强大的功能。 Sass 能够提供更简洁、更优雅的语法,同时提供多种功能来创建可维护和管理的样式表。   l  Sass 前世今生 Sass 是最早的 CSS 预处理语言,有比 LESS 更为强大的功能,不过其一开始的缩进式...
GeCoder 发布于 3天前 阅读 113

总结几个关于 jQuery 用法

#### 有关 jquery 用法 #### 目录: - $.trim() - $.inArray() - $.getJSON() - 事件委托 on #### 进入正文 ing... ##### 1. jQuery.trim(str) ##### 解释:从字符串的开头和结尾删除空格。 ``` var str=' hello hi '; var new_str=$.trim(str); console.log(str.length) // 12 console.log(new_str.length) // 8 ``` ##### 比如 提交表单时,要获取用户的val()值,防止用户输入的空格对后续操作造成影响,这里就可以用 trim () ``` var username=$.trim($('#username').val()); ``` ##### 2.jQuery.inArray( value, array [, fromIndex ] ) ##### 它的方法类似于JavaScript的原生.indexOf()方法,没有找到匹配元素时它返回-1。如果数组第一个元素匹配value(参数) ,那么$.inArray()返回0。 ``` var fruits=['apple','banner','orange','pear']; var mine='orange'; var res=$.inArray(mine,fruits); if(res==-1){ // 不存在 console.log('sorry,没有你喜欢的!') }else{ console.log('有你的!') } ``` ##### 顺便来回忆下原生js 对于字符串 indexOf 的用法 ##### 语法:stringObject.indexOf(searchvalue,fromindex) #### 注意: ###### (1) indexOf() 方法对大小写敏感...
前端喵 发布于 1周前 阅读 121

js异步ajax实现避免页面重复提交

### 1 ajax概述 ajax同步与异步区别,在于: - 同步基本是秉持着顺序执行的,为此在传送数据期间,浏览器一直处于等待状态,如果数据量过多或者网速过慢,就会出现假死情况(此内容在笔者此前博文[<异步ajax实现顺序执行>](https://my.oschina.net/yangyishe/blog/1586196)中也有提出),所以当代ajax已经基本不再使用同步配置了; - 异步则是发送后,接下来该干什么干什么,类似于行军途中,不断派出的斥候与正常军队行进之间的关系.只是有时候有些斥候的信息比较重要,在军队或下一个斥候派出前,必须得到这些斥候的信息,才好往下走.于此衍生了各种可能存在的问题,其中一个新人常遇到的问题就是:**连续触发相同事件导致的重复提交**. --- ### 2 问题描述 需要说明的是,重复提交对于不同情况有着不同的解决策略. 本文所述的方法,主要针对的是正常使用情况下,**用户对于相同事件的误重复触发**,譬如对于一个按钮,由于鼠标不好使或者新用户的不了解,连续点击两次以上.这种情况下,**从页面js设计就可以解决**; 与之正常使用情况对应的,即是**异常情况,如某些用户恶意频繁发送请求**,以获取一个网站的用户登录信息,这类问题就必然要和后台互动才能解决了,**不在本文讨论范围内**; 以下分情况讨...
社哥 发布于 1周前 阅读 123

ES6 javascript 实用开发技巧

# ES6 实用开发技巧 ## 定义变量/常量 ES6 中新增加了 `let` 和 `const` 两个命令,`let` 用于定义变量,`const` 用于定义常量 两个命令与原有的 `var` 命令所不同的地方在于,`let, const` 都是块级作用域,其有效范围仅在代码块中,实例如下: ```js //es5 if(1==1){ var b = 'foo'; } console.log(b);//foo //es6 if(1==1){ let b = 'foo'; } console.log(b);//undefined ``` **定义常量对象** ```js const a = {a:1,b:2}; a.b = 3; console.log(a);//{a:1,b:3} ``` 上例中,常量 a 中的内容在定义后,再进行修改依然有效,原因是对于对象类型的使用是指针式引用,常量只是指向了对象的指针,对象本身的内容却依然可以被修改,注意,数组(`Array`) 也是对象; 那么如果在定义常量时使用基础数据类型:`string`, `number`, `boolean` 等 ```js const a = 1; a = 2;// Uncaught TypeError: Assignment to constant variable. ``` 在使用中,建议使用 `let` 与 `const` 完全代替 `var` 命令 ## 数值扩展 **转换** `Number.parseInt` - 将字符串或数字转换为整数 `Number.parseFloat` - 将字符串或数字转换为浮点数 `Number.parseInt`, `Number.parseFloat` 与 `parseInt`, ...
TerryZ 发布于 1周前 阅读 596 评论 1 点赞 1

React Render Props 模式

Render Props模式是一种非常灵活复用性非常高的模式,它可以把特定行为或功能封装成一个组件,提供给其他组件使用让其他组件拥有这样的能力,接下来我们一步一步来看React组件中如何实现这样的功能。
开源中国最帅没有之一 发布于 2周前 阅读 104

ES6 关于对象的扩展

#### 今天来简单说下ES6 中对象的扩展 ##### 首先回顾传统的对象表示法 ``` let person={ 'name':'zhang', 'age':'20', 'play':function(){ alert('play!') } } ``` ##### 再来看看ES6中写法 ``` var name='zhang'; var age=20; var person={name,age}; console.log(person) // {name: "zhang", age: 20}; ``` ##### 这是对象的属性,那么对象的方法呢 ``` var person={ play(){ alert('ES6 中的play!'); } } ``` ##### 不难看出,ES6 在写法上简洁了很多。 ##### 字面量表达式 ###### 即用字面量定义一个对象的时候,可以用表达式作为对象的属性名或者方法名。 ##### 看例子 ``` var m="my"; var n="name"; var p="play"; var person={ [ m+n ]:'zhang', [ m+p ](){ return "play"; } }; console.log(person.myname)// zhang console.log(person.myplay)// play ``` ##### 上面person对象的定义,其中属性名和方法名都是用中括号[],里面是字符串相加的表达式, ##### 所以说用字面量(即大括号{})定义对象的时候,属性名和方法名可以是一个表达式,表达式的运算结果就是属性名或者方法名。 ##### 还有一些对象新增的函数 ##### (1)Object.is() ##### 函数的作用:比较俩个...
前端喵 发布于 2周前 阅读 49 评论 1

合格前端系列第十一弹-初探 Nuxt.js 秘密花园

初探 Nuxt.js 秘密花园
qiangdada 发布于 3周前 阅读 297 点赞 1

前端路由的简单实现

年轻时吃过的苦,都会成为你未来的路。
lonelydawn 发布于 3周前 阅读 438 评论 2

使用python tkinter 制作简单信息录入处理

主要有以下几个文件,简单说明一下 1.db.py 处理sql 逻辑 2.login.py 作登录使用(现在还没有实现连接数据库,只是为了功能实现) 3.stjy.py 主体窗口 4.test.db数据文件(使用sqlite3) #db.py 主要代码,第一次执行时,把 “# create_table()”中的#去掉,执行完后,在加上 import sqlite3 def create_table(): conn = sqlite3.connect('test.db') cur=conn.cursor() # cur=conn.cursor() try: create_tb_cmd=''' CREATE TABLE IF NOT EXISTS student_info (id INTEGER PRIMARY KEY AUTOINCREMENT, name text, phone text, qq text, weixin text, prid_school text, cslt_course text, cslt_from text, dt text, provider text, note text ) ''' #create table # cur.execute(create_tb_cmd) cur.execute(create_tb_cmd) print('create table sucess') except Exceptio...
易野 发布于 3周前 阅读 236

Vue从服务器动态获取router

现在项目为了快速开发而采用了laravel+vue+element-ui,但是vue相对于来说是一个单页应用,权限要从后台拉取,这时候emmm......
o0无忧亦无怖 发布于 3周前 阅读 543 评论 6 点赞 2

Javascript 函数声明和函数表达式的区别

qq:853089986@qq.com
张泽立 发布于 3周前 阅读 327

利于前台开发的两大工具flex和vue

本文写于一次内部的技术研讨会,文中口语化的内容较多.除了安利两个工具外,也写出了我在前台上想过的一些东西,希望能对大家有所启发吧.
社哥 发布于 3周前 阅读 394

ES6 对数组的扩展

#### 一、Array.of()函数 ##### 函数作用:将一组值,转换成数组 ``` var arr=Array.of(1,2,3,4) console.log(arr) // [1,2,3,4] ``` #### 二、Array.from()函数 ##### 1.可以将类似数组的对象或者可遍历的对象转换成真正的数组。 ##### 比如:getElementsByTagName等 ``` let ele = document.getElementsByTagName('a'); ele instanceof Array; //结果:false,不是数组 ele instanceof Object; //结果:true,是对象 ``` ``` Array.from(ele) instanceof Array; //结果:true,是数组 ``` ##### 2.将字符串转换成数组 ``` let str='hello'; let newarr=Array.from(str) console.log(newarr) // ['h','e','l','l','o'] ``` #### 三、find()函数 ##### 函数作用:找出数组中符合条件的第一个元素。 ``` let arr=[1,3,5,6,7] let x=arr.find(function(num){ return num<8 // 1 num>2 //3 num>9 // underfined }) ``` ##### 可以看出 find()函数的参数是一个匿名函数,数组的每个元素都会进入匿名函数执行,直到结果为true,find函数就会返回value的值,如果所有元素都不符合匿名函数的条件,find( )函数就会返回undefind。 #### 四、findIndex()函数 ##### 函数作用:返回符合...
前端喵 发布于 3周前 阅读 157 评论 1

【全文】狼叔:如何正确的学习Node.js

# 说明 2017-12-14 我发了一篇文章《没用过Node.js,就别瞎逼逼》是因为有人在知乎上黑Node.js。那篇文章的反响还是相当不错的,甚至连著名的hax贺老都很认同,下班时读那篇文章,竟然坐车的还坐过站了。大家可以很明显的感到Node.js的普及度还不够,还存很多误解。甚至说很多小白用户也得不到很好的学习。大神都功成身退,书也跟不上,大部分都是2013年左右的,Node.js版本都是基于v0.10左右的,现在已经v9了。想想也是有点可惜,使用如此广泛的Node.js被大家默认,却没人来科普。 反思之后,我就想准备一个科普的Live,于是就有了《狼叔:如何正确学习 Node.js?》,相信能够对很多喜欢Node.js的朋友有所帮助。Live已完成目前1200多人,230人评价,平均4.8+,还算是一个比较成功的Live。现整理出来,希望对更多朋友有用。 - 感谢 [@justjavac](https://my.oschina.net/justjavac) 大神的[ 免费的计算机编程类中文书籍](https://github.com/justjavac/free-programming-books-zh_CN/#%E7%BD%AE%E9%A1%B6) 收录并推荐 - [github地址,以后在仓库里更新](https://github.com/i5ting/How-to-learn-node-correctly) - [Live地址,声音版](https://www.zhihu.com/lives/9286875...
i5ting 发布于 1个月前 阅读 627 评论 2 点赞 5

WebGL 3D 电信机架实战之数据绑定

在前端中,视图层和数据层需要进行单向或者双向数据绑定,大家都已经不陌生了,有时候 2D 做的比较顺了之后,就会想要挑战一下 3D,不然总觉得痒痒的。这个 3D 机架的 Demo 我觉得非常有代表性,首先,3D 机架用途非常广,尤其是在电信行业,就算不是机架,在比如工业方面 3D 模型以及数据绑定的应用也是非常广泛的,毕竟现在工业物联网已经是大趋势了。
xhload3d 发布于 1个月前 阅读 298 点赞 1

webpack配置(第四步:html篇(进阶篇))

html-webpack-plugin插件有许多属性可以设置,可以自行百度查看; 这里主要是使用chunks属性来配置,用 chunksSortMode: 'manual',属性来使得引入文件根据chunks的排序顺序引入
悬河 发布于 1个月前 阅读 277

解决echarts 无法重新刷新的问题

在特殊情况下,我们可能是用echarts实例并且setOption()但无法刷新表格内容,例如:我们修改了div容器的内部标签等等... 原因可能是我们破坏了第一次渲染的div容器的结构, echarts的渲染逻辑是这样的:  如果未实例化则进行实例化过程,在此期间会在div容器生成一个 _echarts_instance_ 属性, 该属性值其实就是当前echarts的ID,然后进行后边的渲染操作... 当我们刷新已经实例化的echarts图表时,echarts会先匹配改div容器上的_echarts_instance_属性值是否与实例对象的ID一样,如果一样则会在原有的结构上进行渲染,但是因为我破坏了原有的结构,所以无法重新渲染出表格内容,所以我们可以执行如下代码: document.getElementById('div的ID').setAttribute('_echarts_instance_', '') 这样div的_echarts_instance_值就不会被匹配到,这样echarts就会像渲染新的图标一样渲染出来   注:这样的操作会重新渲染echarts的div容器结构,也就是重新操作了dom,会影响性能...
JamesView 发布于 1个月前 阅读 281

前端开发框架整理

前端开发框架
JUKE 发布于 6小时前 阅读 6

Html页面的<img>标签图片无法显示

如果你也曾复制过一些类似腾讯、百度等各大网站的文章,你会发现复制下来发表之后经常出现图片无法显示,这是什么原因呢? 例如: <body> <img src="http://upload.techweb.com.cn/2017/0106/1483690985396.jpg" /> </body> 解决方案 使用Referer Meta标签控制referer,在H5 的 header加入meta <meta name="referrer" content="never">  即可修复! HTTP_REFERER介绍 HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。    简介       简而言之,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,通常被网站用来统计用户来源,是从搜索页面来的,还是从其他网站链接过来,或是从书签等访问,以便网站合理定位,服务器藉此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。        Referer有时也被用作防盗链, 即下载时判断来源地址是不是在网站域名之内...
无语年华 发布于 2个月前 阅读 63

埋点、无埋点、全埋点大扫盲

转自:http://www.chinawebanalytics.cn/auto-event-tracking-good-bad-ugly/   有好多朋友问我,无埋点是什么,不加代码就能监测了? 我总觉得应该写一篇文章以正视听。 实际上,在2014年我去旧金山参加eMetrics Summit的时候,Heap Analytics就展出了他们的“无埋点”产品——这家公司也是以不需要埋点就能实现监测作为最主要卖点的(见我的这篇文章:明天的数字营销分析工具(下))。Heap的负责人告诉我,他们在2013年已推出了无埋点监测技术,为此才成立这家公司。采用类似技术的公司还有数家,因此这完全不是一个新技术,更不是一个垄断技术。   只是,那个时候还没有人把它称为无埋点,大家称它为“可视化监测部署”,或者“所见即所得的监测部署”。而且在2014年,中国几乎没有什么有影响力的创新digital analytics工具,而附着于这类工具之上的可视化或者不可视化、埋点或不埋点,自然无人提及。除了我的那篇文章,整个行业了无波澜。 似有好东西被埋没,养在深闺无人识的遗憾。或者你也该明白起一个好名字该有多重要。:P 而此时的彼岸,这一技术方案已然进入寻常百姓家,已非带着光环的神秘之物。 不过,随着我们国家的互联网数据行业突然蓬勃起来,诸多厂商一...
eyuang 发布于 3个月前 阅读 231

介绍两个好玩的和Github相关的Chrome扩展

1\. Octotree 默认的github网页里的代码显示没有我们在IDE里看到的直观,即代码文件所在的文件夹无法以树形层级结构显示在屏幕左边。 ![](https://upload-images.jianshu.io/upload_images/2085791-31fe9d996aa3f684.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 安装Octotree之后: ![](https://upload-images.jianshu.io/upload_images/2085791-251939f1850c212e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 方便多了。 ![](https://upload-images.jianshu.io/upload_images/2085791-4e8407682e05dc72.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 2\. Isometric Contributions github commit的统计页面比较平淡: ![](https://upload-images.jianshu.io/upload_images/2085791-f6548ab767c017e9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 安装了Isometric Contributions之后,这个统计页面会以柱状图显示出来,有趣多了: ![](https://upload-images.jianshu.io/upload_images/2085791-b821ad7ffa54fcb5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 要获取更多Jerry的原创技术文章,请关注公众号...
JerryWang_SAP 发布于 3小时前 阅读 3

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

从vue源码看观察者模式

源码解读设计模式系列文章将陆陆续续进行更新中 ~
qiangdada 发布于 3个月前 阅读 417 评论 1 点赞 1

TPYBoard开发板搭建与阿里云服务发送数据

   今天给大家带来的是TPYBoard V202开发板的一次测试项目使用心得。而测试项目就是给服务端发送硬件底层数据,而数据有产品名称,WF模块MAC地址,温湿度数据。        什么是MicroPython?     MicroPython是在单片机上可以跑的Python,也就是说,你可以通过Python脚 本语言开发单片机程序。     MicroPython遵守MIT协议开源,被授权人拥有复制、修改、发行和再授权的权 利。由剑桥大学的理论物理学家乔治?达明设计。和Arduino类似,但MicroPython 更强大。     MicroPython基于ANSIC,语法跟Python3基本一致,拥有自家的解析器、编译器 、 虚拟机和类库等。目前它支持基于32-bit的ARM处理器,比如STM32F405。也就 是说ARM处理器STM32F405上直接可运行Python语言,用Python语言来控制单片机。   什么是TPYBoard?     TPYBoard是以遵照MIT许可的MicroPython为基础,由TurnipSmart公司制作的一 款MicroPython开发板,它基于STM32F405单片机,通过USB接口进行数据传输。该 开发板内置4个LED灯、一个加速传感器,可在3V-10V之间的电压正常工作。     TPYBoard开发板让用户可以通过Python代码轻松控制微控制器的各种外设,比如 LED等,读取管脚电压,播放歌...
bodasisiter 发布于 3个月前 阅读 41

Delphi组件indy 10中IdTCPServer修正及SSL使用心得

``` Delphi组件indy 10中IdTCPServer修正及SSL使用心得 http://www.21tx.com 2005年07月14日 Blog BlueTrees indy 10终于随着Delphi2005发布了,不过indy套件在我的印象中总是复杂并且BUG不断,说实话,不是看在他一整套组件的面子上,我还是喜欢VCL原生的Socket组件,简洁,清晰。Indy9发展到了indy10几乎完全不兼容,可叹啊。言归正传。在使用IdTCPServer组件的时候发现了他的漏洞,他的OnConnec,OnExecute,OnDisconnect等事件是在其他线程中执行的,通常情况下这没有问题,但是在特殊的情况下会造成问题,如果其他部分的程序写得有问题就会出现漏洞。 我发现的漏洞是这样的,我在OnDisconnect事件中释放一个ListView的一个对应的Item,也就是,一个客户端离开的时候,界面上的ListView对应的项目删除。正常情况没有任何问题,但是,如果不断开连接直接关闭程序就会死掉,事实上我在程序中Form的CloseQuery事件中作了处理,在这个事件中我关闭连接,但是,没有效果,只有在程序中手动的点鼠标关闭才不会死掉,问题出在哪里? 问题出在这里,ListView是一个Windows的标准组件,释放他的一个Item是通过消息完成的,也就是说,我在OnDisconnect中在一个非主线程的线程中向...
vga 发布于 2个月前 阅读 24

快速开发 HTML5 WebGL 的 3D 斜面拖拽生成模型

如何在一个斜面上创建 3D 模型?如何通过拖拽创建 3D 模型?这些我们在实际项目中用到的概率也着实不低。我们知道,空间中存在无数个面,一个点和一条法线就能创建一个面,如何利用好这两个部分?
xhload3d 发布于 1个月前 阅读 1584 评论 2

npm install 报错chromedriver 记录

npm 安装 chromedriver 时,偶尔会出错,错误提示类似于: 可以使用下面的命令安装: npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver  
干掉熊猫我就是国宝 发布于 2个月前 阅读 37

随便写写 vue-electron的小项目

因为在公司里 百度云盘被屏蔽了。。用QQ邮箱几m的传着传着 就没动静了 所以想自己写一个上传和下载文件的小工具 初始化: vue-electron 中文文档 http://simulatedgreg.gitbooks.io/electron-vue/content/cn/  编写:写代码的结构和写常规的vue项目一样 按照一个个组件分割 axios 获取api接口的数据( 我后端增删改查用的node + express ) 遇到跨域问题 node设置一下请求允许就好 。在electron里面 是可以使用node的原生模块的!我试玩过exec 可以运行cmd的指令 , 但是莫名其妙的是 node的http的模块用不了 - -  是我使用姿势不对吗 打包:逻辑页面代码编写玩npm run build 就可以直接打包出exe 在package.json 里面可以设置打包的icon 在main index.js 可以设置初始化 window窗口打开的大小 打包成window的安装进程还在研究 。。找了几个插件明明只有30M打包成200M 。。过分了 最后 只是小菜鸟 一个简单的vue-electron window app 编写的小心得 哈哈 (个人总是喜欢写一些自己的小demo玩玩哈哈) 发个广告链接 github https://github.com/blilibili/code_warehouse 试用的话 请上传小图片哦 - - 我的服务器 只有2G 。。。  ...
danielYii 发布于 1个月前 阅读 21

使用环形队列触发延时任务

类似需求:“如果连续30s没有请求包(例如登录,消息,keepalive包),服务端就要将这个用户的状态置为离线”。   轮询处理 将所有任务都添加到某集合中,定时轮询扫描,如果达到条件则进行相关处理; let map = new Map(); function doAction(uid) { map.set(uid, new Date().getTime()); } setInterval(function(){ for(let uid of map.keys()) { if(+new Date() - map.get(uid) > 30000) { map.delete(uid); console.log(`${uid}超过30s未做任何操作,设置为离线!`); } } }, 10000); 方案的不足: 效率低下。已经被执行过记录,仍然会被扫描(只是不会出现在结果集中),存在大量的重复计算; 时效性差。时间误差取决于轮询的间隔;如果间隔过小,重复被扫描的次数更高,效率会变得更低下。 定时处理 每来一个任务,启动一个定时器,达到定时器时间,执行相关处理; function doAction(uid) { map.set(uid, new Date().getTime()); setTimeout(function() { console.log(`${uid}超过30s未做任何操作,设置为离线!`); }, 30000); } 方案的不足:     任务过多时占用内存过大   环形队列...
阿豪boy 发布于 1周前 阅读 14

记录一次手机端的怪异bug

这个bug的爆发在最近,客户反应某些iphone ios低版本的用户页面打不开。 开始以为是cookie不支持 或者localStorage不支持 或者没有微信授权。  后来经过测试以上怀疑都是正常的。 所以没办法只能用本办法第一段一段代码重新搬写进行测试。  最后发现原来是最近的一次代码更新中不小心用了es6的=>语法 ,这个语法在ios高版本中运行正常,而在低版本中直接报错,不易察觉。 通过在线工具将es6转换为es5 bug解决。  
lilugirl 发布于 2个月前 阅读 33 评论 3

videojs 自定义控件样式

小白级别继续,大咖绕路 这里只是在pc端搞里一下,不知道其他平台有什么问题,只是给大家个思路。 videojs的优缺点什么的,这里就不说了,百度一下,各位大咖,一大啪啦的讲解,研究了两天始终不知道怎么去自定义控件,videojs 有一个专门设计皮肤的网站(传送法阵:https://codepen.io/heff/pen/EarCt),但是搞了半天还是不懂怎么弄,最后在一篇文章中受到启发,其实很简单,暴力走起。 先搞一张图 好吧, 我承认,样式很low,这里就不吐槽设计了 ok,上代码 myPlayer = videojs('my-video', { 'controls': false, //关闭原来的,不然hover的时候总出来 'BigPlayButton': false, 'loop': true },function(){ var ctrlBar = createEle(); // 创建一个div节点 this.el().appendChild(ctrlBar); // 添加进去,css设置好样式就可以了 // 初始化音量宽度 var vol = this.volume(); $('.vol-box .vol-on').width(vol * 100); // 进度条自动前进 this.on('timeupdate', function(){ var curTime = this.currentTime(); var durTime = this.duration()...
宿管小阿姨 发布于 2个月前 阅读 92

使用 create-react-app 构建 react应用程序

本篇文章使用create-react-app作为脚手架,结合react技术栈(react + redux + react-router),构建一个简单的单页面应用demo。文章会一步步地讲解如何构建这么一个单页应用。
李晓艳 发布于 5天前 阅读 24

在python中使用csv读写CSV

csv文件格式是一种通用的电子表格和数据库导入导出格式。最近我调用RPC处理服务器数据时,经常需要将数据做个存档便使用了这一方便的格式。 简介
xiaoge2016 发布于 3个月前 阅读 34

Vue-router(一) HelloWorld

由于Vue在开发时对路由支持的不足,后来官方补充了vue-router插件,它在Vue的生态环境中非常重要,在实际开发中只要编写一个页面就会操作vue-router。要学习vue-router就要先知道这里的路由是什么?这里的路由并不是指我们平时所说的硬件路由器,这里的路由就是SPA(单页应用)的路径管理器。再通俗的说,vue-router就是我们WebApp的链接路径管理系统。 有的小伙伴会有疑虑,为什么我们不能像原来一样直接用<a></a>标签编写链接哪?因为我们用Vue作的都是单页应用,就相当于只有一个主的index.html页面,所以你写的<a></a>标签是不起作用的,你必须使用vue-router来进行管理。 本文档主要是一个Vue-router入门文档,需要先查看“Vue-cli搭建项目”文档,创建项目基础上实现以下功能。 安装vue-router vue-router是一个插件包,所以我们还是需要用npm来进行安装的。 在使用Vue-cli搭建项目时,有一个选项是选择是否安装vue-router的,如果已经安装就不需要安装了,如果未安装需要在项目根目录下通过执行以下命令进行安装: npm install vue-router --save-dev 如果你安装很慢,也可以用cnpm进行安装。 解读router/index.js文件 我们用vue-cli生产了我们的项目结构,你可以在...
阿刚ABC 发布于 3天前 阅读 12

FontAwesome图标字符和glyphicons图标字符

bootstrap4出现,但是没有了bootstrap3自带的glyphicons图标字符,http://glyphicons.com/, 需要自行处理了。   一、 glyphicons 官网: http://glyphicons.com/ DEMO在线演示 https://www.queyang.com/demo/glyphicons/ 打包下载 https://www.queyang.com/demo/glyphicons/glyphicons.zip 使用方法: HEAD里加入CSS <link href="css/glyphicons.css" rel="stylesheet" /> 需要使用图标时加入样式即可,比如 <i class="icon-glass"></i>   二、 FontAwesome 下面介绍一款专门为bootstrap设计的字体FontAwesome,以前不太注重这个,这次看到bootstrap4已经没有了fonts这个文件夹和下面的glyphicons图标,我才想起这个,做个记录,方便以后查找。 Version 5.0.4    Version 4.7.0   Version 3.2.1  这是3个版本主要使用的,5.0.4好像还出了Pro版,要收钱了吧,不过还是有free版。 官网: http://fontawesome.io/        https://fontawesome.com/ 主要介绍:http://fontawesome.dashgame.com/ github: https://github.com/FortAwesome/Font-Awesome  ...
独钓渔 发布于 3个月前 阅读 71

css rem及rem工具的使用

  一、rem原理 rem作用于非根元素时,相对于根元素字体大小;rem作用于根元素字体大小时,相对于其出初始字体大小——MDN rem取值分为两种情况,设置在根元素时和非根元素时,举个例子 /* 作用于根元素,相对于原始大小(16px),所以html的font-size为32px*/ html {font-size: 2rem} /* 作用于非根元素,相对于根元素字体大小,所以为64px */ p {font-size: 2rem}   二、font-size适配设置 /*font-size适配设置*/ @media screen and (min-width: 320px) { html, body { font-size: 12px; } } @media screen and (min-width: 360px) { html, body { font-size: 13.5px; } } @media screen and (min-width: 375px) { html, body { font-size: 14px; } } @media screen and (min-width: 414px) { html, body { font-size: 15.5px; } } @media screen and (min-width: 720px) { html, body { font-size: 27px; } }   三、rem-unit工具的使用 设计师给出的设计稿: eg.   宽度1080px / 3倍屏 = 360   (安卓机) 在360屏幕宽度下,此时的根节点font-size为多少 ,如13.5px 那么rem-unit工具中的配置如下: {  ...
我有我 发布于 2个月前 阅读 13

Element UI自定义表单验证 公共提取

### 主要代码: util文件夹下validate.js 文件 ~~~ export const VDT = { messages:{ required: "这是必填字段", email: "请输入有效的电子邮件地址", url: "请输入有效的网址", minlength: "输入字数过短", maxlength: "输入字数过长", date: "请输入有效的日期", dateISO: "请输入有效的日期 (YYYY-MM-DD)", number: "请输入有效的数字", digits: "只能输入数字", creditcard: "请输入有效的信用卡号码", equalTo: "你的输入不相同", extension: "请输入有效的后缀", mphone: "请输入正确的手机号格式", tphone: "请输入正确的电话格式", postal: "请输入正确的邮编格式" }, required: (value, param) => { return value != undefined ? (value.toString().length > 0) : false }, email: (value) => { return /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(value) }, url: (value) => { return /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1...
echoZzy 发布于 1个月前 阅读 39

从一行等式理解JS当中的call, apply和bind

关于JS当中的call,apply和bind,相信大家和我一样,已经看过了无数篇相关的文章,都有自己的理解。所以这篇文章并非什么科普类的文章,仅仅是把我自己的理解记录下来。 我的学习习惯,是喜欢把各种看似孤立的知识点串联起来,综合理解并运用,通过最简单最直观的思路把它理解透。所以,这篇文章将通过一段非常简洁的等式,把JS当中一个相对较难的知识点,call,apply和bind给串联起来: 要理解JS当中的这三个关键字,首先得弄清楚它们是用来干嘛的。复杂些来说,可以引用MDN文档的原文: 简单些来说,可以引用大家都看过的一句话: 又或者是 上面这些解释都很正确,说得一点问题都没有,但是里面却又引入了 这个猫对象拥有一个抓老鼠的技能catchMouse()。 然后类似的,定义一个狗对象: 这个狗对象能够咬坏人biteCriminal()。 接下来,我们实例化两个对象,分别得到一只叫“Kitty”的猫和叫“Doggy”的狗: 首先让它们彼此发挥自己的技能: 现在,我们希望赋予Doggy抓老鼠的能力,如果不使用这三个关键字,应该怎么做呢? 方案A:修改Dog对象,直接为其定义一个和Cat相同的抓老鼠技能。 方案B:让Doggy吃掉Kitty,直接消化吸收Kitty的所有能力。 其实方案A和方案B的解决办...
孟飞阳 发布于 2天前 阅读 2

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

pyCharm最新2018激活码(profession版新测有效)

pyCharm最新2018激活码(profession版新测有效) 1.修改hosts文件:  添加下面一行到hosts文件,目的是屏蔽掉Pycharm对激活码的验证 [html] view plain copy 0.0.0.0 account.jetbrains.com    windwos系统hosts文件路径为:C:\Windows\System32\drivers\etc  如果遇到权限问题,可将hosts文件先复制出来修改后再覆盖原来的即可。  Linux和mac的hosts文件路径为:/etc     2.打开PyCharm,选择 Activate code(用激活码激活)   3.在复制下载激活码,填入激活码框   [html] view plain copy EB101IWSWD-eyJsaWNlbnNlSWQiOiJFQjEwMUlXU1dEIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiSUkiLCJwYWlkVXBUbyI6IjIwMTgtMTAtMTQifSx7ImNvZGUiOiJSUzAiLCJwYWlkVXBUbyI6IjIwMTgtMTAtMTQifSx7ImNvZGUiOiJXUyIsInBhaWRVcFRvIjoiMjAxOC0xMC0xNCJ9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDE4LTEwLTE0In0seyJjb2RlIjoiUkMiLCJwYWlkVXBUbyI6IjIwMTgtMTAtMTQifSx7ImNvZGUiOiJEQyIsInBhaWRVcFR...
daniel-john 发布于 2个月前 阅读 2391

使用mpvue和wepy开发小程序

最近在开发小程序,分别使用了[mpvue](http://mpvue.com/) 和 [wepy](https://tencent.github.io/wepy/) 这两个都是开发微信小程序的框架。都是牛人出品,给个赞!
thinker_ 发布于 1个月前 阅读 1520 评论 3

Vue-cli(四) 项目中引入Axios

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。 从浏览器中创建 XMLHttpRequest 从 node.js 发出 http 请求 支持 Promise API 拦截请求和响应 转换请求和响应数据 取消请求 自动转换JSON数据 客户端支持防止 CSRF/XSRF 安装Axios 我们直接使用npm install来进行安装。 npm install axios --save 由于axios是需要打包到生产环境中的,所以我们使用--save来进行安装。 也可以选择使用cnpm来安装,加快安装速度。 引入Axios 只需要在需要的vue文件中引入axios就可以。 import axios from 'axios' 使用 发送一个GET请求 //通过给定的ID来发送请求 axios.get('/user?ID=12345') .then(function(response){ console.log(response); }) .catch(function(err){ console.log(err); }); //以上请求也可以通过这种方式来发送 axios.get('/user',{ params:{ ID:12345 } }) .then(function(response){ console.log(response); }) .catch(function(err){ console.log(err); }); 发送一个POST请求 axios.post('/user',{ firstName:'Fred', lastName:'Flintstone' }) .then(function(res){ console.log(res); }) .catch(funct...
阿刚ABC 发布于 3天前 阅读 244

使用Remix编译和部署以太坊智能合约

![以太坊remix汇智网](https://static.oschina.net/uploads/img/201804/20113835_7UHh.png "以太坊remix汇智网") Remix 是一个开源的 Solidity 智能合约开发环境,提供基本的编译、部署至本地或测试网络、执行合约等功能。Solidity 是 以太坊Ethereum 官方设计和支持的开发语言,专门用于编写智能合约。 本文希望将一个很简单的代币合约(只能发行和转账),部署在本地和测试网络上,测试下它的功能。 详细描述使用 Remix 的步骤及使用上可能碰到的问题。 之前开发过以太坊Ethereum智能合约,但没有记录过开发的过程和碰到的问题,觉得挺可惜。这次重新开始,从最基础开始,一步步学习。 ### 开发环境 不需要安裝,直接在任何浏览器启动 Remix。 ![以太坊remix汇智网](https://static.oschina.net/uploads/img/201804/20113913_wFJy.png "以太坊remix汇智网") ### 取得代币合约 代币合约的范例很多,Ethereum 官网有提供一个最小可执行的代币合约(MINIMUM VIABLE TOKEN): ``` pragma solidity ^0.4.0; contract MyToken { /* This creates an array with all balances */ mapping (address => uint256) public balanceOf; /* Initializes contract with initial supply ...
笔阁 发布于 2天前 阅读 219

微信小程序根据点击事件获取被点击元素的属性(常用)

场景:最近开发微信小程序时候遇到了点击页面中的元素,js捕捉点击事件,并获取该元素的一些属性(比如我自定义了一个author="李一博"),那么如何快速获取这个属性呢?其实首先要改变一下写法,用【data-】开头,元素属性即为data-author="李一博",并且绑定一个点击事件,bindtap='getAuthor'。 接下来重点来了 js部分  getAuthor : function(e){     console.log(e.currentTarget.dataset.author);//打印李一博     //看一下e对象的值     console.log(e);//参考下图 } (图片看不清双击看大图 osChina这个编辑器我真用不惯 ) 注意:里面有两个对象存在我们要获取的内容 一个是target一个是currentTarget 区别简单来说是   e.target 指向触发事件监听的对象。 e.currentTarget 指向添加监听事件的对象。 详细原因如下:(参考自简书) 在DOM事件对象中有两个属性总是时不时的困扰我,就是target和currentTarget,有时候很迷惑分不清两者的区别,因此有必要把这两个属性好好梳理一下,加深理解,以便日后的查询。 MDN中对target的解释为,一个触发事件的对象的引用, 当事件处理程序在事件的冒泡或捕获阶段被调用时。 而对于currentTarget,它指的是当事件遍历...
sw缪斯 发布于 2个月前 阅读 998

安装webpack出现警告:npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules

npm install时出现警告如下: npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules\ch okidar\node_modules\fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@ 1.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"} ) npm WARN ajv-keywords@3.1.0 requires a peer of ajv@^6.0.0 but none was installed  fsevent是mac osx系统的,在win或者Linux下使用了 所以会有警告,忽略即可。 就是说安装成功了,开始开发吧wuli乖乖    
前端女情绪狮 发布于 1个月前 阅读 568

vue 移动端 滑动事件 v-touch 制作 简单 swiper

效果,滑动时改变背景图片 使用div圆点表示图片状态 通过对盒子内图片设置border-radius:50%实现圆形效果 github https://github.com/vuejs/vue-touch/tree/next   简单使用 <!-- Renders a div element by default --> <v-touch v-on:swipeleft="onSwipeLeft" class="item">Swipe me!</v-touch> <!-- Render as other elements with the 'tag' prop --> <v-touch tag="a" v-on:tap="onTap" class="item">Tap me!</v-touch> <!--//左划 默认渲染为div data为参数--> <v-touch @swiperight="onSwipeRight" class="item">Swipe me!</v-touch> <!--//点击 渲染为一个a标签--> <v-touch tag="a" v-on:tap="onTap">Tap me!</v-touch> <!--//点击 渲染为p标签--> <v-touch tag="p" v-on:tap="onTap">Tap me!</v-touch>   可滑动预览图片   <template> <v-touch @swipeleft="prev" @swiperight="next"> <div ref="img" class="img"> <div class="dots"> <div v-for="i,key in imgs" class="dot-base" :class="{'cur-dot':key==cur_img_index}"></div> </div> </div> </v-touch> </templ...
阿豪boy 发布于 2个月前 阅读 553

iview-admin IE兼容方案(已弃坑)

iview admin 兼容IE 9+
一点灵犀 发布于 3个月前 阅读 646 评论 5

微信小程序 wx.canvasToTempFilePath 方法之巨坑

看微信小程序 wx.canvasToTempFilePath 方法之巨坑的解决之道
quanke_ 发布于 3个月前 阅读 619

基于 HTML5 Canvas 的交互式地铁线路图

感觉目前地铁上的地铁线路图也不是很人性化,很多交互方面没有考虑到用户的需求?感觉总是有各种容易看串的信息,利用 html5 canvas 完成的这个交互式地铁线路图 Demo,如果地铁上的展示信息稍微有点交互会怎么样?不用忙着上车下车,轻轻一点,就能省去很多时间。
xhload3d 发布于 2个月前 阅读 1671 评论 3 点赞 4

总结几个关于 jQuery 用法

#### 有关 jquery 用法 #### 目录: - $.trim() - $.inArray() - $.getJSON() - 事件委托 on #### 进入正文 ing... ##### 1. jQuery.trim(str) ##### 解释:从字符串的开头和结尾删除空格。 ``` var str=' hello hi '; var new_str=$.trim(str); console.log(str.length) // 12 console.log(new_str.length) // 8 ``` ##### 比如 提交表单时,要获取用户的val()值,防止用户输入的空格对后续操作造成影响,这里就可以用 trim () ``` var username=$.trim($('#username').val()); ``` ##### 2.jQuery.inArray( value, array [, fromIndex ] ) ##### 它的方法类似于JavaScript的原生.indexOf()方法,没有找到匹配元素时它返回-1。如果数组第一个元素匹配value(参数) ,那么$.inArray()返回0。 ``` var fruits=['apple','banner','orange','pear']; var mine='orange'; var res=$.inArray(mine,fruits); if(res==-1){ // 不存在 console.log('sorry,没有你喜欢的!') }else{ console.log('有你的!') } ``` ##### 顺便来回忆下原生js 对于字符串 indexOf 的用法 ##### 语法:stringObject.indexOf(searchvalue,fromindex) #### 注意: ###### (1) indexOf() 方法对大小写敏感...
前端喵 发布于 1周前 阅读 121

基于vue-element-admin框架改造——支持第三方iframe网站

vue-element-admin是一款很好的基于element-ui框架的后台管理集成方案,但是它不支持iframe第三方网站
Smallwei小伟 发布于 3个月前 阅读 1566 评论 2 点赞 1

js异步ajax实现避免页面重复提交

### 1 ajax概述 ajax同步与异步区别,在于: - 同步基本是秉持着顺序执行的,为此在传送数据期间,浏览器一直处于等待状态,如果数据量过多或者网速过慢,就会出现假死情况(此内容在笔者此前博文[<异步ajax实现顺序执行>](https://my.oschina.net/yangyishe/blog/1586196)中也有提出),所以当代ajax已经基本不再使用同步配置了; - 异步则是发送后,接下来该干什么干什么,类似于行军途中,不断派出的斥候与正常军队行进之间的关系.只是有时候有些斥候的信息比较重要,在军队或下一个斥候派出前,必须得到这些斥候的信息,才好往下走.于此衍生了各种可能存在的问题,其中一个新人常遇到的问题就是:**连续触发相同事件导致的重复提交**. --- ### 2 问题描述 需要说明的是,重复提交对于不同情况有着不同的解决策略. 本文所述的方法,主要针对的是正常使用情况下,**用户对于相同事件的误重复触发**,譬如对于一个按钮,由于鼠标不好使或者新用户的不了解,连续点击两次以上.这种情况下,**从页面js设计就可以解决**; 与之正常使用情况对应的,即是**异常情况,如某些用户恶意频繁发送请求**,以获取一个网站的用户登录信息,这类问题就必然要和后台互动才能解决了,**不在本文讨论范围内**; 以下分情况讨...
社哥 发布于 1周前 阅读 123

Sass指南:Sass前世今生和如何安装以及使用Webstorm直接支持编写

Sass简易指南   什么是Css预处理器?   CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这种语言进行编码工作。   通俗的说,“CSS 预处理器用一种专门的编程语言,进行 Web 页面样式设计,然后再编译成正常的 CSS 文件,以供项目使用。CSS 预处理器为 CSS 增加一些编程的特性,无需考虑浏览器的兼容性问题”,例如你可以在 CSS 中使用变量、简单的逻辑程序、函数(如右侧代码编辑器中就使用了变量$color)等等在编程语言中的一些基本特性,可以让你的 CSS 更加简洁、适应性更强、可读性更佳,更易于代码的维护等诸多好处。   CSS 预处理器语言: - Sass(SCSS) - LESS - Stylus - Turbine - Swithch CSS - CSS Cacheer - DT CSS   什么是 Sass?   l  官方定义 Sass 是一门高于 CSS 的元语言,它能用来清晰地、结构化地描述文件样式,有着比普通 CSS 更加强大的功能。 Sass 能够提供更简洁、更优雅的语法,同时提供多种功能来创建可维护和管理的样式表。   l  Sass 前世今生 Sass 是最早的 CSS 预处理语言,有比 LESS 更为强大的功能,不过其一开始的缩进式...
GeCoder 发布于 3天前 阅读 113

微信小程序 首页app.userInfoReadyCallback函数的解释

参考链接:https://blog.csdn.net/mr_wuch/article/details/78339146 app.userInfoReadyCallback = res => { this.setData({ userInfo: res.userInfo, hasUserInfo: true }) } ES6的箭头函数 解释:https://segmentfault.com/a/1190000009410939
qimh 发布于 4周前 阅读 282

vue 下拉刷新,上拉加载 vue-scroller

git https://github.com/wangdahoo/vue-scroller Demo https://wangdahoo.github.io/vue-scroller/   How to use npm i vue-scroller -S /* ignore this if you include vue-scroller.js by <script> tag from a cdn, such as unpkg */ import Vue from 'vue' import VueScroller from 'vue-scroller' Vue.use(VueScroller) <scroller :on-refresh="refresh" :on-infinite="infinite"> <!-- content goes here --> </scroller>     简单实例   需要注意scrolller的定位方式,以及 <template> <div class="container"> <!--对于scroller默认高度总是占满父容器,虽然可以使用属性设置高度--> <!--但在用一个div包住4会更简单点--> <div style="height: 600px"> <!--scroller组件定位方式用relative 否则会溢出父容器--> <scroller class="scroller" :on-refresh="refresh" :on-infinite="infinite" ref="my_scroller"> <div v-for="(item, index) in items" @click="onItemClick(index, item)" class="row"> {{ item }} </div> </scroller> </d...
阿豪boy 发布于 4周前 阅读 243

小程序中跳到webview页面没有返回按钮?已解决

wx.navigateTo({})
潇潇程序缘 发布于 1个月前 阅读 257

elementui el-input输入数字为整数的验证

## elementui手动校验数字为整数 ```html ```
YXMBetter 发布于 1个月前 阅读 384

前端vue与 js-xlsx 实现 Excel 文件导出功能

### 依赖文件 ~~~ import XLSX from 'xlsx' var FileSaver = require('file-saver') ~~~ ### 下载操作 ~~~ 下载材料 ~~~ ### js 逻辑 ~~~ export default { data() { return { exportList: [{ name: '韩版设计时尚风衣大', number: 'MPM00112', salePrice: '¥999.00', stocknums: 3423, salesnums: 3423, sharenums: 3423, }, { name: '韩版设计时尚风衣大', number: 'MPM00112', salePrice: '¥999.00', stocknums: 3423, salesnums: 3423, sharenums: 3423, }, ] } }, methods: { downloadMater (){ const defaultCellStyle = { font: { name: "Verdana", sz: 11, color: "FF00FF88"}, fill: {fgColor: {rgb: "FFFFAA00"}}}; const wopts = { bookType:'xlsx', bookSST:false, type:'binary', defaultCellStyle: defaultCellStyle, showGridLines: false}; const wb = { SheetNames: ['Sheet1'], Sheets: {}, Props: {} }; let data = this.exportList wb.Sheets['Sheet1'] = XLSX.utils.json_to_sheet(data) //创建二进制对象写入转换好的字节流 let tmpDown = new Blob([this.s2ab(XLSX.write(wb, wopts))], { type: "application/octet-stream" }) FileSaver.saveAs(...
echoZzy 发布于 2个月前 阅读 358

ECharts插件实现3D饼图

1.下载Echarts插件,官网地址:http://echarts.baidu.com/download.html 下载开发版本: 2.引入到html中 文件层级: 源码部分: <!DOCTYPE html> <html style="height: 100%"> <head> <meta charset="utf-8"> </head> <body style="height: 100%; margin: 0"> <div id="container" style="height: 100%"></div> <script type="text/javascript" src="echarts/echarts.js"></script> <script type="text/javascript"> var dom = document.getElementById("container"); var myChart = echarts.init(dom); var app = {}; option = null; option = { backgroundColor:'#FAFAD2', title: { text: '国民营销信息来源渠道', left: 'center', //标题栏的高度,值越大,距离顶部的距离越大 top: 50, //标题栏字体的颜色 textStyle: { color: '#FFD700' } }, tooltip : { trigger: 'item', formatter: "{a} <br/>{b} : {c} ({d}%)" }, visualMap: { show: false, //饼图中在最大值最小值颜色范围中的亮度,值越大颜色越深 min:10, ...
木木知南 发布于 3个月前 阅读 287

DOM结构树

原型:每一个构造函数都可以构造一个对象出来,构造函数有一个属性prototype,prototype作为构造函数的原型,所有构造函数产生的对象都会继承自原型,原型上的方法和属性在构造函数,构造对象都可以使用。 Person.prototype function  Person{ }   Node      1. Document HTMLDocument XMLDocument      2. CharacterData Text   (文本节点的方法继承自Text的prototype) Comment  (注释节点的方法继承自Comemnt的prototype)      3. Element HTMLElement  (HTML元素)            1).HTMLHeadElement             2).HTMLBodyElement            3).HTMLTitleElement            4).HTMLParagraphElement            5).HTMLInputElement            6).HTMLTableElement            ...etc. XMLElement               4. Attr      DOM结构树代表的是继承关系。 上面的结构树中Document和document的关系      document代表整个文档,Document是构造函数(特殊,不能够手动new)      Document作为document的原型,Document.prototype.abc="123";---->那么,document.abc="123";    注意:...
Mrs_CoCo 发布于 2小时前 阅读 2

介绍两个好玩的和Github相关的Chrome扩展

1\. Octotree 默认的github网页里的代码显示没有我们在IDE里看到的直观,即代码文件所在的文件夹无法以树形层级结构显示在屏幕左边。 ![](https://upload-images.jianshu.io/upload_images/2085791-31fe9d996aa3f684.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 安装Octotree之后: ![](https://upload-images.jianshu.io/upload_images/2085791-251939f1850c212e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 方便多了。 ![](https://upload-images.jianshu.io/upload_images/2085791-4e8407682e05dc72.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 2\. Isometric Contributions github commit的统计页面比较平淡: ![](https://upload-images.jianshu.io/upload_images/2085791-f6548ab767c017e9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 安装了Isometric Contributions之后,这个统计页面会以柱状图显示出来,有趣多了: ![](https://upload-images.jianshu.io/upload_images/2085791-b821ad7ffa54fcb5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 要获取更多Jerry的原创技术文章,请关注公众号...
JerryWang_SAP 发布于 3小时前 阅读 3

前端开发框架整理

前端开发框架
JUKE 发布于 6小时前 阅读 6

Javascript实现checkbox全选和删除所选的操作

我们平常在浏览网页时,经常会看到全选和删除全选的操作,具体内容如下,仅供大家参考 实现全选思路: 1、建立表格,表头设置全选的按钮,并为它添加鼠标点击事件 <input type="checkbox" id="chkstu" onclick="myfunc(this)"> 2、设计表格的CSS样式属性(宽、高、居中、边框、特殊背景颜色),为了使表格更加美观 table{ margin: 0 auto; border-collapse: collapse; border:1px solid black; } .special{ background-color: #cdbbdb; } 3、通过名字获取元素getElementsByName 4、利用for循环checkbox 5、再次点击全选按钮则会取消全选 实现删除所选(整行)的思路: 1、在表格外添加一个按钮,给它一个value属性,并为它添加鼠标点击事件 <caption> 元素定义了一个表格标题。以下代码要在caption标签内写,以达到表格标题居中的目的 <input type="button" value="删除所选" onclick='delnode()' id="btndel"> 2、通过名字获取元素getElementsByName 3、利用for循环checkbox 4、注意:删除所选必须从下往上依次删除,因为如果从上往下删除的话,循环条件会发生改变 5、if判断是否被选中,如果选中的话拿出它...
夜寒曦 发布于 17小时前 阅读 2

CRM WebClient UI的浏览器打印实现

WebClient UI上自带了一个打印按钮,按Ctrl + P后可以生成一个新的页面供打印。 ![](https://upload-images.jianshu.io/upload_images/2085791-927225de8113a46c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 如下图所示。可以看到这个页面里所有的超链接都已经被移除了。 ![](https://upload-images.jianshu.io/upload_images/2085791-1eb1a23e863a85ea.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 这个页面的生成逻辑如下。 1\. 按住ctrl + p之后,会触发WebClient UI框架的按键响应函数thtmlbKeyDown。浏览器传入的事件处理对象里ctrl属性为true,keycode为80(按键p对应的code),意思就是ctrl和p同时按下。 ![](https://upload-images.jianshu.io/upload_images/2085791-5f974fbd3afd217e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 这个响应函数thtmlbKeyDown被注册到整个document对象上,因此您在页面任何位置点击ctrl+p都能得到响应。 ![](https://upload-images.jianshu.io/upload_images/2085791-1c01432d20bc4bee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 从右上角的调用栈能发现crmFrwPrint被调用。...
JerryWang_SAP 发布于 17小时前 阅读 3

Node服务器创建HTTPS服务器——SSL证书

HTTP与HTTPS介绍 HTTP:超文本传输协议,是浏览器与服务器之间的通讯协议; HTTPS:以安全为目标的HTTP通道,可以简单理解为HTTP的安全升级版; HTTPS与HTTP的区别 https协议需要到ca申请证书,一般免费证书很少,需要交费。 http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。 http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。 Windows下创建https服务器 ~ D:\workspace\javascript>express -e nodejs-https ~ D:\workspace\javascript>cd nodejs-https && npm install ejs@0.8.5 node_modules\ejs express@3.2.6 node_modules\express ├── methods@0.0.1 ├── fresh@0.1.0 ├── cookie-signature@1.0.1 ├── range-parser@0.0.4 ├── debug@0.7.4 ├── buffer-crc32@0.2.1 ├── cookie@0.1.0 ├── commander@0.6.1 ├── mkdirp@0.3.4 ├── send@0.1.0 (mime@1.2.6) └── connect@2.7.11 (pause@0.0.1, qs@0.6.5, bytes@0.2.0, cookie@0.0.5, formidable@1...
翔飘飘 发布于 18小时前 阅读 3 评论 1

禁止自动匹配

autocomplete="off"
不负好时光 发布于 22小时前 阅读 3

一段简单的JS删除数组中的指定元素,你看懂了吗?

function deleteItem(datas,item){ //删除数组中所有指定元素     for(var i = 0; i<datas.length;){         if(datas[i] == item){             datas.splice(i,1);                         }else{             i++;         }     } return datas;
@林文龙 发布于 1天前 阅读 1

js object 中删除某个元素并且重置obj[obj.splice(1,1)]

 for (var i = 0; i < old.length; i++) {         if(old[i].id==$(spanthis).data("id")){             // old[i].id=0;             // old[i].name='';             old.splice(i,1)         }         if(old.length==0){             area.old=[];         }     }
dragon_tech 发布于 1天前 阅读 1

面向对象与vue的结合

将操作和实现分离 把函数式改为面向对象的形式 在视图层 只调用对象的方法 然后重新挂载,达到刷新视图的效果 Maze class Maze { constructor(size) { this.size = size this.blank = size * size this.items = Array.from(Array(size * size)).map((_, index) => index + 1) this.initCnt = 1000 } // 是否完成 isPass() { return this.items.every((item, index) => item == index + 1) } // 空白块所在位置0....1.... blankPos() { return this.items.indexOf(this.blank) } // 移动 move(dir) { // console.log(dir) if (dir == 0 && this.blankPos() >= this.size) { this.swap(this.blankPos(), this.blankPos() - this.size) } else if (dir == 1 && this.blankPos() % this.size != (this.size - 1)) { this.swap(this.blankPos(), this.blankPos() + 1) } else if (dir == 2 && this.blankPos() < (this.size - 1) * this.size) { this.swap(this.blankPos(), this.blankPos() + this.size) } else if (dir == 3 && this.blankPos() % this.size != 0) { this.swap(...
阿豪boy 发布于 2天前 阅读 4

vue 重新挂载 解决数据刷新问题

vue中的数组和对象改变后,视图不会刷新 这种时候可以通过全局set或者实例set解决 但比较不够优雅   使用重新挂载这个技巧,可以刷新视图,虽然效率上有点低,但最简单 使用$mount()手动挂载            vm.$mount("#app");     在实例中,改变数据后,重新挂载,这样视图就会再次刷新 但是不会触发mounted钩子 this.$mount()       注意 这种方式不会触发列表动画!
阿豪boy 发布于 2天前 阅读 4

键盘事件监听

js
sw缪斯 发布于 2天前 阅读 5

linux下安装pm2,pm2: command not found

对于一个linux新手来说,真的是一大坑,看了网上好多例子,但没有一个能说明白的,我发现没有哪个程序狗能把一个问题说的像我一样完美。不服来打死我,我不还手的。 1:安装pm2 操作描述:        你要在linux上安装pm2有很多方法,但我是用node的工具npm来完成安装的,所以在安装pm2之前需要先安装node。这里如果不会,就百度一个安装node,这个小事我就不做了,如果不服,你可以.加.技术群来骂我:458633781,作为男人要有亮剑精神,决不怂。 正题: 在你的任意目录输入命令:  npm install pm2 -g  [root@VM_165_102_centos /]# npm install pm2 -g 回车后... /usr/local/node-v8.9.3-linux-x64/bin/pm2 -> /usr/local/node-v8.9.3-linux-x64/lib/node_modules/pm2/bin/pm2 /usr/local/node-v8.9.3-linux-x64/bin/pm2-dev -> /usr/local/node-v8.9.3-linux-x64/lib/node_modules/pm2/bin/pm2-v /usr/local/node-v8.9.3-linux-x64/bin/pm2-docker -> /usr/local/node-v8.9.3-linux-x64/lib/node_modules/pm2/bin/p-docker /usr/local/node-v8.9.3-linux-x64/bin/pm2-runtime -> /usr/local/node-v8.9.3-linux-x64/lib/node_modules/pm2/bin/2-runtime npm WARN ...
3岁的小黄瓜 发布于 2天前 阅读 9

go channel

基本概念:   关于管道 Channel:     Channels用来同步并发执行的函数并提供它们某种传值交流的机制。     Channels的一些特性:通过channel传递的元素类型、容器(或缓冲区)和传递的方向由“<-”操作符指定。     c<-123,把值123输入到管道 c,<-c,把管道 c 的值读取到左边,value :=<-c,这样就是读到 value里面。   管道分类:     无缓冲的与有缓冲channel有着重大差别,那就是一个是同步的 一个是非同步的。    比如    c1:=make(chan int)         无缓冲    c2:=make(chan int,1)      有缓冲    例如:c1<-1             无缓冲: 不仅仅是向 c1 通道放 1,而是一直要等有别的携程 <-c1 接手了这个参数,那么c1<-1才会继续下去,要不然就一直阻塞着。       有缓冲: c2<-1 则不会阻塞,因为缓冲大小是1(其实是缓冲大小为0),只有当放第二个值的时候,第一个还没被人拿走,这时候才会阻塞。 例子s   演示 无缓存 和 有缓冲 的 channel 的样子 1 func test0(){ 2 /** 演示 无缓存 和 有缓冲 的 channel 的样子 */ 3 done := make(chan bool) /** 无缓冲 */ 4 done1 := make(chan bool,1) /** 有缓冲...
易野 发布于 2天前 阅读 2

JS Safari不兼容Javascript中的Date()问题

var dateTime = new Date('2017-3-31 3:2');      window:  没问题 ;  IE跟safari都不兼容,返回错误"Invalid Date" var dateTime = new Date('2018/3/2 3:2'); IE跟safari :  没问题 ; window:  报错 var dateTime = new Date(); dateTime.setTime(时间戳); 或 safari所支持的格式为 new Date(YYYY,MM, DD,HH,mm,ss ); function dateFormat(str){     var dateTime = new Date();     if(str){         var splitStr = str.split(/[- : \/]/);         for (var i=0; i < 6; i++)         {             if(!splitStr[i]){                 splitStr[i] = "0";             }         }         dateTime = new Date(splitStr[0],splitStr[1]-1,splitStr[2],splitStr[3],splitStr[4],splitStr[5]);     }     var mat={};     mat.M=dateTime.getMonth()+1;//月份记得加1     mat.H=dateTime.getHours();     mat.s=dateTime.getSeconds();     mat.m=dateTime.getMinutes();     mat.Y=dateTime.getFullYear();     mat.D=dateTime.getDate();    ...
orglee 发布于 2天前 阅读 1

SpringMVC AJAX 传数组问题

今天遇到一个问题,前台AJAX传数组后台接口接收不到。 开始的ajax是这样写的 $.ajax({             type:'POST',             url:'${ctx}/scheduleStudentScoreController/exportScore',             data:{                 'ids':scoreIds             },             success:function(result){                 console.log(result);             },             error:function(result){                 console.log(result);             }         }) 在网上找了一下,发现ajax有一个属性 traditional。 这个属性是这样定义的: 因此,我们ajax这样写就没问题了: $.ajax({             type:'POST',             url:'${ctx}/scheduleStudentScoreController/exportScore',             data:{                 'ids':scoreIds             },             traditional: true,             success:function(result){                 console.log(result)...
@林文龙 发布于 2天前 阅读 2

ckPlayer使用

## 1. 右键去掉ckplayer以及version 修改ckpayer.js的contentMenu ## 2. 去掉logo 解决方案1: 修改logo为'null'可以解决h5的问题,但是在flash下,会报错 解决方案2: 1. 因此将logo处的offsetX改为一个-10000000非常大的值,解决的是flash的问题 2. 修改logoID,将height,width变为0,opacity变为0,position的值去掉 ## 3. 去掉flash状态下的loading 解决方案: loading的offsetX改为一个-10000000非常大的值
litCabbage 发布于 2天前 阅读 2

以太坊如何估计估算计算gas?

以太坊如何估计估算计算gas?Etherscan上transaction info中有个gas used by txn,结果跟remix给的结果以及geth中getTransactionReceipt的gasUsed给的结果都会是一致的,可以直接用geth或是remix模拟估算gas cost。 之前一直没把这个问题搞清楚,所以干脆做个试验看一下. remix浏览器下方有个可执行的log页面,可以detail以及debug,非常方便。 ![输入图片说明](https://static.oschina.net/uploads/img/201804/20225353_E0FL.png "在这里输入图片标题") 有gas cost的地方有两个地方,transaction cost以及 execution cost,這两个有什么不同呢?可以參考一下他们的[源码][1]. 简单说一下: transaction cost指的是将交易送至ethereum blockchain所耗费的cost,是基于data size的大小,部署合约时就是基于合约內容的大小. execution cost指的是虚拟机(VM)执行所需的cost,而在部署合约时,会去执行建構子以及一些初始化的工作. 在这里做一个简单的合约试验: ``` contract Test { bytes32 public tmp; function test( bytes32 input, uint num ) constant returns (bytes32){ bytes32 result = input; for(uint i = 0; i < num; i++) { result = sha3(result); } } fu...
笔阁 发布于 2天前 阅读 3

很赞的切图、标注工具合辑分享

前端必备ps技巧:https://www.cnblogs.com/moqing/p/6706525.html 详细的ps切图方法:https://juejin.im/post/58e9deacb123db1ad05fab2f 自动化切图工具: Slicy 网址:http://macrabbit.com/slicy/ 介绍:是个收费的切图软件,功能很强大,操作却很简单。你只需要把要切的图层命名为 *.png 或者 *.jpg 之类的格式。保存,再把整个psd拉进 Slicy,搞定! Retinize It 网址:http://retinize.it/ 介绍:切图是个重复性动作,Photoshop允许我们录制自己的动作,然后应用在每次操作上。这个软件已经帮你搞定了,下载安装。导出的时候选中图层,点击播放按钮,自动帮你产出图片。 Cutterman 网址:http://www.cutterman.cn/zh 介绍:国产的切图工具,广告语就叫“最好用的切图工具”。 支持多倍图 多种格式 多图层导出 可以设置固定大小 操作简单 免费,只需要注册个账号即可 强大的标注工具: 标你妹 网址:http://www.biaonimeia.com/ 介绍:免费!登录成功之后,新建一个项目上传PSD,然后就可以进行标注。 使用体会:这个真的很棒!微信扫码登录后,新建项目,传入psd文件移入鼠标即可,很方便! 蓝湖Mac端App 网址:https://www.lanhuapp.com/ 介绍:免费!只需下载“蓝...
wftt 发布于 2天前 阅读 3

Flex align-items: center; 情况下, swiper控件宽度为0问题

微信小程序自带了一个container: .container { width: 100%; height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: space-between; box-sizing: border-box; } 设置了控件竖向显示,并居中显示, 此时其内部的swiper控件默认width变成了0, <text> 有内容(有固定宽度)的<view> 不存在问题 现在对前端还停留在学习阶段, 猜测设置了align-items: center; 后可能影响swiper默认宽度的测量, 后面知道了再补充    解决方案 1.去掉align-items: center;   2.显示设置swiper控件宽度  
SuShine 发布于 2天前 阅读 2

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

手把手教你打造一个可视化接口自动化测试系统

现如今,接口开发几乎成为一个互联网公司的标配了,无论是web还是app,哪怕是小程序,都离不开接口作为支撑,当然,这里的接口范围很广,从http到websocket,再到rpc,只要能实现数据通信的都可以称之为接口,面临着如此庞大的接口数据,如果更好的管理和测试他们都是一个比较头疼的问题,更主要的是很多业务场景是需要多个接口进行联调的,因此在接口开发完成后,一轮自动化测试能快速反馈出当前系统的状况,面对这样的需求,一个对测试人员友好的可视化接口自动化测试系统就显得必不可少了。那么,我们今天就来和大家聊聊如何实现一个小型的http接口自动化测试系统! 我们拿DOClever 做为这套系统的范本进行阐述,因为它是开源的,源码随时可以从GitHub和OSChina上获取,同时,这套系统内置了完整的自动化测试框架,从无需一行代码的UI测试用例编写,到更强大更灵活的代码模式,都提供了很友好的支持。 系统需求: 1.   能在一个测试用例里可以对一个接口自由编辑其入参,运行并判断出参是否正确,同时可以查看该接口完整的输入输出数据 2.   能在一个测试用例里可以对一组接口进行测试,自由调整他们的执行顺序,并根据上一接口的出参作为下一接口的入参条件。 3.  ...
ansun123 发布于 3天前 阅读 2189 点赞 7

合格前端系列第十弹-揭秘组件库一二事

是不是很想自己造一个类似 element-ui,vant,vux 等等优秀的组件库,那你还等什么?跟着我一起开始吧 ~
qiangdada 发布于 1个月前 阅读 1985 评论 4 点赞 11

快速开发 HTML5 WebGL 的 3D 斜面拖拽生成模型

如何在一个斜面上创建 3D 模型?如何通过拖拽创建 3D 模型?这些我们在实际项目中用到的概率也着实不低。我们知道,空间中存在无数个面,一个点和一条法线就能创建一个面,如何利用好这两个部分?
xhload3d 发布于 1个月前 阅读 1584 评论 2

你需要Mobx还是Redux?

在过去一年,越来越多的项目继续或者开始使用React和Redux开发,这是目前前端业内很普遍的一种前端项目解决方案,但是随着开发项目越来越多,越来越多样化时,个人又有了不同的感受和想法。是不是因为已经有了一个比较普遍的,熟悉的项目技术栈,我们就一直完全沿用呢,有没有比他更适合的方案呢?恰逢团队最近有一个新项目,于是博主开始思考,有没有可能使用其他可替代技术开发呢?既能提高开发效率,又能拓展技术储备和眼界,经过调研,选择了Mobx,最终使用React+Mobx搭建了新项目,本篇总结分享从技术选型到项目实现的较完整过程,希望共同进步。
熊建刚 发布于 2个月前 阅读 968 评论 4 点赞 2

基于 HTML5 WebGL 的 3D 网络拓扑结构图

现在,3D 模型已经用于各种不同的领域。在医疗行业使用它们制作器官的精确模型;电影行业将它们用于活动的人物、物体以及现实电影;视频游戏产业将它们作为计算机与视频游戏中的资源;在科学领域将它们作为化合物的精确模型;建筑业将它们用来展示提议的建筑物或者风景表现;工程界将它们用于设计新设备、交通工具、结构以及其它应用领域;在最近几十年,地球科学领域开始构建三维地质模型,而且 3D 模型经常做成动画,例如,在故事片电影以及计算机与视频游戏中大量地应用三维模型。它们可以在三维建模工具中使用或者单独使用。为了容易形成动画,通常在模型中加入一些额外的数据,例如,一些人类或者动物的三维模型中有完整的骨骼系统,
xhload3d 发布于 3个月前 阅读 2848 评论 3 点赞 7

Token 认证的来龙去脉

Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位
边城 发布于 3个月前 阅读 5922 评论 39 点赞 29

Vue(三)goods组件开发

### 一、 布局 Flex ##### Flex 布局,可以简便、完整、响应式地实现各种页面布局,Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为 Flex 布局。 ``` // 指定为 Flex 布局 display: flex; ``` ``` // 主要属性 flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。 flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大 flex-shrink属性定义项目的缩小比例,默认为1,即如果空间不足,该项目将缩小,flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小 flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小,设为跟width或height属性一样的值(比如350px),则项目将占据固定空间 ``` ``` flex : 等分 内容缩放 展位空间; flex : 0 0 80px ``` [Flex 语法](http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool) [Flex 实践](http:...
前端喵 发布于 3个月前 阅读 2568 评论 3 点赞 1

为什么说Web开发和Vue.js是如此的有趣?

![Web Vue.js](http://upload-images.jianshu.io/upload_images/145564-b44a324d5fd42693?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 我想告诉你,我开始享受使用Vue.js和进行前端开发的故事。这不应该被理解为一篇关于为什么Vue.js可能比React,Angular或任何你正在考虑的其他Web框架更好的文章。Vuejs是令人惊叹的,但我们生活在一个作为前端开发人员同样令人惊叹的时代。 如果你几年前和我交谈过,我会把自己定位为一个后端开发人员,掌握服务器和数据库管理。面向对象的语言,java和c #,我想找到一种自己需要交付程序时使用的唯一的开发语言,我逐渐了解到更多关于.NET和SQL服务器的堆栈技术。当时我有这样一个概念,前端开发者只是使用右脑的附庸风雅的人,并不是“真正的”编程。 但是,在我最后一次求职,选择很少。特别是工作面试,我看到了自己是如何失败的。那次失败非常令人沮丧,但我从中吸取了不少教训。我获得了一个职位,利用了我在SharePoint的经验。我在SharePoint的经验并不特别:用GUI、工作流等设计页面这个不是我理想中的工作,而是为了生活不得不做的工作。 当我刚开始的时候,我接触过像我过去做过的任何类似的项目。我依靠GUI设计用户...
笔阁 发布于 3个月前 阅读 5366 评论 14 点赞 2

前后端分离实践有感

前后端分离并不是什么新鲜事,到处都是前后端分离的实践。然而一些历史项目在从一体化 Web 设计转向前后端分离的架构时,仍然不可避免的会遇到各种各样的问题。由于层出不穷的问题,甚至会有团队质疑,一体化好好的,为什么要前后端分离?
边城 发布于 3个月前 阅读 4174 评论 45 点赞 39

前端性能优化(三) 移动端浏览器前端优化策略

前端性能优化是一个很宽泛的概念,本书前面的部分也多多少少提到一些前端优化方法,这也是我们一直在关注的一件重要事情。配合各种方式、手段、辅助系统,前端优化的最终目的都是提升用户体验,改善页面性能,我们常常竭尽全力进行前端页面优化,但却忽略了这样做的效果和意义。先不急于探究前端优化具体可以怎样去做,先看看什么是前端性能,应该怎样去了解和评价前端页面的性能。
ouven 发布于 4个月前 阅读 2141 评论 3 点赞 5

为什么43%前端开发者想学Vue.js

根据[JavaScript 2017前端库状况调查](https://stateofjs.com/2017/front-end/results/) **Vue.js**是开发者最想学的前端库。我在这里说明一下我为什么认为这也是和你一起通过使用Vue构建一个简单的App应用程序的原因。 我最近曾与Evan You,Chris Fritz,Sarah Drasner,和Adam Jahr做了一个介绍视频,而现在你可以在http://vuejs.org首页找到它。以下是该视频的文字版本。 # 伟大的JavaScript迁移 如你所知,**JavaScript**在过去的10年中已经成熟了很多,而且服务器端正常运行的大部分代码已经迁移到浏览器中了。随着这变得越来越复杂,框架也变得越来越有组织性。 ![为什么43%前端开发者想学Vue.js](http://upload-images.jianshu.io/upload_images/145564-47adf719c305dab3?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 我不打算告诉你为什么一个比另一个更好的,虽然在官方网站有一个详细的比较。 **Vue.js**旨在成为一个平易近人,多功能,高性能,可维护性,可测试的JavaScript框架。Vue的目也是为了进步,意思就是如果你有一个现有的应用程序存在只占一个部分的前端,你需要更多的互动体验那么就可以使用Vue。 或者,您也可以从一开始就在前端构建更多的...
笔阁 发布于 4个月前 阅读 5624 评论 31 点赞 7

JSDuck 与 AngularJS 融合技巧

  字数:1568 阅读时间:10分钟     前言 前面,我们以一个实战案例来详细说明了如何在实际开发中使用JSDuck工具。但是,并不是所有的时候,代码的封装方式都受我们控制的。例如,如果我们使用了现在的几个主流框架AngularJS、React或者Vue的时候,代码的封装方式就必须按照框架定义的方式来构建。当我们的代码中出现了模块、控制器、服务、指令等JSDuck完全不认识的组成部分时,我们该如何使用JSDuck来正确描述我们的代码呢? 那么,下面,笔者就以 AngularJS 为例,来说一说笔者自己的解决方案。     融合思路 解决这个问题,有两种思路。第一种,可以将JSDuck不识别的代码部分映射到工具识别的标签来进行描述。第二种,既然没有现成的标签来描述这些新成员,那我们可以自定义一套标签来描述它们。 第一种方法更方便,不需要额外编码;第二种方法更优雅,但是需要自定义一整套标签。 这里,由于笔者对文档的要求主要是实用,不需要那么完美,而且现在也没有过多的精力来研发一整套标签。所以,笔者选择了第一种解决方案。 第一种方案最核心的地方就是需要确定AngularJS框架给我们的代码带来了哪些新成员,而后如何将这些新成员映射到原有的标签中去。 AngularJS给我...
老司机带你撸代码 发布于 4个月前 阅读 737 评论 1 点赞 2

用Vue.js递归组件构建一个可折叠的树形菜单

![](http://upload-images.jianshu.io/upload_images/145564-1ccbec67a1618829?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 在Vue.js中一个递归组件调用的是其本身,如: ``` Vue.component('recursive-component', {   template: `              ` }); ``` 递归组件常用于在blog上显示注释、嵌套的菜单,或者基本上是父和子相同的类型,尽管具体内容不同。例如: ![](http://upload-images.jianshu.io/upload_images/145564-2b37fc10cb0e5186?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 现在给您演示一下如何有效地使用递归组件,我将通过建立一个可扩展/收缩的树形菜单的来一步步进行。 # 数据结构 一个树状UI的递归组件将是一些递归数据结构的可视化表达。在本教程中,我们将使用树状结构,其中每个节点都是一个对象: 1. 一个 **label** 属性。 2. 如果它有子节点,一个 **nodes** 属性,则它是一个或多个节点的数组属性。 与所有树结构一样,它必须有一个根节点,但可以无限深。 ``` let tree = {   label: 'root',   nodes: [     {       label: 'item1',       nodes: [         {           label: 'item1.1'   ...
笔阁 发布于 4个月前 阅读 2116 评论 3

Webpack自动化构建实践指南

由于现在的博客是使用wordpress搭建,自己得经常修改过一些代码,但是修改第三方源码真的比较痛苦,于是决定计划开始使用React + Node.js / Python开发新博客项目,最终替换当前博客代码,方便以后博客的维护和更新,也能实现自我开发技术,架构设计,解决问题能力的提升,同时记录下整个开发历程,总结,分享,希望能与读者们一起进步。本篇介绍如何使用Webpack和Babel,Eslint,documentation.js等搭建项目开发环境和生产环境,也算项目的准备工作,下一期计划介绍项目的架构设计和技术栈选择。
熊建刚 发布于 4个月前 阅读 1538 评论 4 点赞 3

合格前端系列第八弹-造一个属于自己的 UI 库

轮子总得造上一造~
qiangdada 发布于 4个月前 阅读 3724 评论 9 点赞 8

Vue中使用axios的一些注意点

1. 基本使用 现在我们的团队使用的基本都是axios发起请求,使用方式如下 在service.js文件中返回promise对象 import config from '@/config' import axios from 'axios' export default{ /*启用停用*/ setB2bStoreGoodsBlackUpOrDown(data) { return new Promise(function (resolve, reject) { const url = `${config.server.http}${config.server.host}/b2b-seller-admin/setStoreGoodsBlackUpOrDown` axios.post(url, data) .then(function (data) { resolve(data) }) .catch(function (error) { reject(error) }) }) }, /*一个接口查黑名单*/ getListB2bCanaleStoreGoodsBlacks(data) { return new Promise(function (resolve, reject) { const url = `${config.server.http}${config.server.host}/b2b-seller-admin/page/getListCanaleStoreGoodsBlacks` axios.post(url, data) .then(function (data) { resolve(data) ...
龙马行空 发布于 4个月前 阅读 1733 评论 17 点赞 2

vue全面介绍

2016年最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,“vue.js兼具angular.js和react.js的优点,并剔除了它们的缺点”。授予了这么高的评价的vue.js,也是开源世界华人的骄傲,因为它的作者是位中国人–尤雨溪(Evan You)。 Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架。它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计。相比于Angular.js,Vue.js提供了更加简洁、更易于理解的API,使得我们能够快速地上手并使用Vue.js;同时比起 React + Redux 相对复杂的架构,
爱敲代码的程序员 发布于 5个月前 阅读 5312 评论 13 点赞 15

用vue做一个酷炫的menu

写在前面         最近看到一个非常酷炫的menu插件,一直想把它鼓捣成vue形式,谁让我是vue的死灰粉呢,如果这都不算爱😔。😆开个小玩耍,我们一起来探索黑魔法吧。观看本教程的读者需要具备一定的vue和css3的知识. 本文结构 1.效果演示 2.使用方法介绍 3.关键步骤讲解 正文 1.效果演示   pic_1   pic2   pic_3      在线演示live demo 2.使用介绍         项目地址:github.com/MingSeng-W/vue-bloom-menu,clone项目到本地        a. 首先在单文件组件里引入menu组件,导入common文件夹stylus里的menuConfig.stylus.        b.配置相应的参数             可选参数             * radius:default为100px,item距离menu的button的距离。             *  startAngle:defaut为0,item开始的角度,以时钟3点钟方向记为0,然后顺时针方向为递增方向。            *  endAngle:default为315,最后一个item的角度。            *  itemNum:default为8             *  animationDuration:default为0.5s,每个item动画的执行时间             *  itemAnimationDelay:d...
MingSeng-W 发布于 5个月前 阅读 6274 评论 20 点赞 17

用 Electron 打造 Win/Mac 应用,从「代码」到可下载的「安装包」,可能比你想得麻烦一点

我们能从很多地方学习到怎么起一个 Electron 项目,有些还会介绍怎么打包或构建你的代码,但距离「真正地发行一款 Electron 产品」这一目标,还有很多工作需要做... 这是 Electron 系列文章的第二篇,这一篇文章将和大家分享我是怎么去构建**自动化的 Electron 开发构建工程**的,说白了,就是**怎么把敲的代码变成一个用户可以下载安装的包**,当然随着之后应用复杂度的提升和技术再选型,工程体系可能随时会重构或演进,但至少可以给大家一些参考,欢迎留言交流。
Stinson_Zhao 发布于 5个月前 阅读 3532 评论 9 点赞 13

Angular 5 快速入门与提高

**一、概述** 尽管被称为`Angular5`,实际上它只是这个诞生于2012年的前端框架的的第四个版本: ![angular history](http://xc.hubwiz.com/class/59de66862d4f22811dc6b2f7/img/angular-history.png) 看起来差不多半年就发布一个新版本,不过实际上从重写的版本`2`开始,开发 接口与核心思想就稳定下来了,并基本保持着与前序版本的兼容性。 在`5`这个新的版本中,`Angular`团队将改进重点放在以下特性方面: - 更易于构建渐进式`Web`应用 —— __P__rogressive __W__eb __A__pp - 使用构建优化器剔除无用代码,以获得更小的应用、更快的网络加载时间 - 使物化设计组件兼容服务端渲染 `PWA`是`Google`提出的一个标准,旨在让Web应用在移动终端上获得媲美原生 应用的用户体验。一个`PWA`应用主要利用`Service Worker`和浏览器缓存来 提省交互体验,它不仅可以直接部署在手机桌面,而且可以离线应用: ![pwa](http://xc.hubwiz.com/class/59de66862d4f22811dc6b2f7/img/pwa.png) **二、引入angular环境** `Angular`推荐使用`TypeScript`来开发应用,这要求使用一个在线 编译器(`JIT`)实时编译代码,或者在开发期采用预编译器(`AOT`)提前编译代码。 为了避免这个繁琐的过程影...
笔阁 发布于 6个月前 阅读 2748 评论 11 点赞 4
顶部