辰迅云帮助中心

其他类

小编给大家分享一下Angular开发者需要学习哪些知识点,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一款to-do app基本等同于前端开发的“Hello world”。虽然涵盖了创建应用程序的CRUD方面,但它通常只涉及那些框架或库也能做到的皮毛而已。Angular看起来似乎总是在改变和更新 - 但实际上,还是有一些事情仍然保持不变。以下是关于Angular所需要学习的核心概念的概述,以便大家可以正确地利用JavaScript框架。【相关教程推荐:《angular教程》】说到Angular,我们需要学习很多东西,很多人被困在初学者的圈子里,仅仅是因为不知道去哪里搜索或者应该搜索什么关键词。下面我们会说到的这个指南(也是对Angular本身的一个快速摘要),我其实很希望我在第一次开始使用Angular 2+时就已经有了。1.模块化Angular架构理论上,你可以将所有Angular代码放在一个页面上并放入一个大型函数中,但不建议这样做,这也不是一种有效的方法来构造代码,并且违背了Angular存在的目的。Angular将模块的概念作为框架架构的重要组成部分,这是指只有一个存在理由的代码集合。你的Angular app基本上由模块组成 - 有些是独立的,有些是共享的。有多种方法可以在您的应用程序中构造模块,深入了解不同的体系结构也可以帮助确定如何在应用程序增长时扩展应用程序,它还可以帮助隔离代码并防止产生代码耦合。搜索关键词:Angular架构模式可扩展的Angular应用架构2.单向数据流和不可变性早在Angular 1中,双向绑定就俘获了许多前端开发人员的心。这实际上是Angular最初的卖点之一。然而,随着时间的推移,当应用程序开始变得更加复杂时,它开始在性能方面产生问题。事实证明,并不是在任何地方都需要双向绑定的。双向绑定在Angular 2+中仍然是可实现的,但只有在开发人员明确请求时才能进行双向绑定 – 这样就迫使代码背后的人员考虑数据方向和数据流,它还允许应用程序通过确定数据的流动方式来更加灵活地处理数据。搜索关键词:Angular数据流最佳实践Angular中的单向流单向绑定的优点3.属性型和结构型指令指令是HTML通过自定义元素的扩展。属性型指令允许您更改元素的属性,结构型指令通过在DOM中添加或删除元素来更改布局。例如,ngSwitch和ngIf是结构型指令,因为它评估参数并确定DOM的某些部分是否应该存在。属性型指令是附加到元素、组件或其他指令的自定义行为。学习如何使用这两个指令可以扩展应用程序的功能,并减少项目中重复代码的数量。属性型指令还可以帮助集中在应用程序不同部分使用的某些行为。搜索关键词:Angular属性型指令Angular结构型指令Angular结构型指令模式4.组件生命周期钩子每个软件都有自己的生命周期,决定了如何创建、渲染和删除某些内容。Angular的组件生命周期是这样的: create → render → render children → check when data-bound properties change → destroy → remove from DOM我们能够在这个周期内抓住关键时刻,并在特定时刻或事件中锁定他。这允许我们根据组件存在的不同阶段创建适当的响应并配置行为。例如,在呈现页面之前可能需要加载一些数据,你可以通过ngOnInit()来实现这一点,或者你可能需要断开与数据库的连接,这可以通过ngOnDestroy()来实现。搜索关键词:Angular生命周期钩子组件生命周期5.Http和可观察对象服务这并不是Angular特有的功能,而是来自ES7。Angular只是碰巧将其作为框架支持功能的一部分来实现,并且恰好理解了这一点,它也可以很好地转换为React、Vue和任何JavaScript相关的库或框架。可观察对象服务是允许你有效处理数据的模式 - 允许你在基于事件的系统中解析、修改和维护数据。你无法完全逃避Http和可观察对象,因为一切都是数据。搜索关键词:JavaScript可观察对象模式Angular HTTP和可观察对象ES7可观察功能6.Smart/Dumb组件架构在编写Angular应用程序时,我们倾向于将所有内容都放入组件中。但是,这并不是最佳做法。Angular中Smart/Dumb组件的概念需要更多的讨论,尤其是在初学者圈子里。组件是否Smart/Dumb决定了它在应用程序的总体规划中扮演的角色。Dumb组件通常是无状态的,其行为易于预测和理解。因此,尽可能使你的组件变得Dumb。 Smart组件更难掌握,因为它会涉及到输入和输出。要正确利用Angular的功能,请研究Smart/Dumb组件架构,它将为你提供有关如何处理代码及其相互关系的模式和思维方式。搜索关键词:Smart/Dumb Angular 组件无状态的Dumb组件演示组件Angular中的Smart组件7.应用程序结构和最佳实践在结构和最佳实践方面,CLI只能带您到目前为止。构建Angular应用程序(或任何一般应用程序)就像构建一个房子。社区多年来一直在优化设置流程,从而实现最有效和最有效的应用。Angular也不例外。那些试图学习Angular的人对Angular的大多数抱怨往往是由于缺乏结构知识;语法是很容易上手的,而且清晰明确。然而,应用程序的结构知识需要理解上下文背景、需求以及它们如何在概念和实践层面组合到一起。了解Angular不同的潜在应用程序结构及其最佳实践,将会让你对如何构建应用程序拥有一个全新的视角。搜索关键词:单一存储库Angular appsAngular库,Angular包AngularAngular微应用程序单片存储库8.模板绑定语法绑定是JavaScript框架的结晶,这也是存在的首要原因之一。模板绑定在静态HTML和JavaScript之间架起了桥梁,Angular的模板绑定语法充当这两种技术之间的促进者。一旦你学会了如何以及何时使用它们,将一个曾经是静态的页面转换为交互式的页面就会变得容易的多,也不那么令人烦躁了。研究绑定的不同场景,例如属性绑定、事件、插值和双向绑定。搜索关键词:Angular属性绑定Angular事件绑定Angular双向绑定,Angular插值Angular传递常量9.特性模块和路由在Angular中,特性模块的能力被低估了。它实际上是一种非常出色的用来组织和响应业务需求的方式。从长远来看,它限制了责任并有助于防止代码污染。有五种类型的特性模块(领域特性模块、带路由的特性模块、路由模块、服务特性模块和可识部件特性模块),每种模块处理特定类型的功能。学习将特性模块与路由结合使用可以帮助创建离散的功能集,并为你的应用程序应用良好和清晰的关注点分离。搜索关键词:Angular特性模块Angular中的共享特性结构特性模块提供商延迟加载路由和特性模块10.表单和验证(响应式表单和验证器)表单是任何前端开发中不可避免的一部分。与表单一起出现的还有验证。在Angular中,有很多方法可以构造智能的、数据驱动的表单。最流行的表单迭代是响应式表单。但是,还有其他选项,即模板驱动表单和自定义验证器。了解验证器如何与CSS协同工作将有助于加快工作流程,并将应用程序转变为一个验证错误的准备空间。搜索关键词:Angular形式验证模板驱动验证响应式表单验证Angular中的同步和异步验证器内置验证器Angular自定义验证器跨字段交叉验证11.内容投影Angular有一个叫做内容投影的东西,它能够有效地将数据从父组件传递给子组件。虽然这可能听起来很复杂,但实际上是在视图中放入视图以生成母版视图的行为。我们通常理解表面意义上的内容投影 - 当我们在父视图中嵌套子视图时。然而,为了扩展我们的理解,我们还需要了解数据如何在不同视图之间传递。这是理解内容投影派上用场的地方。了解内容投影可以帮助你确定应用程序的数据流以及发生可变性的位置。搜索关键词:Angular内容投影Angular父子视图关系Angular视图数据关系12.onPush变化检测默认情况下,Angular使用默认的变化检测策略。这意味着将始终检查组件。虽然使用默认值没有任何问题,但它可能是检测变化的一种低效方法。对于小型应用程序来说,运行速度和性能都还算不错。但是,一旦应用程序达到一定的大小,运行起来就会变得非常麻烦,尤其是在旧版浏览器中。onPush 变化检测策略将显著加快应用程序的速度,因为它依赖于特定触发器而不是持续检查以查看是否发生了任何事情。搜索关键词:Angular onPush变化检测13.路径保护,预加载,延迟加载如果你有某种类型的登录,你将需要路径保护。您可以保护某些视图免受未经授权视图的影响,这是是许多应用程序中必不可少的要求。路径保护充当路由器和请求路由之间的接口。由决策者决定某条路线是否被允许访问。路径保护的世界中有很多东西需要探索 - 即基于令牌过期、用户身份验证和路径安全性等路径决策。预加载和延迟加载还可以通过加快应用程序的加载时间来增强用户体验。值得注意的是,预加载和延迟加载不仅仅是决定是否要加载特定的图像集,它还可以增强绑定的体系结构,并加载可能存在于不同范围和域上的应用程序的不同部分。搜索关键词:Angular路径保护Angular身份验证模式Angular预加载和延迟加载模块Angular安全路径模式14.自定义管道使用Angular管道使数据格式化变得无比简单。虽然许多预配置和开箱即用管道涵盖了诸如日期、货币、百分比和字符大小写等许多内容,但它并不能涵盖你需要的所有内容。这就是自定义管道派上用场的地方。你可以轻松创建自己的过滤器并根据自己的喜好转换数据格式。这真的很容易,所以去看看吧!搜索关键词:Angular自定义管道15.@viewChild和@ContentChild修饰器viewChild和contentChild是组件相互通讯的方式。Angular的重点在于,你有多个组件,它们像拼图一样被编译在一起,但如果这些组件彼此隔离,那么这个拼图就不会真正发挥多大作用。这就是viewChild和contentChild的用武之地。学习使用这两种修饰器让你可以访问相关组件。这使得数据共享的任务更容易实现,并且可以传输由相关组件触发的数据和事件。搜索关键词:Angular修饰器Angular中的Viewchild和contentchildAngular组件数据共享16.动态组件和ng-template组件是Angular的构建基块。但是,并非所有组件都是固定的,它们有些需要动态创建,而不是预先编译。动态组件允许应用程序动态创建某些组件。静态组件假设事物不会改变。它可以通过预期的输入和输出进行预测。但是,动态组件是根据需要呈现的。在构建可能正在侦听外部源及其更新的应用程序或页面上发生操作的反应时,它们变得非常方便。搜索关键词:Angular中的动态组件动态组件和ng-templating17.@Host @Hostingbinding和exportAs@Host,@Hostingbinding和exportAs是Angular指令修饰器,它们扩展了所附加的参数。它们还使你能够创建简洁的模板,以便在应用程序中导出以供使用。如果以上听起来令人困惑,那么你应该首先查找Angular指令及其存在的目的。@Host,@Hostingbinding和exportAs是指令的特性,这些特性有助于现实它。搜索关键词:Angular指令模式Angular的@Host,@Hostingbinding和exportAs18.使用RxJs进行状态管理应用程序的状态最终决定显示给用户的数据。如果你的状态是乱七八糟的一团意大利面条,很可能你的整个数据结构会因为任何改变而变得脆弱不堪。当你开始了解状态是如何在Angular中工作时,你将了解数据的行为方式和原因。虽然Angular有自己的状态管理系统,但RxJs是集中状态及其相关数据的绝佳方法。数据可能会在父-子关系链中丢失。RxJs通过创建一个集中式存储来解耦。搜索关键词:Angular RxJsFlux / Redux原理Angular状态管理原则19.依赖注入和区域“依赖注入”通常是一个庞大的概念,所以如果您对这个概念不是很熟悉,那么这是您真的需要查找的一个内容。有多种方法可以在Angular中高效地创建依赖注入,主要是通过构造函数来实现的。这是一种只导入您需要的东西的方法,从而提高应用程序的效率,而不是加载所有东西。和“依赖注入”一样,“区域”也是Angular独有的概念。它是应用程序从头到尾检测异步任务的一种方法。这一点很重要,因为这些异步任务能够更改应用程序的内部状态,从而更改视图。“区域”促进了变更检测过程。搜索关键词:Angular区域依赖注入Angular DI看完了这篇文章,相信你对“Angular开发者需要学习哪些知识点”有了一定的了解,如果想了解更多相关知识,欢迎关注辰讯云资讯频道,感谢各位的阅读!...

