position

仿抖音上下滑动播放视频

怎甘沉沦 提交于 2020-03-10 22:14:17
不少朋友对短视频,上下滑动播放视频效果比较比较感兴趣,今天看看这个案例。 1、效果图: 讲下大概思路,使用Recycleview配合自定义LinearLayoutManager来实现这个功能,这里着重说下自定义LinearLayoutManager的实现可以看到每当下一个item滑入屏幕时,上面的item会继续播放视频,而滑入的item只有当全部进入屏幕才会播放,而且当手指抬起时,当前item会根据滑动的距离相应的自动滑入滑出,针对这种情形,就会想到使用SnapHelper RecyclerView在24.2.0版本中新增了SnapHelper这个辅助类,用于辅助RecyclerView在滚动结束时将Item对齐到某个位置。特别是列表横向滑动时,很多时候不会让列表滑到任意位置,而是会有一定的规则限制,这时候就可以通过SnapHelper来定义对齐规则了。 SnapHelper是一个抽象类,官方提供了一个LinearSnapHelper的子类,可以让RecyclerView滚动停止时相应的Item停留中间位置。25.1.0版本中官方又提供了一个PagerSnapHelper的子类,可以使RecyclerView像ViewPager一样的效果,一次只能滑一页,而且居中显示,也就是说使用SnapHelper可以帮助RecyclerView滑动完成后进行对齐操作

Ruby on Rails,链式调用order,limit,offset方法对条件查询结果进行整理

孤人 提交于 2020-03-10 18:15:27
在《 Ruby on Rails,使用where方法对持久化对象进行条件查询 》我们学习到可以通过where方法进行条件查询操作返回对象列表。 还有三个方法可以对返回的列表进行操作以便得到我们想要的结果集。 order方法对结果进行排序,比如将返回的对象按照名称升序排列、按照创建时间降序排列等。 limit方法对结果的数量进行限制,比如数据库中有成千上万的注册用户,我们不希望一下子把这些用户的信息都取出来,而是希望将这些用户分页显示,点击下一页才进行下一次读取。 limit方法读取第一页的N个用户,第二页需要返回的用户都需要将前面的N记录跳过,这里就用到了offset方法。 所以说,order;limit;offset方法配合使用就可以实现分页功能。 之前提到的find方法也有这三个功能比如,将所有Subject对象按照position的值升序排列后,跳过前面的40个,返回20条对象: Subject.find(:all, :order=> "position ASC", :limit => 20, :offset => 40) 前面提到了,find已经被where替代了,并已标注了不建议使用。所以记住以后要使用where配合三个独立方法哦! Subject.order("position").limit(20).offset(40)

css之定位 position

我是研究僧i 提交于 2020-03-10 16:39:20
什么是定位?!定位是一种更加高级的布局手段,通过定位可以将元素摆放到页面的任意位置。 position 属性设置 可选值: static 默认值,元素是静止的没有开启定位 relative 开启元素的相对定位 absolute 开启元素的绝对定位 fixed 开启元素的固定定位 sticky 开启元素的粘滞定位 1、相对定位: 特点: 元素开启定位后不设置偏移量不会发生任何变化。 是相对于元素在文档流中的位置进行定位的。 可以提升层级,也就是可以盖住别的元素。 不会脱离文档流,也就相当于灵魂出窍,肉身还在。 不会改变元素的性质,块还是块,行内还是行内。 偏移量: top 定位元素和定位位置上边的距离 bottom 定位元素和定位位置下边的距离 left 定位元素和定位位置左边的距离 right 定位元素和定位位置右边的距离 2、绝对定位: 特点: 不设置偏移量位置还是不变。 但是,开启绝对定位后元素脱离文档流。(脱离文档流有什么特点,写在了浮动那一块了,总的来说就是不再区分块和行,宽高被内容撑开) 元素会提升一个层级。 相对于包含块定位。(绝对定位的包含块是离他最近的开启了定位的祖先元素,但要是祖先元素都没开启定位,则根元素html是它的包含块) 3、固定定位: 固定定位也是一种绝对定位,所以固定定位的大部分特点和绝对定位一样,唯一不同的是固定定位永远是相对于浏览器视口进行定位的。

