element

JS动画三剑客——setTimeout、setInterval、requestAnimationFrame

て烟熏妆下的殇ゞ 提交于 2020-08-13 03:02:19
一、前言   前端实现动画效果主要有以下几种方法:CSS3中的transition 和 animation ,Javascript 中可以通过定时器 setTimeout、setinterval,HTML5 canvas,HTML5提供的requestAnimationFrame。本文主要分析setTimeout、setinterval、requestAnimationFrame三者的区别和他们各自的优缺点。在了解他们三个之前,我们先来看看一些相关概念。 二、相关概念介绍   1.屏幕刷新频率     即图像在屏幕上更新的速度,也即屏幕上的图像每秒钟出现的次数,它的单位是赫兹(Hz)。 对于一般笔记本电脑,这个频率大概是60Hz。这个值的设定受屏幕分辨率、屏幕尺寸和显卡的影响。   2.动画原理     动画本质就是要让人眼看到图像被刷新而引起变化的视觉效果,这个变化要以连贯的、平滑的方式进行过渡。在屏幕每次刷新前,将图像的位置向左移动一个像素,即1px。屏幕每次刷出来的图像位置都比前一个要差1px,你就会看到图像在移动;由于我们人眼的视觉停留效应,当前位置的图像停留在大脑的印象还没消失,紧接着图像又被移到了下一个位置,因此你才会看到图像在流畅的移动,这就是视觉效果上形成的动画。 三、setInterval   1.运行机制     按照指定的周期(以毫秒计)来调用函数或计算表达式

LeetCode 34 | 在排序数组中查找元素的第一个和最后一个位置

喜你入骨 提交于 2020-08-13 02:08:05
""" https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/er-fen-cha-zhao-suan-fa-xi-jie-xiang-jie-by-labula/ 思路:将nums分成左右两个域,分别进行查找left,right值 二分法查找可以参考33题,只不过需要在nums[mid]=target时,继续进行二分查找 注意:需要考虑出界问题,left在最右边;right在最左边情况 left<=len(nums)-1 and nums[left]=target;返回left;否则返回-1 right>=0 and nums[right]=target;返回right;否则返回-1 注意:分半时需要将指针mid+1,mid-1 """ class Solution: def searchRange(self,nums,target): #特判,nums为空 if len(nums)==0:return [-1,-1] l=self.left_bound(nums,target) r=self.right_bound(nums,target) return [l,r] #查找左边界 def left_bound(self,nums

Java集合源码分析(一)ArrayList

假装没事ソ 提交于 2020-08-13 00:08:46
前言   在前面的学习集合中只是介绍了集合的相关用法,我们想要更深入的去了解集合那就要通过我们去分析它的源码来了解它。希望对集合有一个更进一步的理解!   既然是看源码那我们要怎么看一个类的源码呢?这里我推荐的方法是:     1)看继承结构       看这个类的层次结构,处于一个什么位置,可以在自己心里有个大概的了解。     2)看构造方法       在构造方法中,看做了哪些事情,跟踪方法中里面的方法。     3)看常用的方法       跟构造方法一样,这个方法实现功能是如何实现的   注:既然是源码,为什么要这样设计类,有这样的继承关系。这就要说到设计模式的问题了。所以我们要了解常用的设计模式,才能更深刻的去理解这个类。 一、ArrayList简介 1.1、ArrayList概述   1)ArrayList是可以 动态增长和缩减的索引序列,它是基于数组实现的List类 。   2)该类封装了一个动态再分配的Object[]数组,每一个类对象都有一个capacity属性,表示它们所封装的Object[]数组的长度,当向ArrayList中添加元素时,该属性值会自动增加。     如果想ArrayList中添加大量元素,可使用ensureCapacity方法一次性增加capacity,可以减少增加重分配的次数提高性能。   3)ArrayList的用法和Vector向类似

片段中的findViewById

