• 关于

    html a返回顶部

    的搜索结果

回答

ender()方法是类组件中唯一需要的方法。即,除render方法外,所有方法对于类组件都是可选的。 ⬆ 回到顶部 渲染方法的可能返回类型是什么? 以下是使用的以下类型以及从render方法返回的列表: React元素:指示React渲染DOM节点的元素。它包括html元素,例如 和用户定义的元素。 数组和片段:返回多个元素以数组和片段的形式包装多个元素 门户:将子级渲染到另一个DOM子树中。 字符串和数字:将字符串和数字都渲染为DOM中的文本节点 布尔值或null:什么都不渲染,但是这些类型用于有条件地渲染内容。

你的答案 2020-05-08 10:49:05 0 浏览量 回答数 0

问题

如何实现点击退出a标签后浏览器不能返回到之前的页面

小旋风柴进 2019-12-01 19:38:01 1214 浏览量 回答数 1

问题

Linux系统常用命令大全

北京小顽童 2019-12-01 21:15:48 36201 浏览量 回答数 16

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

学生动手场景应用,快速了解并掌握云服务器的各种新奇玩法!

问题

【精品问答】前端实战100例之JavaScript篇

珍宝珠 2020-02-14 15:10:56 1456 浏览量 回答数 1

回答

通常,字符äåö没问题,因为浏览器和Web应用程序的tomcat / java使用的默认字符集为latin1即。“理解”这些字符的ISO-8859-1。 要使UTF-8在Java + Tomcat + Linux / Windows + Mysql下工作,需要满足以下条件: 配置Tomcat的server.xml 必须配置连接器使用UTF-8编码url(GET请求)参数: 在上面的示例中,关键部分是URIEncoding =“ UTF-8”。这可以保证Tomcat将所有传入的GET参数处理为UTF-8编码。结果,当用户将以下内容写入浏览器的地址栏时: https://localhost:8443/ID/Users?action=search&name=ж 字符ж被当作UTF-8处理,并被编码为%D0%B6(通常在到达服务器之前由浏览器访问)。 POST请求不受此影响。 CharsetFilter 然后是时候强制Java Web应用程序以UTF-8编码方式处理所有请求和响应了。这要求我们定义一个字符集过滤器,如下所示: package fi.foo.filters; import javax.servlet.*; import java.io.IOException; public class CharsetFilter implements Filter { private String encoding; public void init(FilterConfig config) throws ServletException { encoding = config.getInitParameter("requestEncoding"); if (encoding == null) encoding = "UTF-8"; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain next) throws IOException, ServletException { // Respect the client-specified character encoding // (see HTTP specification section 3.4.1) if (null == request.getCharacterEncoding()) { request.setCharacterEncoding(encoding); } // Set the default response content type and encoding response.setContentType("text/html; charset=UTF-8"); response.setCharacterEncoding("UTF-8"); next.doFilter(request, response); } public void destroy() { } } 此过滤器可确保如果浏览器未设置请求中使用的编码,则将其设置为UTF-8。 该过滤器完成的另一件事是设置默认响应编码,即。返回的html /所使用的编码。另一种方法是在应用程序的每个控制器中设置响应编码等。 该过滤器必须添加到web.xml或webapp的部署描述符中: CharsetFilter fi.foo.filters.CharsetFilter requestEncoding UTF-8 CharsetFilter /* 可以在tomcat Wiki(http://wiki.apache.org/tomcat/Tomcat/UTF-8)中找到有关创建此过滤器的说明。 JSP页面编码 在您的web.xml中,添加以下内容: *.jsp UTF-8 另外,Web应用程序的所有JSP页面都需要在其顶部具有以下内容: <%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> 如果使用具有不同JSP片段的某种布局,则所有这些都需要。 HTML元标记 JSP页面编码告诉JVM以正确的编码处理JSP页面中的字符。然后是时候告诉浏览器html页面的编码方式了: 这是通过在webapp生成的每个xhtml页面顶部执行以下操作来完成的: ... JDBC连接 使用数据库时,必须定义该连接使用UTF-8编码。可以在context.xml或以下定义了JDBC连接的地方完成: MySQL数据库和表 使用的数据库必须使用UTF-8编码。这是通过使用以下内容创建数据库来实现的: CREATE DATABASE `ID_development` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_swedish_ci */; 然后,所有表也都必须使用UTF-8: CREATE TABLE `Users` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(30) collate utf8_swedish_ci default NULL PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci ROW_FORMAT=DYNAMIC; 关键部分是CHARSET = utf8。 MySQL服务器配置 还必须配置MySQL serveri。通常,这是在Windows中通过修改my.ini -file和在Linux中通过配置my.cnf -file来完成的。在这些文件中,应该定义所有连接到服务器的客户端都使用utf8作为默认字符集,并且服务器使用的默认字符集也是utf8。 [client] port=3306 default-character-set=utf8 [mysql] default-character-set=utf8 MySQL的程序和功能 这些还需要定义字符集。例如: DELIMITER $$ DROP FUNCTION IF EXISTS `pathToNode` $$ CREATE FUNCTION `pathToNode` (ryhma_id INT) RETURNS TEXT CHARACTER SET utf8 READS SQL DATA BEGIN DECLARE path VARCHAR(255) CHARACTER SET utf8; SET path = NULL; ... RETURN path; END $$ DELIMITER ; GET请求:latin1和UTF-8 如果并且在tomcat的server.xml中定义了GET请求参数以UTF-8编码时,以下GET请求将得到正确处理: https://localhost:8443/ID/Users?action=search&name=Petteri https://localhost:8443/ID/Users?action=search&name=ж 由于latin1和UTF-8均以相同的方式编码ASCII字符,因此正确处理了字符串“ Petteri”。 拉丁语1完全不了解西里尔字母ж。由于指示Tomcat将请求参数处理为UTF-8,因此它将该字符正确编码为%D0%B6。 如果并且当指示浏览器读取UTF-8编码的页面(带有请求标头和html meta-tag)时,至少Firefox 2/3和此期间的其他浏览器都将字符本身编码为%D0%B6。 最终结果是,找到了所有名称为“ Petteri”的用户,还找到了所有名称为“ж”的用户。 但是äåö呢? HTTP规范定义默认情况下,URL编码为latin1。这导致firefox2,firefox3等对以下内容进行编码 https://localhost:8443/ID/Users?action=search&name=*Päivi* 进入编码版本 https://localhost:8443/ID/Users?action=search&name=*P%E4ivi* 在latin1中,字符ä编码为%E4。即使页面/请求/所有内容都定义为使用UTF-8。ä的UTF-8编码版本为%C3%A4 结果是,由于某些字符在latin1中编码,而另一些字符在UTF-8中编码,因此webapp完全不可能正确地处理GET请求中的请求参数。 注意:如果页面被定义为UTF-8,则POST请求确实可以工作,因为浏览器完全以UTF-8格式编码来自表单的所有请求参数。 读物 非常感谢以下作者为我的问题提供了答案: http://tagunov.tripod.com/i18n/i18n.html http://wiki.apache.org/tomcat/Tomcat/UTF-8 http://java.sun.com/developer/technicalArticles/Intl/HTTPCharset/ http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html http://cagan327.blogspot.com/2006/05/utf-8-encoding-fix-tomcat-jsp-etc.html http://cagan327.blogspot.com/2006/05/utf-8-encoding-fix-for-mysql-tomcat.html http://jeppesn.dk/utf-8.html http://www.nabble.com/request-parameters-mishandle-utf-8-encoding-td18720039.html http://www.utoronto.ca/webdocs/HTMLdocs/NewHTML/iso_table.html http://www.utf8-chartable.de/ 重要的提示 mysql支持使用3字节UTF-8字符的基本多语言平面。如果您需要超出此范围(某些字母需要超过3个字节的UTF-8字节),则需要使用一种VARBINARY列类型的样式或使用utf8mb4字符集(这需要MySQL 5.5.3或更高版本)。请注意,使用utf8MySQL中的字符集无法100%地工作。 Tomcat与Apache 还有一件事,如果您使用的是Apache + Tomcat + mod_JK连接器,则还需要进行以下更改: 将URIEncoding =“ UTF-8”添加到8009连接器的tomcat server.xml文件中,由mod_JK连接器使用。 转到你的apache文件夹即/etc/httpd/conf添加AddDefaultCharset utf-8在httpd.conf file。注意:首先检查它是否存在。如果存在,您可以使用此行对其进行更新。您也可以在底部添加此行。来源:stack overflow