css隐藏标签的方法

2021/4/20 14:16:09

小编给大家分享一下css隐藏标签的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!方法:1、使用“opacity:0”语句;2、使用“display:none”语句;3、使用“visibility:hidden”语句;4、使用position属性,配合top、bottom、left、right属性将元素标签移出视觉区域。本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。第一种方法,使用Opacity属性该属性的意思是检索或设置对象的不透明度当他的透明度为0的时候,视觉上它是消失了,但是他依然占据着那个位置,并对网页的布局起作用。它也将响应用户交互。添加了该属性的元素,它的背景和元素内容也是会跟着变化的.我们可以利用他的这一特性制作一些很棒的动画效果,我这边制作的一个简单的小效果,代码如下:注意:该属性是兼容IE9以上的浏览器,IE8 以及更早的版本支持替代的 filter 属性,例如: filter:Alpha(opacity=50)。第二种方法,使用Display属性该属性才是真正意义上的隐藏元素,当元素的display属性为none时,该元素就会就会从视觉中消失,并且连盒模型也不生成.也不会在页面占据任何位置,不但如此,就连它的子元素也会一同从盒子模型中消失。给他和它的子元素添加的任何动画效果交互效果都会不起作用。jq中的show(),hide(),toggle()方法就是通过改变display的值来实现变化效果的。第三种方法,使用Visibility属性该属性类似opacity属性,该属性值为hidden的时候,元素将会隐藏,也会占据着自己的位置,并对网页的布局起作用,与 opacity 唯一不同的是它不会响应任何用户交互。此外,元素在读屏软件中也会被隐藏。这个属性也能够实现动画效果,只要它的初始和结束状态不一样。这确保了 visibility 状态切换之间的过渡动画可以是时间平滑的注意:1、任何的版本的 Internet Explorer (包括 IE8)都不支持 "inherit" 和 "collapse" 属性值。2、如果一个元素的 visibility 被设置为 hidden,但是想要显示它的子元素,只要给想要显示的子元素添加visibility:visible;就可以了。尝试 hover 在隐藏元素上,不要 hover 在 p 标签里的数字上,你会发现你的鼠标光标没有变成手指头的样子。此时,你点击鼠标,你的 click 事件也不会被触发。而在 <div> 标签里面的 <p> 标签则依然可以捕获所有的鼠标事件。一旦你的鼠标移动到文字上,<div> 本身变得可见并且事件注册也随之生效。第四种方法,使用Position属性该属性的意义就是把元素脱离文档流移出视觉区域,添加该属性后既不会影响布局,又能让元素保持可以操作。应用该属性后,主要就是通过控制方向(top,left,right,bottom),达到一定的值,离开当前可是页面。注意:你得避免使用这个方法去隐藏任何可以获得焦点的元素,因为如果那么做,当用户让那个元素获得焦点时,会导致一个不可预料的焦点切换。这个方法在创建自定义复选框和单选按钮时经常被使用。以上是“css隐藏标签的方法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注辰讯云资讯频道!...