再爬拉钩,直接忽略反爬!Selenium+Xpath+re 可见可爬

本小妞迷上赌 提交于 2020-03-09 19:04:53
再爬拉钩,直接忽略反爬!Selenium+Xpath+re 可见可爬 之前我写过一篇博 python成功爬取拉勾网——初识反爬(一个小白真实的爬取路程,内容有点小多) 这是我第一次对具有多种反爬措施的网站进行的爬取,之前爬取的大都是简单的定点静态网页爬取(练习简单的python网络爬虫库的使用),所以遇到了一大波挫折,看了很多大佬的博客后才勉强解决,当然现在已经可以很好的理解拉钩数据加载的方式(Ajax动态加载数据)和反爬措施有很好的了解啦😁 最近学习了Selenium自动化测试库,就想尝试的用这种方法对拉钩再次进行爬取,体会其中的不同,使用这种库当然是因为它模拟了浏览器的浏览和人为的点击输入,不需要对网页请求响应的分析,更不需要构造头部请求,所以便想试一试。因为不需要过多的分析,所以直接上代码! 导入需要的库: from selenium import webdriver import time import lxml from lxml import etree import re 在主方法中进行模拟浏览器浏览和点击,若是放在某一个方法中可能会出现可以模拟浏览成功,但可能出现秒退出的结果: if __name__ == '__main__' : url = 'https://www.lagou.com/' #login(url) #初始化浏览器 driver =

关于jQuery中实现放大镜效果

我与影子孤独终老i 提交于 2020-03-09 09:30:08
1.1.1 摘要 相信大家都见过或使用过放大镜效果,甚至实现过该效果,它一般应用于放大查看商品图片,一些电商网站(例如:凡客,京东商城,阿里巴巴等)都有类似的图片查看效果。 在接下来的博文中,我们将向大家介绍通过jQuery实现放大镜效果。 目录 实现原理 mousemove事件 相对坐标 background-position属性 mousewheel事件 1.1.2 正文 实现原理 首先,我们讲解一下放大镜效果的实现方式: 方法一:准备一张高像素的大图,当鼠标放到原图上,加载显示大图的对应位置。 方法二:对原图片进行放大,也就是调整原图的长和宽。 上面我们介绍了通过两种方式实现放大镜效果,接下来,我们将以上的两种方式应用到我们的jQuery插件中。 首先,我们需要一个img元素显示原图对象,还需要一个容器作为显示框;显示框里面存放大图对象。当鼠标移动到原图上时,通过对大图进行绝对定位来显示对应的部位,实现类似放大镜的效果。 接下来,让我们定义Index.html页面,具体实现如下: <!doctype html> <html lang="en-US"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title>jQuery Image Zoom Demo</title>

CSS的水平居中和垂直居中方式

眉间皱痕 提交于 2020-03-08 22:02:28
水平居中 1.行内元素或行内块元素水平居中,即给其父元素添加text-align:center 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Document</title> 8 <style> 9 * { 10 padding: 0; 11 margin: 0; 12 } 13 14 .wrapper { 15 height: 400px; 16 background-color: pink; 17 text-align: center; 18 } 19 </style> 20 </head> 21 22 <body> 23 24 <div class="wrapper"> 25 <span class="center">text-align:center</span> 26 </div> 27 28 </body> 29 30 </html> 2.块级元素水平居中可以用margin:0 auto 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta

2D游戏开发课程第2次作业