扶醉桌前 提交于 2020-08-13 00:01:43
问题: I am trying to create an ImageView in a Fragment which will refer to the ImageView element which I have created in the XML for the Fragment. 我试图在一个Fragment中创建一个ImageView,该ImageView引用我在Fragment的XML中创建的ImageView元素。 However, the findViewById method only works if I extend an Activity class. 但是,仅当我扩展Activity类时, findViewById 方法才有效。 Is there anyway of which I can use it in Fragment as well? 无论如何,我也可以在Fragment中使用它吗? public class TestClass extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ImageView imageView = (ImageView

行为模式之访问者模式

一曲冷凌霜 提交于 2020-08-12 23:51:10
1 概述 访问者模式 (Visitor Pattern)是一种行为模式,不常用。它可以将作用在对象上的算法逻辑,与对象本身分离开来。 2 访问者模式 当需要对一组相似类型的对象执行操作时,我们可以将操作逻辑分别维护在每个对象内部,但这违背了 单一职责原则 。 访问者模式 就是来应对这种情况的:将所有的算法逻辑移动到一个新的类---- 访问者 (Visitor)中,统一维护,如果其中的逻辑发生了变化,那么我们只需要在访问者实现中进行更改,而不用影响到原对象。同时,在 访问者模式 中,扩展变得很容易,增加新的对象以及操作逻辑,只需要在 访问者 中做添加即可。 3 案例 来看一个例子。购物结算时,需要统计所有商品的价格,同时还要考虑到商品的折扣,不同的商品,优惠政策也不一样。我们用 访问者模式 ,来统一处理结算的逻辑: public interface Visitable { int accept(Visitor visitor); } public interface Fruit extends Visitable { int getPricePerKg(); int getWeight(); } // 水果类只需要维护自身的属性如单价,重量等信息,无需关心结算方式 public class Apple implements Fruit { private int pricePerKg

移动端APP自动化测试超全基础汇总

落花浮王杯 提交于 2020-08-12 20:54:10
  目录 一.面试过程 1.自动化岗位要求  2.面试流程,面试类型  3.沟通技巧,不同级别要求 二.真实面试案例 1.一个输入框的面试题(有人拿到高级岗位,有人连初级都没拿到,为什么) 三.自我分析 1.积累的知识决定了初入社会的岗位  2.什么是好的简历  3.需要掌握的基本知识 四.技术基础知识 1.常见测试理论  2.python语言常见问题  3.python常问算法  4.linux基本命令  5.计算机网络  6.操作系统  7.数据库相关  8.fiddler抓包工具  9.android系统相关工具  10.adb相关问题  11.monkey相关问题 五.自动化工具 1.Instrumentation  2.UIAutomator  3.Selendroid  4.Robotium  5.Appium  6.Selenium 六.自动化框架 1.Unittest框架  2.数据驱动DDT  3.行为驱动Lettuce  4.关键字驱动Robot Framework  5.测试报告管理  6.邮件服务管理 七.接口自动化 1.postman  2.python requests 八.持续集成(概念)  九.服务端性能测试  十.兼容性测试  十一.调试 正文 一.招聘要求   二.面试过程(笔试-技术-性格-薪资 )  三.面试类型  四.问题类型  五

🚀点亮你的Vue技术栈,万字Nuxt.js实践笔记来了

有些话、适合烂在心里 提交于 2020-08-12 20:53:48
前言 作为一位 Vuer(vue开发者),如果还不会这个框架,那么你的 Vue 技术栈还没被点亮。 Nuxt.js 是什么 Nuxt.js 官方介绍: Nuxt.js 是一个基于 Vue.js 的通用应用框架。 通过对客户端/服务端基础架构的抽象组织,Nuxt.js 主要关注的是应用的 UI渲染。 我们的目标是创建一个灵活的应用框架,你可以基于它初始化新项目的基础结构代码,或者在已有 Node.js 项目中使用 Nuxt.js。 Nuxt.js 预设了利用 Vue.js 开发服务端渲染的应用所需要的各种配置。 如果你熟悉 Vue.js 的使用,那你很快就可以上手 Nuxt.js 。开发体验也和 Vue.js 没太大区别,相当于为 Vue.js 扩展了一些配置。当然你对 Node.js 有基础,那就再好不过了。 Nuxt.js 解决什么问题 现在 Vue.js 大多数用于单页面应用,随着技术的发展,单页面应用已不足以满足需求。并且一些缺点也成为单页面应用的通病,单页面应用在访问时会将所有的文件进行加载,首屏访问需要等待一段时间,也就是常说的白屏,另外一点是总所周知的 SEO 优化问题。 Nuxt.js 的出现正好来解决这些问题,如果你的网站是偏向社区需要搜索引擎提供流量的项目,那就再合适不过了。 我的第一个 Nuxt.js 项目 我在空闲的时间也用 Nuxt.js 仿掘金 web

C#黔驴技巧之去重(Distinct)

对着背影说爱祢 提交于 2020-08-12 20:42:54
前言 关于C#中默认的Distinct方法在什么情况下才能去重,这个就不用我再多讲,针对集合对象去重默认实现将不再满足,于是乎我们需要自定义实现来解决这个问题,接下来我们详细讲解几种常见去重方案,孰好孰歹自行判之。 分组 首先给出我们需要用到的对象,如下: public class Person { public string Name { get ; set ; } public int Age { get ; set ; } } 接下来我们添加100万条数据到集合中,如下: var list = new List<Person> (); for ( int i = 0 ; i < 1000000 ; i++ ) { list.Add( new Person() { Age = 18 , Name = " jeffcky " }); } 接下来我们对年龄和名称进行分组,然后取第一条即可达到去重,如下: list = list.GroupBy(d => new { d.Age, d.Name }) .Select(d => d.FirstOrDefault()) .ToList(); 扩展方法(HashSet去重) 我们知道在C#中HashSet对于重复元素会进行过滤筛选,所以我们写下如下扩展方法,遍历集合元素,最后利用HashSet进行过滤达到去重目的,如下: public

基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件

本秂侑毒 提交于 2020-08-12 19:59:34
目录 1. 前言 2. 关于vue-simple-uploader 3. 基于vue-simple-uploader封装全局上传组件 4. 文件上传流程概览 5. 文件分片 6. MD5的计算过程 7. 秒传及断点续传 7.1 对于前端来说 7.2 前端做分片检验:checkChunkUploadedByResponse 8. 源码及后记 8.1 关于第一个分片丢失问题 2019/8/6更新 1. 前言 之前公司要在管理系统中做一个全局上传插件,即切换各个页面的时候,上传界面还在并且上传不会受到影响,这在vue这种spa框架面前并不是什么难题。然而后端大佬说我们要实现 分片上传 、 秒传 以及 断点续传 的功能,听起来头都大了。 很久之前我写了一篇webuploader的文章,结果使用起来发现问题很多,且官方团队不再维护这个插件了, 经过多天调研及踩雷,最终决定基于 vue-simple-uploader 插件实现该功能,在项目中使用起来无痛且稳定。 如果你只是想实现基本的(非定制化的)上传功能,直接使用 vue-simple-uploader ,多读一下它的文档,不需要更多的二次封装。 如果你只是想实现全局上传插件,也可以参照一下我的实现。 如果你用到了分片上传、秒传及断点续传这些复杂的功能,恭喜你,这篇文章的重点就在于此。 本文源码在此: https://github.com

Nuxt配置Element-UI按需引入方法

一世执手 提交于 2020-08-12 19:18:13
Nuxt 使用 create-nuxt-app 创建项目时,选择使用 Element-UI 为默认组件库,发现 Nuxt 没有开启 Element-UI 的按需引入配置,需要自行配置。 安装依赖 在 create-nuxt-app 中没有选择 Element-UI 的先安装。 npm install element-ui --save 或者 yarn add element-ui Element-UI 开启按需引入,必须安装 babel-plugin-component 插件。 npm install babel-plugin-component --save-dev 或者 yarn add babel-plugin-component 安装完成后,在文件根目录创建(或已经存在) plugins/ 目录下创建相应的插件文件,创建名为:element-ui.js 的文件。 // element-ui.js import Vue from 'vue' import { Container, Header, Aside, Main, Menu, MenuItem, Button, Form, FormItem, Input } from 'element-ui' import locale from 'element-ui/lib/locale/lang/en' const