css怎么设置删除线

2021/4/20 14:14:05

这篇文章主要介绍css怎么设置删除线,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!css是什么意思css是一种用来表现HTML或XML等文件样式的计算机语言,主要是用来设计网页的样式,使网页更加美化。它也是一种定义样式结构如字体、颜色、位置等的语言,并且css样式可以直接存储于HTML网页或者单独的样式单文件中,而样式规则的优先级由css根据这个层次结构决定,从而实现级联效果,发展至今,css不仅能装饰网页,也可以配合各种脚本对于网页进行格式化。在css中,可以使用text-decoration属性设置删除线,语法“text-decoration:line-through”。text-decoration属性设置元素文本修饰,值为line-through时,定义穿过文本下的一条线。本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。新建test.html页面,在test.html 页面body区域内,新建一个div,用来存放物品名。在div标签内新建span,用来存放物品价格。在test.html 页面body区域内新建style标签,在style标签里设置span标签内的价格为红色<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        .price{             color:red;         }     </style></head><body>    <div>键盘:         <span class="price">200元</span>    </div></body></html>在浏览器里打开test.html,看一下目前的效果回到编辑器,在test的style标签内,给span设置text-decoration: line-through属性<style>        .price{             color:red;             text-decoration: line-through;         }     </style>再次打开test.html,会发现价格上被加了删除线。以上是“css怎么设置删除线”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注辰讯云资讯频道!...