保持可爱mmm 2020-05-10 17:04:59 0 浏览量 回答数 0

问题

官方进来看哈,阿里云可以做301定向吗

xiaobo_48 2019-12-01 21:13:10 16158 浏览量 回答数 9

回答

一、什么是Web服务器配置 Web服务器配置,是在服务器(领取49元服务器)上部署站点,并设置好相关的参数,至于站点上需要放置的网站程序,应该由开发人员制作并上传到服务器中,这个工作不属于Web服务器配置的工作。 二、Web服务器概述 Web服务器又称为WWW服务器,它是放置一般网站的服务器。一台Web服务器上可以建立多个网站,各网站的拥有者只需要把做好的网页和相关文件放置在Web服务器的网站中,其它用户可以用浏览器访问网站中的网页了。 IIS的安装 一般在安装操作系统时不默认安装IIS,所以在次Web服务器配置时需要安装IIS。安装方法为: 1、打开“控制面板”,打开“添加/删除程序”,弹出“添加/删除程序”窗口。 2、单击窗口中的“添加/删除Windows组件”图标,弹出“Windows组件向导”对话框。 web服务器配置 3、选中“向导”中的“应用程序服务器”复选框。单击“详细信息”按钮,弹出“应用程序服务器”对话框。 web服务器配置 4、选择需要的组件,其中“Internet信息服务(IIS)”和“应用程序服务器控制台”是必须选中的。选中“Internet信息服务(IIS)”后,再单击“详细信息”按钮,弹出“Internet信息服务(IIS)”对话框。 web服务器配置 5、选中“Internet信息服务管理器”和“万维网服务”。并且选中“万维网服务”后,再单击“详细信息”按钮,弹出“万维网服务”对话框。 web服务器配置 6、其中的“万维网服务”必须选中。如果想要服务器支持ASP,还应该选中“Active Server Pages”。逐个单击“确定”按钮,关闭各对话框,直到返回图1的“Windows组件向导”对话框。 7、单击“下一步”按钮,系统开始IIS的安装,这期间可能要求插入Windows Server 2003安装盘,系统会自动进行安装工作。 8、安装完成后,弹出提示安装成功的对话框,单击“确定”按钮完成了IIS的安装。 友情提示:如果想要同时装入FTP服务器,在“Internet信息服务(IIS)”对话框中应该把“文件传输协议(FTP)服务”的复选框也选中。 web服务器配置 在IIS中创建Web网站 打开“Internet 信息服务管理器”,在目录树的“网站”上单击右键,在右键菜单中选择“新建→网站”,弹出“网站创建向导”: web服务器配置 web服务器配置 网站描述是网站的名字,它会显示在IIS窗口的目录树中,方便管理员识别各个站点。本例中起名为“枝叶的网站”。 web服务器配置 网站IP地址:如果选择“全部未分配”,则服务器会将本机所有IP地址绑定在该网站上,这个选项适合于服务器中只有这一个网站的情况。也可以从 下拉式列表框中选择一个IP地址(下拉式列表框中列出的是本机已配置的IP地址,如果没有,应该先为本机配置IP地址,再选择。) TCP端口:一般使用默认的端口号80,如果改为其它值,则用户在访问该站点时必须在地址中加入端口号。 主机头:如果该站点已经有域名,可以在主机头中输入域名。 web服务器配置 主目录路径是网站根目录的位置,可以用“浏览”按钮选择一个文件夹作为网站的主目录。 web服务器配置 网站访问权限是限定用户访问网站时的权限,“读取”是必需的,“运行脚本”可以让站点支持ASP,其它权限可根据需要设置。 单击“下一步”,弹出“完成向导”对话框,完成了新网站的创建过程,在IIS中可以看到新建的网站。把做好的网页和相关文件复制到主目录中,通常可以访问这个网站了。 web服务器配置 访问网站的方法是:如果在本机上访问,可以在浏览器的地址栏中输入“http://localhost/”;如果在网络中其它计算机上访问,可以在浏览器的地址栏中输入“http://网站IP地址”。 说明:如果网站的TCP端口不是80,在地址中还需加上端口号。假设TCP端口设置为8080,则访问地址应写为“http://localhost:8080/”或“http://网站IP地址:8080”。 网站的基本配置 如果需要修改网站的参数,可以在“网站名字”上单击右键,在右键菜单中选择“属性”,可以打开“网站属性”对话框。 1、“网站”标签 “网站标识”:可以设置网站名字、IP地址、端口号。单击“高级”按钮可以设置主机头名。 2、“主目录”标签 web服务器配置 在本地路径中可以设置主目录的路径名和访问权限。 3、“文档”标签 web服务器配置 默认文档是指访问一个网站时想要打开的默认网页,这个网页通常是该网站的主页。如果没有启用默认文档或网站的主页文件名不在默认文档列表中,则访问这个网站时需要在地址中指明文件名。 默认文档列表中最初只有4个文件名:Default.htm、Default.asp、index.htm和Default.aspx。我用 “添加”按钮加入了一个index.asp,并用“上移”按钮把它移到了顶部。这主要是因为我的网站的主页名为“index.asp”,所以应该把它加入 列表,至于是否位于列表顶部倒是无关紧要的。 经过以上配置,一个Web网站可以使用了。把制作好的网页复制到网站的主目录中,网站主页的文件名应该包含在默认文档中。打开浏览器,在地址栏中输入“http://本机IP地址”,可以打开网站的主页。其它页面可以用网页中的超链接打开。 虚拟目录 虚拟目录可以使一个网站不必把所有内容都放置在主目录内。虚拟目录从用户的角度来看仍在主目录之内,但实际位置可以在计算机的其它位置,而且虚拟目录的名字也可以与真实目录不同。如: web服务器配置 web服务器配置 图中用户看到的一个位于主目录下的文件夹“pic”,它的真实位置在服务器的“D:myimage”处,而主目录位于“C:mywww” 处。假设该网站的域名是“www.abc.com”,则用户访问“http://www.abc.com/pic/文件1”时,访问的实际位置是服务器的 “D:myimage文件1”,所以虚拟目录的真实名字和位置对用户是不可知的。 创建虚拟目录的方法: 打开 Internet 信息服务窗口,在想要创建虚拟目录的 Web 站点上 单击右键,选择“新建”→“虚拟目录”。弹出虚拟目录创建向导: web服务器配置 别名是映射后的名字,即客户访问时的名字; web服务器配置 路径:服务器上的真实路径名,即虚拟目录的实际位置; web服务器配置 访问权限:指客户对该目录的访问权限。 单击“下一步”按钮,弹出完成对话框,虚拟目录建立成功了。把相关文件复制到虚拟目录中,用户可以按照虚拟的树形结构访问到指定文件了。 通常虚拟目录的访问权限、默认文档等都继承自主目录,如果需要修改,可在“Internet 信息服务管理器”中的虚拟目录上单击右键,选择“属性”,可以修改虚拟目录的参数设置了。 三、常见问题 1、如何在一台Web服务器上建立多个网站? 在IIS管理器的“网站”上单击右键,选择“新建Web网站”,然后用“网站创建向导”可以创建新网站,每运行一次能创建一个网站。 多网站的关键是如何区分各个网站,区分的依据是IP地址、TCP端口号、主机头,只要这三个参数中有任何一个不同都可以。 ①用IP地址区分各网站:首先为服务器配置多个IP地址,然后在网站属性的IP地址栏目中为每个网站设置一个IP地址。 ②用TCP端口区分各网站:这时各网站可以使用相同的IP地址,但把TCP端口设置的不同(应该使用1024~65535之间的值),这样也可以区分各网站。但这种方法要求用户在访问网站时,必须在地址中加入端口号,显得不太方便,一般不用。 ③用主机头区分各网站:主机头是一个符合DNS命名规则的符号串,一般用网站的域名作为主机头。设置主机头可以在网站属性的“网站”标签中单击“高级”按钮进行设置。如图: web服务器配置 利用这个“高级”设置,还可以为一个网站配置多个IP地址,或使用不同的TCP端口。 2、网站配置完成后,为何打不开? 最常见的情况是没有把网站主页的文件名添加到默认文档列表中,IIS6中网站的默认文档只有4个:Default.htm、 Default.asp、index.htm和Default.aspx,如果你的网站主页名字不是这4个中的一个,应该把它添加进去。如果不添加, 应该用带文件名的地址访问这个页面。 3、为什么我的ASP页面不能执行? 在IIS6中,ASP文件必须在启用“Active Server Pages”时才能执行,如果安装IIS时,没有选中“Active Server Pages”,则服务器默认不启用“Active Server Pages”,也不能执行ASP文件。 启用“Active Server Pages”的方法是:打开“Internet 信息服务管理器”,选中其中的“Web服务扩展”,然后启用里面的“Active Server Pages”。如图: 转载于:https://server.zzidc.com/fwqpz/528.html web服务器配置

