首页 文章 精选 留言 我的

精选列表

搜索[动效],共4758篇文章
优秀的个人博客,低调大师

Linux系统CentOS6、CentOS7手修改IP地址

CentOS_v6 1.打开文件 sh 复制代码 vi /etc/sysconfig/network-scripts/ifcfg-eth0 2.编辑 sh 复制代码 BOOTPROTO=static DNS1=10.0.0.1 IPADDR=10.0.0.70 NETMASK=255.255.255.0 GATEWAY=10.0.0.1 3.保存退出 sh 复制代码 :x 4.重启网络服务 sh 复制代码 service network restart 5.查看修改结果 sh 复制代码 ifconfig CentOS_v7 1.查看网络接口 sh 复制代码 nmcli dev status 2.打开文件(eno16777728为刚刚查看接口的名称) sh 复制代码 vi /etc/sysconfig/network-scripts/ifcfg-ens32 vi /etc/sysconfig/network-scripts/ifcfg-ens192 3.编辑 sh 复制代码 BOOTPROTO=static DNS1=10.0.0.1 IPADDR=10.0.0.70 NETMASK=255.255.255.0 GATEWAY=10.0.0.1 4.保存退出 sh 复制代码 :x 5.重启网络服务 sh 复制代码 service network restart 6.查看修改结果 sh 复制代码 ip addr

优秀的个人博客,低调大师

CSS 计数器的妙用:数字递增动效

持续进步的同学都关注了“1024译站” CSS 计数器是由 CSS 维护的变量,这些变量可根据 CSS 规则增加从而跟踪使用次数。我们可以利用这个特性,根据文档位置来调整内容表现,比如显示列表编号。 最近在公司官网就用到了这个特性: image.png 因为这里的序号只是个装饰,并不强调先后顺序。比起使用真实 DOM 元素显示序号,CSS 计数器更加简洁灵活,万一内容顺序需要调整,序号也不受影响。 有时候我们会看到某些 Dashboard 界面有数字快速滚动的效果,比如招行 App 的账户余额。这种效果怎么实现呢?本文会介绍几种方法。 JavaScript 方案 最简单的莫过于用setInterval定时器了,定期修改 DOM 内容就行。不过为了实现更平顺的动画效果,更推荐使用requestAnimationFrame: functionanimateValue(obj,start,end,duration){letstartTimestamp=null;conststep=(timestamp)=>{if(!startTimestamp)startTimestamp=timestamp;constprogress=Math.min((timestamp-startTimestamp)/duration,1);obj.innerHTML=Math.floor(progress*(end-start)+start);if(progress<1){window.requestAnimationFrame(step);}};window.requestAnimationFrame(step);}constobj=document.getElementById("value");animateValue(obj,100,0,5000); js.gif CSS @keyframes 结合 margin 这个思路比较有意思,原理是把数字排成一行,通过动画移动元素位置来显示不同位置的数字: <divclass="counter"><divclass="numbers"><div>0</div><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><div>6</div><div>7</div><div>8</div><div>9</div><div>10</div></div></div> .counter{width:100px;overflow:hidden;}.numbers{width:auto;display:flex;animation:countNumber4sinfinitealternate;animation-timing-function:steps(10);}.numbersdiv{text-align:center;flex:00100px;}@keyframescountNumber{0%{margin-left:0px;}100%{margin-left:-1000px;}} keyframe.gif CSS 计数器入门版 CSS 计数器使用到以下几个属性: counter-reset - 创建或者重置计数器 counter-increment - 递增变量 content - 插入生成的内容 counter() 或 counters() 函数 - 将计数器的值添加到元素 要使用 CSS 计数器,得先用 counter-reset 创建。结合 CSS 动画@keyframes,在动画的不同阶段设置不同的递增值,就能实现这个效果: <div></div> div::after{content:counter(count);animation:counter3slinearinfinitealternate;counter-reset:count0;}@keyframescounter{0%{counter-increment:count0;}10%{counter-increment:count1;}20%{counter-increment:count2;}30%{counter-increment:count3;}40%{counter-increment:count4;}50%{counter-increment:count5;}60%{counter-increment:count6;}70%{counter-increment:count7;}80%{counter-increment:count8;}90%{counter-increment:count9;}100%{counter-increment:count10;}} CSS 计数器高配版 更进一步,如果敢用最新特性,其实有更秀的操作,那就是给 CSS 变量设置动画。这个技巧的核心就是设置 CSS 自定义属性为整数类型,这样就能像其他拥有整数类型值的 CSS 属性一样,可用于transition中了。 @property--num{syntax:'<integer>';initial-value:0;inherits:false;}div{transition:--num1s;counter-reset:numvar(--num);}div:hover{--num:10000;}div::after{content:counter(num);} 不过需要注意的是,目前只有 Chrome (或者 Chromium 内核的浏览器比如 Edge 和 Opera)支持@property语法,因此兼容性是个问题。如果你的页面只针对 Chrome(比如 Electron 应用),那就可以放心使用。否则还是用前面的保守方案吧。 小数也能玩动画 前面说的变量都要求是整数,那能不能让小数也支持这种动画呢?答案是可以的。 可以把小数转成整数。步骤原理是: 注册一个整型的 CSS 变量(即--number),指定初始值initial-value。 用calc将值取整:--integer: calc(var(--number)) @property--integer{syntax:"<integer>";initial-value:0;inherits:false;}--number:1234.5678;--integer:calc(var(--number));/*1235*/ 如果只需要提取整数部分,可以这样:--integer: max(var(--number) - 0.5, 0),连calc()都不需要了。类似方法可以提取小数部分。 /*@property--integer*/--number:1234.5678;--integer:max(var(--number)-0.5,0);/*1234*/ 完整代码: <div></div> @property--percent{syntax:"<number>";initial-value:0;inherits:false;}@property--temp{syntax:"<number>";initial-value:0;inherits:false;}@property--v1{syntax:"<integer>";initial-value:0;inherits:false;}@property--v2{syntax:"<integer>";initial-value:0;inherits:false;}div{font:80040pxmonospace;padding:2rem;transition:--percent1s;--temp:calc(var(--percent)*100);--v1:max(var(--temp)-0.5,0);--v2:max((var(--temp)-var(--v1))*100-0.5,0);counter-reset:v1var(--v1)v2var(--v2);}div::before{content:counter(v1)"."counter(v2,decimal-leading-zero)"%";} constgenNumber=()=>{document.querySelector("div").style.setProperty("--percent",Math.random());};setInterval(genNumber,2000);setTimeout(genNumber); decimal.gif 顺手点“在看”,每天早下班;转发加关注,共奔小康路~ 本文分享自微信公众号 - 1024译站(trans1024)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