这篇文章主要介绍js怎么实现图片3D轮播效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!3D的图片轮播效果很炫,写到这里只是为了不丢代码,不为别的。效果预览:html代码:<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>js实现3D图片逐张轮播幻灯片</title></head><body><style>ul#bcty365_nav{padding-left:50px; margin-bottom:10px; border-bottom:2px solid #ccc; overflow:hidden; _zoom:1;}ul#bcty365_nav li{float:left; display:inline; margin:10px;}ul#bcty365_nav li a{display:block;color:#000000; font-size:16px;}ul#bcty365_nav li a,#wimoban_p,#wimoban_p a{ font-family:"微软雅黑";}ul#bcty365_nav li a:hover,#wimoban_p a:hover{color:red;}</style> <style type="text/css">*{margin:0;padding:0;list-style-type:none;}a,img{border:0;}body{font:12px/180% Arial, Helvetica, sans-serif,"新宋体";}/* focus_Box */#focus_Box{position:relative;width:710px;height:500px;margin:20px auto;}#focus_Box ul{position:relative;width:710px;height:500px}#focus_Box li{z-index:0;position:absolute; width:0px;background:#787878;height:0px;top:146px;cursor:pointer;left:377px;border-radius:4px;box-shadow:1px 1px 12px rgba(200, 200, 200, 1)}#focus_Box li img{width:100%;background:url(../img/3D轮播效果/loading.gif) no-repeat center 50%;height:100%;vertical-align:top}#focus_Box li p{position:absolute;left:0;bottom:0px;width:100%;height:40px;line-height:40px;background:url(images/float-bg.png) repeat;text-indent:8px;color:#fff;}#focus_Box li p span{display:inline-block;width:70%;height:40px;overflow:hidden;}#focus_Box .prev,#focus_Box .next{display:block;z-index:100;overflow:hidden;cursor:pointer;position:absolute;width:52px;height:52px;top:131px;}/*#focus_Box .prev{background:url(../img/3D轮播效果/btn.png) left bottom no-repeat;left:0px} #focus_Box .next{background:url(../img/3D轮播效果/btn.png) right bottom no-repeat;right:0px} */#focus_Box .prev:hover{background-position:left top;}#focus_Box .next:hover{background-position:right top;}/*#focus_Box a.imgs-scroll-btn{display:block;position:absolute;z-index:110;top:7px;right:15px;width:51px;height:23px;overflow:hidden;background:url(images/share-btn.png) no-repeat;text-indent:-999px;}*/</style><script src="../js/3D轮播效果/ZoomPic.js"></script><div id="focus_Box"> <span class="prev"> </span> <span class="next"> </span> <ul> <li> <a href="#" ><img width="600" height="450" src="../img/3D轮播效果/cat1.jpg" /></a>   </li> <li> <a href="#" ><img width="600" height="450" src="../img/3D轮播效果/cat2.jpg" /></a>   </li> <li> <a href="#" ><img width="600" height="450" src="../img/3D轮播效果/cat3.jpg" /></a>   </li> <li> <a href="#" ><img width="600" height="450" src="../img/3D轮播效果/cat4.jpg" /></a>    </li> <li> <a href="#" ><img width="600" height="450" src="../img/3D轮播效果/cat5.jpg" /></a>   </li> </ul></div><div ></div></body></html>js代码:function ZoomPic (){  this.initialize.apply(this, arguments)  } ZoomPic.prototype =  {  initialize : function (id)  {  var _this = this;  this.wrap = typeof id === "string" ? document.getElementById(id) : id;  this.oUl = this.wrap.getElementsByTagName("ul")[0];  this.aLi = this.wrap.getElementsByTagName("li");  this.prev = this.wrap.getElementsByTagName("span")[0];  this.next = this.wrap.getElementsByTagName("span")[1];  this.timer = 1000;  this.aSort = [];  this.iCenter = 2;  this._doPrev = function () {return _this.doPrev.apply(_this)};  this._doNext = function () {return _this.doNext.apply(_this)};  this.options = [  /*{width:476, height:210, top:40, left:0, zIndex:1},  {width:426, height:250, top:20, left:50, zIndex:2},  {width:654, height:290, top:0, left:150, zIndex:3},  {width:426, height:250, top:20, left:480, zIndex:2},  {width:476, height:210, top:40, left:476, zIndex:1},*/ {width:365, height:252, top:40, left:0, zIndex:1},  {width:405, height:280, top:20, left:60, zIndex:2},  {width:445, height:308, top:0, left:130, zIndex:3},  {width:405, height:280, top:20, left:240, zIndex:2},  {width:366, height:252, top:40, left:345, zIndex:1},  ];  for (var i = 0; i < this.aLi.length; i++) this.aSort[i] = this.aLi[i];  this.aSort.unshift(this.aSort.pop());  this.setUp();  this.addEvent(this.prev, "click", this._doPrev);  this.addEvent(this.next, "click", this._doNext);  this.doImgClick();   this.timer = setInterval(function ()  {  _this.doNext()   }, 3000);   this.wrap.onmouseover = function ()  {  clearInterval(_this.timer)   };  this.wrap.onmouseout = function ()  {  _this.timer = setInterval(function ()  {  _this.doNext()   }, 3000);   }  },  doPrev : function ()  {  this.aSort.unshift(this.aSort.pop());  this.setUp()  },  doNext : function ()  {  this.aSort.push(this.aSort.shift());  this.setUp()  },  doImgClick : function ()  {  var _this = this;  for (var i = 0; i < this.aSort.length; i++)  {  this.aSort[i].onclick = function ()  {  if (this.index > _this.iCenter)  {   for (var i = 0; i < this.index - _this.iCenter; i++) _this.aSort.push(_this.aSort.shift());   _this.setUp()  }  else if(this.index < _this.iCenter)  {   for (var i = 0; i < _this.iCenter - this.index; i++) _this.aSort.unshift(_this.aSort.pop());   _this.setUp()  }  }  }  },  setUp : function ()  {  var _this = this;  var i = 0;  for (i = 0; i < this.aSort.length; i++) this.oUl.appendChild(this.aSort[i]);  for (i = 0; i < this.aSort.length; i++)  {  this.aSort[i].index = i;  if (i < 5)  {  this.css(this.aSort[i], "display", "block");  this.doMove(this.aSort[i], this.options[i], function ()  {   _this.doMove(_this.aSort[_this.iCenter].getElementsByTagName("img")[0], {opacity:100}, function ()   {   _this.doMove(_this.aSort[_this.iCenter].getElementsByTagName("img")[0], {opacity:100}, function ()   {   _this.aSort[_this.iCenter].onmouseover = function ()   {   _this.doMove(this.getElementsByTagName("div")[0], {bottom:0})   };   _this.aSort[_this.iCenter].onmouseout = function ()   {   _this.doMove(this.getElementsByTagName("div")[0], {bottom:-100})   }   })   })  });  }  else {  this.css(this.aSort[i], "display", "none");  this.css(this.aSort[i], "width", 0);  this.css(this.aSort[i], "height", 0);  this.css(this.aSort[i], "top", 37);  this.css(this.aSort[i], "left", this.oUl.offsetWidth / 2)  }  if (i < this.iCenter || i > this.iCenter)  {  this.css(this.aSort[i].getElementsByTagName("img")[0], "opacity", 100)  this.aSort[i].onmouseover = function ()  {   _this.doMove(this.getElementsByTagName("img")[0], {opacity:100})   };  this.aSort[i].onmouseout = function ()  {   _this.doMove(this.getElementsByTagName("img")[0], {opacity:100})  };  this.aSort[i].onmouseout();  }  else {  this.aSort[i].onmouseover = this.aSort[i].onmouseout = null }  }   },  addEvent : function (oElement, sEventType, fnHandler)  {  return oElement.addEventListener ? oElement.addEventListener(sEventType, fnHandler, false) : oElement.attachEvent("on" + sEventType, fnHandler)  },  css : function (oElement, attr, value)  {  if (arguments.length == 2)  {  return oElement.currentStyle ? oElement.currentStyle[attr] : getComputedStyle(oElement, null)[attr]  }  else if (arguments.length == 3)  {  switch (attr)  {  case "width":  case "height":  case "top":  case "left":  case "bottom":   oElement.style[attr] = value + "px";   break;  case "opacity" :   oElement.style.filter = "alpha(opacity=" + value + ")";   oElement.style.opacity = value / 100;   break;  default :   oElement.style[attr] = value;   break }   }  },  doMove : function (oElement, oAttr, fnCallBack)  {  var _this = this;  clearInterval(oElement.timer);  oElement.timer = setInterval(function ()  {  var bStop = true;  for (var property in oAttr)  {  var iCur = parseFloat(_this.css(oElement, property));  property == "opacity" && (iCur = parseInt(iCur.toFixed(2) * 100));  var iSpeed = (oAttr[property] - iCur) / 5;  iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);    if (iCur != oAttr[property])  {   bStop = false;   _this.css(oElement, property, iCur + iSpeed)  }  }  if (bStop)  {  clearInterval(oElement.timer);  fnCallBack && fnCallBack.apply(_this, arguments)   }  }, 30)  } };window.onload = function (){  new ZoomPic("focus_Box"); };收藏一下。以上是“js怎么实现图片3D轮播效果”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注辰讯云资讯频道!...