养狐狸的猫 2019-12-02 02:11:36 0 浏览量 回答数 0

问题

8 个很有用的 jQuery 技巧报错

kun坤 2020-06-03 13:09:52 4 浏览量 回答数 1

回答

从效果图上我们还看到有几点重要信息: 点赞动画图片大小不一,运动轨迹也是随机的点赞动画图片都是先放大再匀速运动。快到顶部的时候,是渐渐消失。收到大量的点赞请求的时候,点赞动画不扎堆,井然有序持续出现。 那么如何实现这些要求呢?下面介绍两种实现方式来实现(底部附完整 demo): CSS3 实现 用 CSS3 实现动画,显然,我们想到的是用 animation 。 首先看下 animation 合并写法,具体含义就不解释了,如果需要可以自行了解。 animation: name duration timing-function delay iteration-count direction fill-mode play-state; 我们开始来一步一步实现。 Step 1: 固定区域,设置基本样式 首先,我们先准备 1 张点赞动画图片: 看一下 HTML 结构。外层一个结构固定整个显示动画区域的位置。这里在一个宽 100px ,高 200px 的 div 区域。 Step 5: 设置偏移 我们先定义帧动画:bubble_1 来执行偏移。图片开始放大阶段,这里没有设置偏移,保持中间原点不变。 在运行到 25% * 4 = 1s,即 1s之后,是向左偏移 -8px, 2s 的时候,向右偏移 8px,3s 的时候,向做偏移 15px ,最终向右偏移 15px。 大家可以想到了,这是定义的一个经典的左右摆动轨迹,“向左向右向左向右” 曲线摆动效果。 @keyframes bubble_1 { 0% { } 25% { margin-left:-8px; } 50% { margin-left:8px } 75% { margin-left:-15px } 100% { margin-left:15px } } 效果如下: Step 6: 补齐动画样式 这里预设了一种运行曲线轨迹,左右摆动的样式,我们在再预设更多种曲线,达到随机轨迹的目的。 比如 bubble_1 的左右偏移动画轨迹,我们可以修改偏移值,来达到不同的曲线轨迹。 Step 7: JS 操作随机增加节点样式 提供增加点赞的方法,随机将点赞的样式组合,然后渲染到节点上。 let praiseBubble = document.getElementById("praise_bubble"); let last = 0; function addPraise() { const b =Math.floor(Math.random() * 6) + 1; const bl =Math.floor(Math.random() * 11) + 1; // bl1~bl11 let d = document.createElement("div"); d.className = bubble b${b} bl${bl}; d.dataset.t = String(Date.now()); praiseBubble.appendChild(d); } setInterval(() => { addPraise(); },300) 在使用 CSS 来实现点赞的时候,通常还需要注意设置 bubble 的随机延时,比如: .bl2{ animation:bubble_2 $bubble_time linear .4s 1 forwards,bubble_big_2 $bubble_scale linear .4s 1 forwards,bubble_y $bubble_time linear .4s 1 forwards; } 这里如果是随机到 bl2,那么延时 0.4s 再运行,bl3 延时 0.6s …… 如果是批量更新到节点上,不设置延时的话,那就会扎堆出现。随机“ bl ”样式,就随机了延时,然后批量出现,都会自动错峰显示。当然,我们还需要增加当前用户手动点赞的动画,这个不需要延时。 另外,有可能同时别人下发了点赞 40 个,业务需求通常是希望这 40 个点赞气泡都能依次出现,制造持续的点赞氛围,否则下发量大又会扎堆显示了。 那么我们还需要分批打散点赞数量,比如一次点赞的时间($bubble_time)是 4s, 那么 4s 内,希望同时出现多少个点赞呢?比如是 10个,那么 40 个点赞,需要分批 4 次渲染。 window.requestAnimationFrame(() => { // 继续循环处理批次 render(); }); 另外还需要手动清除节点。以防节点过多带来的性能问题。如下是完整的效果图。 class ThumbsUpAni{ constructor(){ const canvas = document.getElementById('thumsCanvas'); this.context = canvas.getContext('2d')!; this.width = canvas.width; this.height = canvas.height; } } Step 2:创建渲染对象 实时渲染图片,使其变成一个连贯的动画,很重要的是:生成曲线轨迹。这个曲线轨迹需要是平滑的均匀曲线。 假如生成的曲线轨迹不平滑的话,那看到的效果就会太突兀,比如上一个是 10 px,下一个就是 -10px,那显然,动画就是忽左忽右左右闪烁了。 理想的轨迹是上一个位置是 10px,接下来是 9px,然后一直平滑到 -10px,这样的坐标点就是连贯的,看起来动画就是平滑运行。 随机平滑 X 轴偏移 如果要做到平滑曲线,其实可以使用我们再熟悉不过的正弦( Math.sin )函数来实现均匀曲线。 看下图的正弦曲线: 这是 Math.sin(0) 到 Math.sin(9) 的曲线图走势图,它是一个平滑的从正数到负数,然后再从负数到正数的曲线图,完全符合我们的需求,于是我们再需要生成一个随机比率值,让摆动幅度随机起来。 const angle = getRandom(2, 10); let ratio = getRandom(10,30)*((getRandom(0, 1) ? 1 : -1)); const getTranslateX = (diffTime) => { if (diffTime < this.scaleTime) {// 放大期间,不进行摇摆偏移 return basicX; } else { return basicX + ratio*Math.sin(angle*(diffTime - this.scaleTime)); } }; 复制代码scaleTime 是从开始放大到最终大小,用多长时间,这里我们设置 0.1,即总共运行时间前面的 10% 的时间,点赞图片逐步放大。 diffTime,是只从开始动画运行到当前时间过了多长时间了,为百分比。实际值是从 0 --》 1 逐步增大。 diffTime - scaleTime = 0 ~ 0.9, diffTime 为 0.4 的时候,说明是已经运行了 40% 的时间。 因为 Math.sin(0) 到 Math.sin(0.9) 曲线几乎是一个直线,所以不太符合摆动效果,从 Math.sin(0) 到 Math.sin(1.8) 开始有细微的变化,所以我们这里设置的 angle 最小值为 2。 这里设置角度系数 angle 最大为 10 ,从底部到顶部运行两个波峰。 当然如果运行距离再长一些,我们可以增大 angle 值,比如变成 3 个波峰(如果时间短,出现三个波峰,就会运行过快,有闪烁现象)。如下图: Y 轴偏移 这个容易理解,开始 diffTime 为 0 ,所以运行偏移从 this.height --> image.height / 2。即从最底部,运行到顶部留下,实际上我们在顶部会淡化隐藏。 const getTranslateY = (diffTime) => { return image.height / 2 + (this.height - image.height / 2) * (1-diffTime); }; 复制代码放大缩小 当运行时间 diffTime 小于设置的 scaleTime 的时候,按比例随着时间增大,scale 变大。超过设置的时间阈值,则返回最终大小。 const basicScale = [0.6, 0.9, 1.2][getRandom(0, 2)]; const getScale = (diffTime) => { if (diffTime < this.scaleTime) { return +((diffTime/ this.scaleTime).toFixed(2)) * basicScale; } else { return basicScale; } }; 复制代码淡出 同放大逻辑一致,只不过淡出是在运行快到最后的位置开始生效。 **const fadeOutStage = getRandom(14, 18) / 100; const getAlpha = (diffTime) => { let left = 1 - +diffTime; if (left > fadeOutStage) { return 1; } else { return 1 - +((fadeOutStage - left) / fadeOutStage).toFixed(2); } }; ** 实时绘制 创建完绘制对象之后,就可以实时绘制了,根据上述获取到的“偏移值”,“放大”和“淡出”值,然后实时绘制点赞图片的位置即可。 每个执行周期,都需要重新绘制 canvas 上的所有的动画图片位置,最终形成所有的点赞图片都在运动的效果。 createRender(){ return (diffTime) => { // 差值满了,即结束了 0 ---》 1 if(diffTime>=1) return true; context.save(); const scale = getScale(diffTime); const translateX = getTranslateX(diffTime); const translateY = getTranslateY(diffTime); context.translate(translateX, translateY); context.scale(scale, scale); context.globalAlpha = getAlpha(diffTime); // const rotate = getRotate(); // context.rotate(rotate * Math.PI / 180); context.drawImage( image, -image.width / 2, -image.height / 2, image.width, image.height ); context.restore(); }; } 这里绘制的图片是原图的 width 和 height。前面我们设置了 basiceScale,如果图片更大,我们可以把 scale 再变小即可。 const basicScale = [0.6, 0.9, 1.2][getRandom(0, 2)]; 实时绘制扫描器 开启实时绘制扫描器,将创建的渲染对象放入 renderList 数组,数组不为空,说明 canvas 上还有动画,就需要不停的去执行 scan,直到 canvas 上没有动画结束为止。 scan() { this.context.clearRect(0, 0, this.width, this.height); this.context.fillStyle = "#f4f4f4"; this.context.fillRect(0,0,200,400); let index = 0; let length = this.renderList.length; if (length > 0) { requestAnimationFrame(this.scan.bind(this)); } while (index < length) { const render = this.renderList[index]; if (!render || !render.render || render.render.call(null, (Date.now() - render.timestamp) / render.duration)) { // 结束了,删除该动画 this.renderList.splice(index, 1); length--; } else { // 当前动画未执行完成,continue index++; } } } 这里就是根据执行的时间来对比,判断动画执行到的位置了: diffTime = (Date.now() - render.timestamp) / render.duration 复制代码如果开始的时间戳是 10000,当前是100100,则说明已经运行了 100 毫秒了,如果动画本来需要执行 1000 毫秒,那么 diffTime = 0.1,代表动画已经运行了 10%。 增加动画 每点赞一次或者每接收到别人点赞一次,则调用一次 start 方法来生成渲染实例,放进渲染实例数组。如果当前扫描器未开启,则需要启动扫描器,这里使用了 scanning 变量,防止开启多个扫描器。 start() { const render = this.createRender(); const duration = getRandom(1500, 3000); this.renderList.push({ render, duration, timestamp: Date.now(), }); if (!this.scanning) { this.scanning = true; requestFrame(this.scan.bind(this)); } return this; } 这里开启定时器,记录定时器里面处理的 thumbsStart 的值,如果有新增点赞,且定时器还在运行,直接更新最后的 praiseLast 值,定时器会依次将点赞请求全部处理完。 定时器的延时时间 time 根据开启定时器的时候,需要渲染多少点赞动画来决定的,比如需要渲染 100 个点赞动画,我们将 100 个点赞动画分布在 5s 内渲染完。 对于热门直播,会同时渲染的动画很多,不会扎堆显示,且动画完全能衔接上,不停的冒泡点赞动画。对于冷门直播,有多余一个的点赞请求,我们能打散到 5s 内显示,也不会扎堆显示。 End 两种方式渲染点赞动画都已经完成,完整源码,源码戳这里 。 源码运行效果图: 再比较 这两种实现方式,都可以满足要求,那么到底哪种更优呢? 我们来看下两者的数据对比。以下为未开启硬件加速的对比,采用不间断疯狂渲染点赞动画的数据对比: 整体来说,差异如下: CSS3 实现简单Canvas 更灵活,操作更细腻CSS3 内存消耗比 Canvas 大,如果开启硬件加速,内存消耗更大一些。

剑曼红尘 2020-04-15 19:17:18 0 浏览量 回答数 0

问题

PCI远程扫描漏洞补丁如何解决

1298117508539047 2019-12-01 18:51:40 2296 浏览量 回答数 0

回答

1、禁止使用 iframe(阻塞父文档 onload 事件); *iframe 会阻塞主页面的 Onload 事件; *搜索引擎的检索程序无法解读这种页面,不利于 SEO; *iframe 和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。 使用 iframe 之前需要考虑这两个缺点。如果需要使用 iframe,最好是通过 javascript 动态给 iframe 添加 src 属性值,这样可以绕开以上两个问题。 2、禁止使用 gif 图片实现 loading 效果(降低 CPU 消耗,提升渲染性能); 3、使用 CSS3 代码代替 JS 动画(尽可能避免重绘重排以及回流)css3 平面动画开启 translateZ(0),打开浏览器 3d 加速,在一定程度可缓解卡顿。不宜多用; 4、对于一些小图标,可以使用 base64 位编码,以减少网络请求。但不建议大图使用,比较耗费 CPU; 小图标优势在于: 1.减少 HTTP 请求; 2.避免文件跨域; 3.修改及时生效; 5、页面头部的<style></style> 会阻塞页面;(因为 Renderer 进程中 JS 线程和渲染线程是互斥的); 6、页面头部<script</script> 会阻塞页面;(因为 Renderer 进程中 JS 线程和渲染线程是互斥的); 7、页面中空的 href 和 src 会阻塞页面其他资源的加载 (阻塞下载进程); 8、网页 Gzip,CDN 托管,data 缓存 ,图片服务器; 9、前端模板 JS+数据,减少由于 HTML 标签导致的带宽浪费,前端用变量保存 AJAX 请求结果,每次操作本地变量,不用请求,减少请求次数 10、用 innerHTML 代替 DOM 操作,减少 DOM 操作次数,优化 javascript 性能。 11、当需要设置的样式很多时设置 className 而不是直接操作 style。 12、少用全局变量、缓存 DOM 节点查找的结果。减少 IO 读取操作。 13、避免使用 CSS Expression(css 表达式)又称 Dynamic properties(动态属性)。 14、图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。 15、 避免在页面的主体布局中使用 table,table 要等其中的内容完全下载之后才会显示出来,显示比 div+css 布局慢。 对普通的网站有一个统一的思路,就是尽量向前端优化、减少数据库操作、减少磁盘 IO。 向前端优化指的是,在不影响功能和体验的情况下,能在浏览器执行的不要在服务端执行, 能在缓存服务器上直接返回的不要到应用服务器,程序能直接取得的结果不要到外部取得, 本机内能取得的数据不要到远程取,内存能取到的不要到磁盘取,缓存中有的不要去数据库查询。 减少数据库操作指减少更新次数、缓存结果减少查询次数、将数据库执行的操作尽可能的让你的程序完成(例如 join 查询), 减少磁盘 IO 指尽量不使用文件系统作为缓存、减少读写文件次数等。程序优化永远要优化慢的部分,换语言是无法“优化”的。 16、通过改变 src 的情况下**.MP3(不同于 mp3)在移动端有可能不能播放。

kun坤 2019-12-02 03:23:30 0 浏览量 回答数 0

问题

最大限度利用 JavaScript 和 Ajax 性能:报错

kun坤 2020-06-05 22:56:50 0 浏览量 回答数 1

问题

程序员报错行为大赏-配置报错

问问小秘 2020-06-11 13:18:25 6 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站