解密:智能美妆和动效自拍背后的技术

雷锋网按:本文来自腾讯优图,雷锋网已获授权。主要介绍了人脸识别系统的三大组成部分,并对手机相机能自动美颜的原因进行了深度剖析。 这是一个“看脸”的时代,一谈人脸技术,大家最为熟知就是人脸识别。该技术在金融、社保、教育、安防等领域表现活跃,成为AI技术领域的明星。优图微信公众号之前也重点介绍过优图人脸识别,本文主要介绍一些背后默默支持人脸识别的技术。欲了解优图人脸识别技术可参见《深度学习在人脸识别中的应用——优图祖母模型的“进化”》 一般而言,一个完整的人脸识别系统包含三大主要组成部分,即人脸检测、人脸配准以及人脸识别。三者流水线操作:人脸检测在图像中找到人脸的位置,接着人脸配准在人脸上找到眼睛、鼻子、嘴巴等面部器官的位置,最后人脸识别抽取特征与既有人脸比对计算相似度,确认人脸对应的身份。

优秀的个人博客,低调大师

Android登陆页面仿拉钩动效,你总会需要它!

哈哈,看到这个标题是不是JH一紧,你可能会说我就没遇到过,但是现在没遇到不代表就遇不到,毕竟设计也是变幻莫测,只有你想不到的,没有你不能实现的,说的这么吊,到底是啥效果?没错就是一个小小的登录页面,大家都有拉勾app吧,看拉勾的登录页做的很是平滑动画,而且带动画效果,所以就有了类似拉勾登录效果,如图: 虽然是个简单的页面,但是涵盖的东西不算少啊,很纳闷为何谷歌一直不提供简单,方便,准确的键盘监听事件?惆怅啊,所以我们只能自己从侧面监听键盘事件了,我们可以监听最外层布局的变化来判断键盘是不是弹起了。闲话不多说,上车吧。 布局文件,大家都能看懂吧。 我们要想监听键盘事件,首先我们想得到的是键盘弹起的时候我们可以去搞点事情,键盘搜起的时候我们再去搞点事情,知道这些还不够,我们还要知道键盘弹起了多少,以及需要平移多少的距离。我们都知道我们的一个页面弹起键盘的时候这个页面的根布局会回调他的监听方法:addOnLayoutChangeListener( );当键盘弹起的时候,我们的布局是变化了,因此会执行这个回调方法,但是前提是必须设置我们的Activity的windowSoftInputMode属性为adjustResize。 我们想让布局整体平移的距离也就是弹起时候处于最底部的view距离顶部的高度减去我们键盘的高度。现在认为只要控件将Activity向上推的高度超过了1/3屏幕高,就认为软键盘弹起 scrollView.addOnLayoutChangeListener(newViewGroup.OnLayoutChangeListener(){ @Override publicvoidonLayoutChange(Viewv,intleft,inttop,intright,intbottom,intoldLeft,intoldTop,intoldRight,intoldBottom){ /*old是改变前的左上右下坐标点值,没有old的是改变后的左上右下坐标点值 现在认为只要控件将Activity向上推的高度超过了1/3屏幕高,就认为软键盘弹起*/ if(oldBottom!=0&&bottom!=0&&(oldBottom-bottom>keyHeight)){ Log.e("wenzhihao","up------>"+(oldBottom-bottom)); intdist=btn_login.getBottom()-bottom; if(dist>0){ ObjectAnimatormAnimatorTranslateY=ObjectAnimator.ofFloat(content,"translationY",0.0f,-dist); mAnimatorTranslateY.setDuration(300); mAnimatorTranslateY.setInterpolator(newLinearInterpolator()); mAnimatorTranslateY.start(); zoomIn(logo,dist); } service.setVisibility(View.INVISIBLE); }elseif(oldBottom!=0&&bottom!=0&&(bottom-oldBottom>keyHeight)){ Log.e("wenzhihao","down------>"+(bottom-oldBottom)); if((btn_login.getBottom()-oldBottom)>0){ ObjectAnimatormAnimatorTranslateY=ObjectAnimator.ofFloat(content,"translationY",content.getTranslationY(),0); mAnimatorTranslateY.setDuration(300); mAnimatorTranslateY.setInterpolator(newLinearInterpolator()); mAnimatorTranslateY.start(); //键盘收回后,logo恢复原来大小,位置同样回到初始位置 zoomOut(logo); } service.setVisibility(View.VISIBLE); } } }); /n_login是登录按钮 这样我们发现是可以实现效果了,但是我想全屏显示,懵比了,发现全屏的时候不回调这个方法了,怎么办?又是查资料一看原来这个也是一个bug,但是有解决方案,AndroidBug5497Workaround。也是谷歌提供的?直接拷贝过来,会发现其实他的作用就是让Activity最外层的根布局,当有布局变化时去响应这个变化mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(); packagecom.wzh.study.login; importandroid.app.Activity; importandroid.graphics.Rect; importandroid.view.View; importandroid.view.ViewTreeObserver; importandroid.widget.FrameLayout; publicclassAndroidBug5497Workaround{ //Formoreinformation,seehttps://code.google.com/p/android/issues/detail?id=5497 //Tousethisclass,simplyinvokeassistActivity()onanActivitythatalreadyhasitscontentviewset. publicstaticvoidassistActivity(Activityactivity){ newAndroidBug5497Workaround(activity); } privateViewmChildOfContent; privateintusableHeightPrevious; privateFrameLayout.LayoutParamsframeLayoutParams; privateAndroidBug5497Workaround(Activityactivity){ FrameLayoutcontent=(FrameLayout)activity.findViewById(android.R.id.content); mChildOfContent=content.getChildAt(0); mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(newViewTreeObserver.OnGlobalLayoutListener(){ publicvoidonGlobalLayout(){ possiblyResizeChildOfContent(); } }); frameLayoutParams=(FrameLayout.LayoutParams)mChildOfContent.getLayoutParams(); } privatevoidpossiblyResizeChildOfContent(){ intusableHeightNow=computeUsableHeight(); if(usableHeightNow!=usableHeightPrevious){ intusableHeightSansKeyboard=mChildOfContent.getRootView().getHeight(); intheightDifference=usableHeightSansKeyboard-usableHeightNow; if(heightDifference>(usableHeightSansKeyboard/4)){ //keyboardprobablyjustbecamevisible frameLayoutParams.height=usableHeightSansKeyboard-heightDifference; }else{ //keyboardprobablyjustbecamehidden frameLayoutParams.height=usableHeightSansKeyboard; } mChildOfContent.requestLayout(); usableHeightPrevious=usableHeightNow; } } privateintcomputeUsableHeight(){ Rectr=newRect(); mChildOfContent.getWindowVisibleDisplayFrame(r); return(r.bottom-r.top); } } 使用方式,如果我们设置了全屏,就去加载它,不设置不管: if(isFullScreen(this)){ AndroidBug5497Workaround.assistActivity(this); } ... publicbooleanisFullScreen(Activityactivity){ return(activity.getWindow().getAttributes().flags& WindowManager.LayoutParams.FLAG_FULLSCREEN)==WindowManager.LayoutParams.FLAG_FULLSCREEN; } 接下来就看具体动画事件了,键盘弹起来的时候整体向上平移,LOGO缩小,键盘收起的时候整体下移,并且LOGO恢复原来大小。这里用到的都是属性动画,只有属性动画我们才可以实现真正平移效果。 我看网上很多人使用addOnLayoutChangeListener()去监听键盘事件,但是这个方法回调的太频繁,比如本例特效,输入框后面有文字时候显示清除的图标,如果用这个方法那么也会执行一次,可能会影响你的动画,当然你也可以去记录第一次的高度让他不会走逻辑,但是我觉得也不是很靠谱,虽然我这个方法也不是很棒 ๑乛◡乛๑~。 最后贴上源码: 如果有什么问题欢迎指出,我将给出例子地址,包含另一种实现方式就是用scrollview滑动到最底部的方式来实现平移效果~ 作者:wenzhihao123 来源:51CTO

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册