这篇文章主要介绍了JS如何实现可用滑块滑动的缓动,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。尝试模仿京东的“发现好货”模块的可用滑块滑动的缓动图JS代码function $(id) { return document.getElementById(id); }//缓动轮播图var fhTimer;var fhNum = 0;var barNum = 0; fhTimer = setInterval(marquee, 20);function marquee() {   fhNum--;   barNum = fhNum;   if(fhNum < -2400) {     fhNum = 0;   }   $("fhc_ul").style.left = fhNum + "px";   if(fhNum < -2400) {     barNum = fhNum + 2400;   }   $("fhc_dBar").style.left = -(barNum / 2.75) + "px"; } $("fhcShow").onmouseover = function() {   $("fhc_d_box").style.display = "block";   clearInterval(fhTimer); } $("fhc_d_box").onmouseover = function() {   $("fhc_d_box").style.display = "block"; } $("fhcShow").onmouseout = function() {   $("fhc_d_box").style.display = "none";   fhTimer = setInterval(marquee, 20); }//鼠标悬浮在标题也在暂停滚动$("fhTit").onmouseover = function() {   clearInterval(fhTimer); } $("fhTit").onmouseout = function() {   fhTimer = setInterval(marquee, 20); }//滑块$("fhc_dBar").onmousedown = function(event) {   var event = event || window.event;   var leftValue = event.clientX - this.offsetLeft;   document.onmousemove = function(event) {     var evt = event || window.event;     var locationX = evt.clientX - leftValue;     if(locationX < 0) {       locationX = 0;     }     else if(locationX > 960 - 99) {       locationX = 960 - 99;     }     $("fhc_dBar").style.left = locationX + "px";     fhNum = -locationX * 2.75;     //如果选中了,就取消选中,防止出现bug    window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();   }   document.onmouseup = function() {     document.onmousemove = null;//取消注册的这个事件  } }HTML代码<div class="fxhh_ctt">  <div class="fh_c_show" id="fhcShow">    <ul class="fh_c_under" id="fhc_ul">      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <p class="topTit">商品1</p>        <img src="" alt="">      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <img src="" alt="">        <p class="botTit">商品2</p>      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <p class="topTit">商品3</p>        <img src="" alt="">      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <img src="" alt="">        <p class="botTit">商品4</p>      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <p class="topTit">商品5</p>        <img src="" alt="">      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <img src="" alt="">        <p class="botTit">商品6</p>      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <p class="topTit">商品7</p>        <img src="" alt="">      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <img src="" alt="">        <p class="botTit">商品8</p>      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <p class="topTit">商品9</p>        <img src="" alt="">      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <img src="" alt="">        <p class="botTit">商品10</p>      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <p class="topTit">商品11</p>        <img src="" alt="">      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <img src="" alt="">        <p class="botTit">商品12</p>      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <p class="topTit">商品1</p>        <img src="" alt="">      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <img src="" alt="">        <p class="botTit">商品2</p>      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <p class="topTit">商品3</p>        <img src="" alt="">      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <img src="" alt="">        <p class="botTit">商品4</p>      </a></li>      <li><a href=" " rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >        <p class="topTit">商品5</p>        <img src="" alt="">      </a></li>    </ul>  </div>  <!-- 滑块 -->  <div class="fhc_box" id="fhc_d_box">    <div class="fhc_drop" id="fhc_dBar"></div>  </div>  <!-- 滑块end --></div>CSS代码 .fxhh .fxhh_ctt {   width: 990px;   background-color: #fff;   float: left; } .fxhh .fxhh_ctt .fh_c_show .fh_c_under img {   width: 150px;   height: 150px; } .fxhh .fxhh_ctt .fh_c_show {   width: 990px;   height: 260px;   background-color: #fff;   overflow: hidden;   position: relative; } .fxhh .fxhh_ctt .fh_c_show .fh_c_under {   width: 2000%;   position: absolute; } .fxhh .fxhh_ctt .fh_c_show .fh_c_under li {   float: left;   text-align: center;   width: 150px;   height: 180px;   margin-top: 40px;   margin-right: 50px; } .fxhh .fxhh_ctt .fh_c_show .fh_c_under li .topTit {   margin-bottom: 10px; } .fxhh .fxhh_ctt .fh_c_show .fh_c_under li .botTit {   margin-top: 10px; } .fxhh .fxhh_ctt .fhc_box {   display: none;   width: 960px;   height: 4px;   background-color: #f3f3f3;   margin: 0 auto;   position: absolute;   top: 250px;   left: 210px; } .fxhh .fxhh_ctt .fhc_drop {   width: 99px;   height: 9px;   border-radius: 4px;   background-color: #d8d8d8;   position: absolute;   top: -3px; }感谢你能够认真阅读完这篇文章,希望小编分享的“JS如何实现可用滑块滑动的缓动”这篇文章对大家有帮助,同时也希望大家多多支持辰讯云,关注辰讯云资讯频道,更多相关知识等着你来学习!...