主宰稳场 提交于 2020-03-08 17:13:11
一、序列应用——猜单词游戏 代码 import random WORDS=("apple","banana","cat","dog","elephant","finger","grand","hello","illness") print("欢迎参加猜单词游戏,把字母组合成一个正确的单词") iscontinue="y" while iscontinue=="y" or iscontinue=="Y": word=random.choice(WORDS) correct=word jumble="" while word: position=random.randrange(len(word)) jumble+=word[position] word=word[:position]+word[(position+1):] print("乱序后单词:",jumble) guess=input("\n请你猜:") while guess !=correct and guess !="": print("对不起不正确") guess=input("继续猜:") if guess==correct: print("真棒,你猜对了!\n") iscontinue = input("\n\n是否继续(Y/N):") 来源: oschina 链接: https://my.oschina.net

Gson简要使用笔记

旧时模样 提交于 2020-03-08 14:13:09
  前几段微软推出的大数据人脸识别年龄应用how-old.net在微博火了一把,它可以通过照片快速获得照片上人物的年龄,系统会对瞳孔、眼角、鼻子等27个“面部地标点"展开分析,进而得出你的“颜龄"。 来看下关于这款应用的截图:  昨晚闲着没事,在网上查阅了点资料仿写了一款类似功能的APP,看下截图:       关于人脸识别技术本想去使用微软给开发人员提供的SDK,但由于天朝巨坑的网络,我连How-old.net官网都登不上,只能绕道去找找其他地方有没类似功能的SDK。后来想起之前在搞O2O的时候,看到过一则关于支付宝"刷脸支付"功能的新闻,查找了相关资料发现他们的"刷脸技术"是Face++提供的,也就这样找到了个好东西。   这是Face++的官方网站: http://www.faceplusplus.com.cn/ ,在网站里可以找到它为开发者提供了一部分功能的SDK(需要注册),其中就有人脸识别,判断年龄性别种族这个功能。   我们注册个账号,然后创建个应用就可以得到官方给我们提供的APIKey和APISecret,记录下来,然后到到开发者中心( http://www.faceplusplus.com.cn/dev-tools-sdks/ )就可以下载到对应版本的SDK,就一个Jar包直接导入项目就可以,这是官方给我们提供的API参考文档( http://www

水平垂直居中div的3中方式

回眸只為那壹抹淺笑 提交于 2020-03-08 13:48:08
flex方式 <div class="dv"> <div class="dv2"></div> </div> .dv{ width: 400px; height: 400px; background-color: red; display: flex; justify-content: center; align-items: center; } .dv2{ width: 200px; height: 200px; background-color:blue; } position方式 <div class="dv3"> <div class="dv4"> </div> </div> <style> .dv3 { width: 400px; height: 400px; background-color: yellow; position: relative; } .dv4 { width: 200px; height: 200px; position: absolute; background-color: purple; margin: auto; top: 0; bottom: 0; left: 0; right: 0; } </style> position+transform 方式 <div class="dv5"> <div class="dv6"> </div> <

JavaScript实现双向链表

99封情书 提交于 2020-03-08 10:55:30
JavaScript实现双向链表 一、双向链表简介 双向链表 :既可以 从头遍历到尾 ,又可以 从尾遍历到头 。也就是说链表连接的过程是 双向 的,它的实现原理是:一个节点既有 向前连接的引用 ,也有一个 向后连接的引用 。 双向链表的缺点: 每次在 插入或删除 某个节点时,都需要处理四个引用,而不是两个,实现起来会困难些; 相对于单向链表,所占 内存空间更大 一些; 但是,相对于双向链表的便利性而言,这些缺点微不足道。 双向链表的结构: 双向链表不仅有 head 指针指向第一个节点,而且有 tail 指针指向最后一个节点; 每一个节点由三部分组成: item 储存数据、 prev 指向前一个节点、 next 指向后一个节点; 双向链表的第一个节点的prev指向 null ; 双向链表的最后一个节点的next指向 null ; 双向链表常见的操作(方法): append(element):向链表尾部添加一个新的项; inset(position,element):向链表的特定位置插入一个新的项; get(element):获取对应位置的元素; indexOf(element):返回元素在链表中的索引,如果链表中没有元素就返回-1; update(position,element):修改某个位置的元素; removeAt(position):从链表的特定位置移除一项; isEmpty