这篇文章将为大家详细讲解有关使用servlet怎么实现一个图片上传功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。public class BackGroundLogoServlet extends HttpServlet{    private static final Logger m_logger=Logger.getLogger (BackGroundLogoServlet. class);        @Override   public void init(ServletConfig config) throws ServletException {       super.init(config);       m_logger.debug ( "BackGroundLogoServlet init.");    }        @Override   protected void doGet(HttpServletRequest request, HttpServletResponse response)         throws ServletException{         response.setContentType( "image/png");       response.setHeader( "Access-Control-Allow-Origin", "*");       String fileName = request.getParameter( "filename");//获取参数值titlebar_logo.png      File file = new File( "D:\\"+ fileName);//读取D:\\titlebar_logo.png图片      FileInputStream fis = null;       BufferedOutputStream out= null;       try      {         fis = new FileInputStream(file);         out = new BufferedOutputStream(response.getOutputStream());         byte[] buffer= new byte[1024];         int len;         while((len=fis.read(buffer))!=-1)         {           //read the file from local disk          //write to client          out.write(buffer, 0, len);              out.flush();           m_logger.debug ( "background pic upload success !");         }       }       catch (FileNotFoundException e)       {         try        {           response.reset();           //set content type once again          response.setContentType("text/html;charset=utf-8" );           //give error message to client          response.getWriter().println( "文件未找到" );         }         catch (IOException e1)         {           e1.printStackTrace();         }         e.printStackTrace();       }       catch (IOException e)       {         e.printStackTrace();       }       finally      {         try        {           if(fis!= null){           fis.close();         }         if(out!= null){           out.close();         }       }       catch (IOException e)       {         e.printStackTrace();       }     }           }关于使用servlet怎么实现一个图片上传功能就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。...

这篇文章给大家介绍怎么在Go语言中实现一个Set请求,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。m := map[string]string{  "1": "one",  "2": "two",  "1": "one",  "3": "three",  }  fmt.Println(m)程序会直接报错,提示重复Key值,这样就非常符合Set的特性需求了。定义前面分析出Set的Value为固定的值,用一个常量替代即可。但是笔者分析的实现源码,用的是一个空结构体来实现的,如下所示:// 空结构体var Exists = struct{}{}// Set is the main interfacetype Set struct {  // struct为结构体类型的变量 m map[interface{}]struct{} }为了解决上面为什么用空结构体来做常量Value,先看下面的是测试:import (  "fmt" "unsafe")// 定义非空结构体type S struct {     a uint16     b uint32 }func main() {  var s S fmt.Println(unsafe.Sizeof(s)) // prints 8, not 6 var s2 struct{}  fmt.Println(unsafe.Sizeof(s2)) // prints 0}打印出空结构体变量的内存占用大小为0,再看看下面这个测试:a := struct{}{} b := struct{}{} fmt.Println(a == b) // truefmt.Printf("%p, %p\n", &a, &b) // 0x55a988, 0x55a988很有趣,a和b竟然相等,并且a和b的地址也是一样的。现在各位应该明白了为什么会有:var Exists = struct{}{}这样的常量也来填充所有Map的Value了吧,Go真是精彩!!!初始化Set类型数据结构的初始化操作,在声明的同时可以选择传入或者不传入进去。声明Map切片的时候,Key可以为任意类型的数据,用空接口来实现即可。Value的话按照上面的分析,用空结构体即可:func New(items ...interface{}) *Set {   // 获取Set的地址 s := &Set{}  // 声明map类型的数据结构 s.m = make(map[interface{}]struct{})  s.Add(items...)  return s }添加简化操作可以添加不定个数的元素进入到Set中,用变长参数的特性来实现这个需求即可,因为Map不允许Key值相同,所以不必有排重操作。同时将Value数值指定为空结构体类型。func (s *Set) Add(items ...interface{}) error {  for _, item := range items {  s.m[item] = Exists  }  return nil}包含Contains操作其实就是查询操作,看看有没有对应的Item存在,可以利用Map的特性来实现,但是由于不需要Value的数值,所以可以用 _,ok来达到目的:func (s *Set) Contains(item interface{}) bool {  _, ok := s.m[item]  return ok }长度和清除获取Set长度很简单,只需要获取底层实现的Map的长度即可:func (s *Set) Size() int {  return len(s.m) }清除操作的话,可以通过重新初始化Set来实现,如下即为实现过程:func (s *Set) Clear() {  s.m = make(map[interface{}]struct{}) }相等判断两个Set是否相等,可以通过循环遍历来实现,即将A中的每一个元素,查询在B中是否存在,只要有一个不存在,A和B就不相等,实现方式如下所示:func (s *Set) Equal(other *Set) bool {  // 如果两者Size不相等,就不用比较了 if s.Size() != other.Size() {  return false }     // 迭代查询遍历 for key := range s.m {     // 只要有一个不存在就返回false if !other.Contains(key) {   return false }  }  return true}子集判断A是不是B的子集,也是循环遍历的过程,具体分析在上面已经讲述过,实现方式如下所示:func (s *Set) IsSubset(other *Set) bool {  // s的size长于other,不用说了 if s.Size() > other.Size() {  return false }   // 迭代遍历 for key := range s.m {  if !other.Contains(key) {   return false }  }  return true}关于怎么在Go语言中实现一个Set请求就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。...

使用Spring怎么对组件进行赋值?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. @Value & @PropertySource1.1 使用方式@PropertySource:读取外部配置文件中的 k/v 保存到运行的环境变量中;加载完外部的配置文件以后使用 ${} 取出配置文件的值@Value:赋值基本数值可以写 SpEL,#{}可以写 ${};取出配置文件【properties】中的值(在运行环境变量里面的值)1.2 代码1. Person@Data@Slf4j@ToStringpublic class Person {   @Value("#{001+001}")   private Long id;   @Value("zs")   private String name;   @Value("${person.address}")   private String address;   @Value("${person.age:19}")   private Integer age; }2. SpringConfig@Configuration@PropertySource(value = "classpath:person.properties") public class SpringConfig {   @Bean  public Person person() {     return new Person();   } }3. PropertiesTestpublic class PropertiesTest {   public static void main(String[] args) {     AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);     Person person = context.getBean(Person.class);     System.out.println(person);     //Person(id=2, name=zs, address=上海市, age=19)  } }2. @Profile2.1 使用方式@Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件加了环境标识的 bean,只有这个环境被激活的时候才能注册到容器中。默认是 default 环境写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效没有标注环境标识的 bean 在任何环境下都是加载的2.2 代码1. Message@Data@NoArgsConstructor@AllArgsConstructorpublic class Message {   private String label = null; }2. SpringConfig@Configurationpublic class SpringConfig {   @Profile("default")   @Bean  public Message defaultMessage() {     return new Message("default");   }   @Profile("dev")   @Bean  public Message devMessage() {     return new Message("dev");   }   @Profile("test")   @Bean  public Message testMessage() {     return new Message("test");   }   @Profile("prod")   @Bean  public Message prodMessage() {     return new Message("prod");   } }3. 激活方式 1激活 profile:设置虚拟机参数 -Dspring.profiles.active=dev,testpublic class ProfileTest {   public static void main(String[] args) {          AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);     String[] names = context.getBeanNamesForType(Message.class);     for (String name : names) {       System.out.println(name);     }     //devMessage    //prodMessage  } }4. 激活方式 2public class ProfileTest {   public static void main(String[] args) {     //1. 创建一个 AnnotationConfigApplicationContext    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();     //2. 设置需要激活的环境    context.getEnvironment().setActiveProfiles("dev", "prod");     //3. 注册主配置类    context.register(SpringConfig.class);     //4. 刷新容器    context.refresh();     String[] names = context.getBeanNamesForType(Message.class);     for (String name : names) {       System.out.println(name);     }     //testMessage    //prodMessage  } }看完上述内容,你们掌握使用Spring怎么对组件进行赋值的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注辰讯云资讯频道,感谢各位的阅读!...

使用Java怎么实现一个冒泡排序法和选择排序法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。冒泡排序法概念: 从前向后(或从后向前)依次比较相邻的元素,若发现逆顺序,则交换。小的向前换,大的向后换,像水底的气泡逐渐向上冒,顾名思义冒泡排序法。 通俗一点就是把大的往上挪!向冒泡一样。 是交换式排序法的一种。冒泡排序法效率较低。 冒泡排序法思路1:外层循环:控制它要走几次。 假设你有5个数,那就要走4次,最后一次不用走,最后那个数已经在它位置了所以就要length-1次。 2:内层循环:控制逐一比较,如果发现前一个数比后一个数大,则交换。 注意!因为越比较长度就越小了,所以长度要length-1-i。package com.test_1;public class Demo5_3 {   public static void main(String[] args) {     // TODO Auto-generated method stub    int arr [ ] ={1,6,0,-1,9};     int temp=0;//中间值    //-------冒泡排序法    //外层循环,它决定一共走几趟    for(int i = 0;i<arr.length-1;i++){       //内层循环,开始逐个比较      //如果我们发现前一个数比后一个数大,则交换      for(int j=0;j<arr.length-1-i;j++){         if (arr[j]>arr[j+1]) {           //换位          temp = arr[j];           arr[j] = arr[j+1];           arr[j+1] = temp;         }       }     }     //输出结果    for(int i = 0;i<arr.length;i++){       System.out.print(arr[i]);     }   } }选择排序法概念: 第一次从R[0]~R[n-1]中选取最小值,与R[0]交换。第二次从R[1]~R[n-1]中选取最小值与R[1]交换。。。以此类推。 通俗点说就是每次找到后面元素的最小值然后与之交换。 选择排序法效率中。 选择排序思路 1:外层循环:要走几趟,同样是length-1。 2:设置一个最小值。假设第一个就是最小值。 3:设置一个最小值下标 4:内层循环:那你当前的最小值去逐一比较。当有比当前最小值小的数时,记录最小值,记录下标。 5:退出内层循环后就交换位置。package com.test_1;public class Demo5_3 {   public static void main(String[] args) {     //简单测试数组    int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};     //调用选择排序法    Select select = new Select();     select.sort(arr);   } }//--------------选择排序法class Select{   public void sort(int arr[]){     //中间值    int temp = 0;     //外循环:我认为最小的数,从0~长度-1    for(int j = 0; j<arr.length-1;j++){       //最小值:假设第一个数就是最小的      int min = arr[j];       //记录最小数的下标的      int minIndex=j;       //内循环:拿我认为的最小的数和后面的数一个个进行比较      for(int k=j+1;k<arr.length;k++){         //找到最小值        if (min>arr[k]) {           //修改最小          min=arr[k];           minIndex=k;         }       }       //当退出内层循环就找到这次的最小值      //交换位置      temp = arr[j];       arr[j]=arr[minIndex];       arr[minIndex]=temp;     }     //输出结果    for(int i = 0;i<arr.length;i++){       System.out.print(arr[i]+"  ");     }   } }最后再比较一下两个排序法之间的效率差异: 代码package com.test_1; import java.util.Calendar;public class Demo5_3 {   public static void main(String[] args) {     //构建一个庞大的无序数组用于测试时间    int len=100000;     int arr1 [] = new int [len];     for(int i=0;i<len;i++){       //让程序随机产生一个1~10000的数      //Math.random()会产生一个0~1的数      int t = (int)(Math.random()*10000);       arr1[i] = t;     }     //简单测试数组    int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};     //获得时间实例    Calendar cal = Calendar.getInstance();     //在排序前打印系统时间    System.out.println("冒泡排序法开始"+cal.getTime());     //调用冒泡排序法    Bubble bubble = new Bubble();     bubble.sort(arr1);     //重新获得时间实例    cal = Calendar.getInstance();     System.out.println("冒泡排序法结束"+cal.getTime());     //重新获得时间实例    cal = Calendar.getInstance();     System.out.println("选择排序法开始"+cal.getTime());     //调用选择排序法    Select select = new Select();     select.sort(arr1);     //重新获得时间实例    cal = Calendar.getInstance();     System.out.println("选择排序法结束"+cal.getTime());   } }//-----------------冒泡排序法class Bubble{   //排序方法  public void sort(int arr[]){     int temp=0;//中间值    //-------冒泡排序法    //外层循环,它决定一共走几趟    for(int i = 0;i<arr.length-1;i++){       //内层循环,决定每一趟循环的次数      //如果我们发现前一个数比后一个数大,则交换      for(int j=0;j<arr.length-1-i;j++){         if (arr[j]>arr[j+1]) {           //换位          temp = arr[j];           arr[j] = arr[j+1];           arr[j+1] = temp;         }       }     }       /*//输出结果         for(int i = 0;i<arr.length;i++){           System.out.print(arr[i]+"  ");         }*/  }   }//--------------选择排序法class Select{   public void sort(int arr[])  {     //中间值    int temp = 0;     //外循环:我认为最小的数,从0~长度-1    for(int j = 0; j<arr.length-1;j++)     {       //最小值:假设第一个数就是最小的      int min = arr[j];       //记录最小数的下标的      int minIndex=j;       //内循环:拿我认为的最小的数和后面的数一个个进行比较找到下标      for(int k=j+1;k<arr.length;k++)       {         //找到最小值        if (min>arr[k])          {           //修改最小          min=arr[k];           minIndex=k;         }       }       //当退出内层循环就找到这次的最小值      //交换位置      temp = arr[j];       arr[j]=arr[minIndex];       arr[minIndex]=temp;     }     /*//输出结果     for(int i = 0;i<arr.length;i++){       System.out.print(arr[i]+"  ");     }*/  } }运行结果:看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注辰讯云资讯频道,感谢您对辰讯云的支持。...

小编给大家分享一下linux中设置nginx开机自启的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!方法:1、使用“yum -y install nginx”指令安装Nginx;2、使用“server nginx start”指令验证服务是否可用;3、使用“chkconfig nginx on”指令将服务加到自启;4、重启进行测试。本教程操作环境:centos7系统、nginx1.16.1版、thinkpad t480电脑。1、用yum安装nginx:yum -y install nginx2、安装好后验证服务是否可以用server nginx start3、将服务加到自启chkconfig nginx on4、重启进行测试访问主页,看nginx是否启动正常以上是“linux中设置nginx开机自启的方法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注辰讯云资讯频道!...