关于特效:视觉特效包FxFactory-pro-8激活

FxFactory pro for mac是利用在Mac上的fcpx/ae/pr视觉特效插件包,蕴含了成千盈百的视觉效果,反对 Final Cut Pro, Motion, After Effects 和Premiere Pro。 视觉特效包——FxFactory pro 8激活 1、FxFactory mac提供反对After Effects, Final Cut Pro 或者Motion的视觉效果汇合。 2、此外,FxFactory是装备了直观的界面,让您能够浏览并治理装置在零碎上的所有的成果。 3、该FxFactory OS X应用程序,您还能够应用收费的产品,而无需购买,但也提供了购买和注册的商业产品的反对。 4、该FxFactory专业版,您能够制作本人的视觉效果,而无需编写一行代码。 5、用户能够查看所有插件并适当配置它们为你的我的项目,或创立一个基于现有的新的问题。 6、无需编写代码创立本人的Final Cut Studio的影响。用的FxPlug无缝集成:第一次装置插件,您能够立刻开始在Final Cut Pro, Motion and After Effects和更多应用它们! 7、 一个额定的长处是,业余包插件反对16位和32位的一个静止图像的构造。 FxFactory – 它不只是内置的插件管理器,也是对本人治理的残缺环境。通过它,你能够连贯到我的项目所需的模块,把它们利用到你的内容,预览和渲染。

August 12, 2022 · 1 min · jiezi

关于特效:如何制作电影视频后期特效制作特效的工具

The Foundry NUKE 13 是一款弱小的影视前期特效合成工具!NukeX的弱小合成性能,再加上Hiero的多轨道剪辑工夫线,让您能够实现素材整合、审查、剪辑,甚至从工夫线上就创立和渲染合成。 Nuke领有200多个创意节点,可提供您应答数字合成各种挑战所需的所有。这包含行业标准的键控器,旋转镜,矢量绘画工具,色调校对等等。 下载:https://www.macz.com/mac/1827...

July 15, 2022 · 1 min · jiezi

关于特效:各大工作室都在用的视觉特效软件开启你的虚拟制作之旅

为您的虚构制作设置的收费视觉特效工具应用当先工作室们所信赖的创意资源管理软件,收费开始您的下一个虚构制作我的项目。 花更多工夫在创作上,更少工夫在设置上增强型Studio包 —— 现已能够部署在微软 Azure 上应用 —— 蕴含了您所须要的所有工具,包含虚构生产软件,使之能在一个预配置的环境中进行世界级的开发。 应用能反对虚构制作和VFX动画软件(3ds Max、Maya工具)的工具来实现虚构制作设置。 只需点击几下,您能够部署 Perforce Helix Core 版本控制、Helix Swarm 代码审查和 Hansoft 项目管理所需的基础设施,以反对大型项目/文件。 另外,您还会失去一个 Windows 工作站,其能够轻松地让工具启动和运行。 Perforce 客户端包含 Helix Visual Client P4V 和 Helix Sync。 第三方软件包含,Epic Game Launcher、Blender 和 Visual Studio。 还有更多! 您的虚构制作管道优化您的虚构生产工作管道,以更快地制订打算并减速游戏引擎的构建。 “Perforce Helix Core 始终是一个基础性工具。它有助于为咱们电影的所有数字资源创立一个繁多的起源......咱们能够在一个反对并整合像Unreal Engine、5th Kind、ftrack 等当先工具的基础设施内对咱们的要害 IP 和数字文件进行版本治理。”Erik Weaver,ETC 适应性生产和特地我的项目主任您的视觉特效软件+数字资源管理工具数字资源管理工具须要版本控制。它提供了一个平台来整合您的 VFX 软件、VFX 工具和游戏引擎 —— 包含 Unity 和 Unreal 引擎。虚构制作软件和数字及媒体资源管理工具的精简,使您的构建速度更快。 为什么顶级工作室喜爱Hansoft “Perforce 的劣势在于它在后盾运行,而且很牢靠。它就像一种力量。它无缝集成,所以您不会留神到它,但它正在连接所有......在咱们找到Perforce 之前,咱们在其余一些版本管理软件上损失了大量的工夫和文件。”Winslow Porter,新Reality公司联结创始人兼董事为什么顶级工作室抉择 Perforce Helix Core ...

April 27, 2022 · 1 min · jiezi

关于特效:抖音特效背后的故事与技术

7 月 28 日,抖音联结火山引擎举办特效技术开放日,首次披露抖音特效的生产流程和技术原理。流动中,火山引擎发表已向企业客户凋谢了上万款抖音同款特效,包含猴哥、漫画诧异脸等热门道具。企业还可应用火山引擎的特效工具套件,一名设计师仅需 5 天就可生产出 3D 特效。 抖音设计核心负责人王运恢讲述了抖音特效背地的故事。他示意抖音提供特效的初衷是为了升高短视频拍摄门槛,帮忙用户更好地表白。数据显示,抖音上每五个投稿,就有一个应用特效。京剧头饰、越剧小生和川剧变脸等非遗类文化特效受到宽广用户青睐,各种 AR 地标特效对当地旅游业倒退也起到了踊跃的促进作用。 抖音除了自建数百人的特效团队,还推出特效开放平台与内部设计师单干。来自重庆的设计师 YOVFX 介绍,他以前从事影视工作,参加过《琅琊榜 2》等剧集的后期制作,打交道最多的就是各种简单的影视后期制作软件。退出开放平台后,YOVFX 发现抖音特效创作工具特地容易上手,又能实现传统制作里高阶的成果,“突破了技术高墙,让创作更简略纯正。” 火山引擎特效技术专家杨辉则揭发了抖音特效背地的技术。他示意,AI 技术的衰亡赋予特效弱小的表现力和更多设想空间,普通人不仅能够应用特效,还能轻松创作特效。抖音特效技术就是基于字节跳动的 AI 根底平台,把简单的技术转化为简略好用的产品。 火山引擎特效技术专家杨辉介绍抖音特效的实现原理 “特效不光是一门技术,更是一项工程”。杨辉示意,抖音特效背地有一套欠缺的工程体系,包含模块化组件、灵便可定制的资源下发能力,以及对不同零碎、不同分辨率屏幕的兼容和适配。数据显示,抖音特效的程序接口解体率低于十万分之一,稳定性达到行业领先水平。 火山引擎向企业客户凋谢上万款抖音同款特效作为字节跳动的技术服务平台,火山引擎不仅反对了抖音、今日头条等公司外部产品,也在向内部企业凋谢,为客户提供特效创作工具套件、定制算法、工程化部署和对接联调等产品及服务。此外,火山引擎资源商城提供了抖音同款的特效拍摄资源、剪辑资源和模板资源,企业能够依据热度、类型等形式抉择应用。 随着挪动互联网倒退,特效不再只属于影视和视频平台,也被广泛应用在电商、社交、文旅、游戏、教育、智能硬件等不同畛域,成为数字创意内容的载体。以电商试妆试戴为例,消费者在手机上就能够试用商品,实现身临其境的购物体验。目前火山引擎特效技术已服务于唱吧、懂球帝、海信等泛滥企业。 杨辉认为,5G 减速遍及会进一步拓展特效的利用空间。将来,虚构大场景里人与人可能连贯共享特效,汽车、眼镜甚至手表都会成为特效的入口,从而带来更多激动人心的体验。

July 28, 2021 · 1 min · jiezi

关于特效:前端面试每日-31-第501天

明天的知识点 (2020.08.29) —— 第501天 (我也要出题)[html] 制作一个不规则形态有哪些办法能够实现?[css] 应用css实现闪光的霓虹灯文字效果[js] 请说说JS中的索引数组、关联数组和动态数组、动静数组的定义与区别[软技能] 说说你对覆盖率的了解,它解决什么问题?《论语》,曾子曰:“吾日三省吾身”(我每天屡次检查本人)。前端面试每日3+1题,以面试题来驱动学习,每天提高一点!让致力成为一种习惯,让奋斗成为一种享受!置信 保持 的力量!!!欢送在 Issues 和敌人们一起探讨学习! 我的项目地址:前端面试每日3+1【举荐】欢送跟 jsliang 一起折腾前端,零碎整顿前端常识,目前正在折腾 LeetCode,打算买通算法与数据结构的任督二脉。GitHub 地址 微信公众号欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个Star, 同时欢送微信扫码关注 前端剑解 公众号,并退出 “前端学习每日3+1” 微信群互相交换(点击公众号的菜单:交换)。 学习不打烊,充电加油只为遇到更好的本人,365天无节假日,每天早上5点纯手工公布面试题(死磕本人,愉悦大家)。心愿大家在这虚夸的前端圈里,放弃沉着,保持每天花20分钟来学习与思考。在这变幻无穷,类库层出不穷的前端,倡议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢送大家到Issues交换,激励PR,感激Star,大家有啥好的倡议能够加我微信一起交换探讨!心愿大家每日去学习与思考,这才达到来这里的目标!!!(不要为了谁而来,要为本人而来!)交换探讨欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个[Star]

August 29, 2020 · 1 min · jiezi

刮刮卡效果实现

公司国庆搞了个集卡、抽奖小活动。抽奖需要刮刮卡的效果,感觉 css 是实现不了。看我使用 canvas 如何实现刮刮卡效果。废话不多说,线上效果 jsrun-测试地址 、 lilnong.top-测试地址 实现方案都有什么clearRect 这是我第一个找到的 API,作用是清除一个矩形区域内的内容。缺点是矩形globalCompositeOperation 基于上面的缺点,我发现了他 destination-out 是我需要的,作用是改变canvas图形的混合模式我们期望有什么功能底部内容自定义(我们将 canvas 浮在内容上即可)自定义蒙版颜色(canvas 绘制画布设置一下颜色即可 context.fillStyle = color;)自定义蒙版图片(使用drawImage来绘制画布)自定义笔触 clearRect为矩形arc配合globalCompositeOperation来实现圆形drawImage配合globalCompositeOperation来自定义笔触自动刮开&自动刮开轨道生成器刮开面积占比底部内容自定义两个方案的差距不大,根据个人喜好选择即可。 方案一 DOM 层级(拥有更多的能力)效果查看-传送门 <style type="text/css"> #app1{width:300px;height:100px;position: relative;border: 1px solid #f00;} #app1Content{width:300px;height:100px;position: absolute;left:0;top:0;z-index: 1} #app1Mark{width:300px;height:100px;position: absolute;left:0;top:0;z-index: 2} </style> <div id="app1"> <div id="app1Content" style="background:url(https://www.lilnong.top/static/img/ml-btn6.png) left center no-repeat">我是自定义内容</div> <canvas id="app1Mark"></canvas> </div>方案二 canvas 背景图(使用简单)效果查看-传送门 <style type="text/css"> #app2{width:300px;height:100px;position: relative;border: 1px solid #f00;} #app2Mark{width:300px;height:100px;position: absolute;left:0;top:0;z-index: 2}</style><div id="app2"> <canvas id="app2Mark" style="background:url(https://www.lilnong.top/static/img/ml-btn6.png) left center no-repeat"></canvas></div>蒙版颜色ctx.fillStyle = '#0cc';主要通过这个来设置填充样式。效果查看-传送门感兴趣可以去看看,我这里没用到就不细说了。传送门 - Canvas API中文网 色值填充 ...

October 9, 2019 · 2 min · jiezi

看完这篇你也可以实现一个360度全景插件

导读本文从绘图基础开始讲起,详细介绍了如何使用Three.js开发一个功能齐全的全景插件。 我们先来看一下插件的效果: 如果你对Three.js已经很熟悉了,或者你想跳过基础理论,那么你可以直接从全景预览开始看起。 本项目的github地址:https://github.com/ConardLi/t... 一、理清关系1.1 OpenGL OpenGL是用于渲染2D、3D量图形的跨语言、跨平台的应用程序编程接口(API)。 这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。 OpenGL ES 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。 基于OpenGL,一般使用C或Cpp开发,对前端开发者来说不是很友好。 1.2 WebGLWebGL把JavaScript和OpenGL ES 2.0结合在一起,从而为前端开发者提供了使用JavaScript编写3D效果的能力。 WebGL为HTML5 Canvas提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了,还能创建复杂的导航和数据视觉化。 1.3 CanvasCanvas是一个可以自由制定大小的矩形区域,可以通过JavaScript可以对矩形区域进行操作,可以自由的绘制图形,文字等。 一般使用Canvas都是使用它的2d的context功能,进行2d绘图,这是其本身的能力。 和这个相对的,WebGL是三维,可以描画3D图形,WebGL,想要在浏览器上进行呈现,它必须需要一个载体,这个载体就是Canvas,区别于之前的2dcontext,还可以从Canvas中获取webglcontext。 1.4 Three.js 我们先来从字面意思理解下:Three代表3D,js代表JavaScript,即使用JavaScript来开发3D效果。 Three.js是使用JavaScript 对 WebGL接口进行封装与简化而形成的一个易用的3D库。 直接使用WebGL进行开发对于开发者来说成本相对来说是比较高的,它需要你掌握较多的计算机图形学知识。 Three.js在一定程度上简化了一些规范和难以理解的概念,对很多API进行了简化,这大大降低了学习和开发三维效果成本。 下面我们来具体看一下使用Three.js必须要知道的知识。 二、Three.js基础知识使用Three.js绘制一个三维效果,至少需要以下几个步骤: 创建一个容纳三维空间的场景 — Sence将需要绘制的元素加入到场景中,对元素的形状、材料、阴影等进行设置给定一个观察场景的位置,以及观察角度,我们用相机对象(Camera)来控制将绘制好的元素使用渲染器(Renderer)进行渲染,最终呈现在浏览器上拿电影来类比的话,场景对应于整个布景空间,相机是拍摄镜头,渲染器用来把拍摄好的场景转换成胶卷。 2.1 场景场景允许你设置哪些对象被three.js渲染以及渲染在哪里。 我们在场景中放置对象、灯光和相机。 很简单,直接创建一个Scene的实例即可。 _scene = new Scene();2.2 元素有了场景,我们接下来就需要场景里应该展示哪些东西。 一个复杂的三维场景往往就是由非常多的元素搭建起来的,这些元素可能是一些自定义的几何体(Geometry),或者外部导入的复杂模型。 Three.js 为我们提供了非常多的Geometry,例如SphereGeometry(球体)、 TetrahedronGeometry(四面体)、TorusGeometry(圆环体)等等。 在Three.js中,材质(Material)决定了几何图形具体是以什么形式展现的。它包括了一个几何体如何形状以外的其他属性,例如色彩、纹理、透明度等等,Material和Geometry是相辅相成的,必须结合使用。 下面的代码我们创建了一个长方体体,赋予它基础网孔材料(MeshBasicMaterial) var geometry = new THREE.BoxGeometry(200, 100, 100); var material = new THREE.MeshBasicMaterial({ color: 0x645d50 }); var mesh = new THREE.Mesh(geometry, material); _scene.add(mesh); ...

May 5, 2019 · 6 min · jiezi

原生js实现移动端Touch轮播图

Touch 轮播图touch轮播图其实就是通过手指的滑动,来左右切换轮播图,下面我们通过一个案例,来实现下。1. html 结构结构上,还是用ul、li来存放轮播图片,ol、li来存放轮播小圆点:2. 样式初始化html的一些标签,都会有一些默认样式,比如body标签默认是有一个边距的,为了不影响美观,我们需要清除掉。/* 清除标签默认边距 /body,ul,li,ol,img { margin: 0; padding: 0;}/ 清除 ul 等标签前面的“小圆点” /ul,li,ol { list-style-type: none;}/ 图片自适应 /img { width: 100%; height: auto; border: none; / ie8 / display: block; -ms-interpolation-mode: bicubic; /为了照顾ie图片缩放失真/}3. 添加样式在前面讲特效的时候,我们说过如何使用原生js实现移一个轮播图的概念,但是当时的方式是通过li浮动,这里给大家介绍一种新的方——定位。思路:给ul外层的盒子一个相对定位;这里的ul高度不能写死,它应该是li撑开的高度,但是由于li绝对定位,没办法撑开这个高度,所以这里的ul需要在js里面动态设置高度;给li设置相对定位,并且left、top都为0,再给li添加一个transform:translateX(300%)属性,目的是初始化显示的图片为空,然后在js里只需要动态设置每个li的translateX值,即可实现轮播;设置小圆点区域,因为小圆点个数未知,所以ol的宽度也未知,想要让一个未知宽度的盒子水平居中,可以使用absolute定位结合left百分比的方式实现;给ol下面的li设置一个宽高添加圆角边框属性,并且左浮动,这样就能显示一排空心的小圆点了;最后,添加一个样式类,里面设置一个背景属性,用来显示当前展示图片对应的小圆点。/ 轮播图最外层盒子 /.carousel { position: relative; overflow: hidden;}.carousel ul { / 这个高度需要在JS里面动态添加 /}.carousel ul li { position: absolute; width: 100%; left: 0; top: 0; / 使用 transform:translaX(300%) 暂时将 li 移动到屏幕外面去*/ -webkit-transform: translateX(300%); transform: translateX(300%);}/* 小圆点盒子 /.carousel .points { / 未知宽度的盒子,使用 absolute 定位,结合 transform 的方式进行居中 / position: absolute; left: 50%; bottom: 10px; transform: translateX(-50%);}/ 小圆点 /.carousel .points li { width: 5px; height: 5px; border-radius: 50%; border: 1px solid #fff; float: left; margin: 0 2px;}/ 选中小圆点的样式类 */.carousel .points li.active { background-color: #fff;}4. js 准备工作先不考虑别的,js在初始化的时候,首先要做的就是给ul添加上一个高度,不然图片是不显示的。给UL动态设置高度动态生成小圆点 (根据图片的张数创建小圆点个数,i=0 添加active)初始化三个li的基本位置定义三个变量,分别用来存储三个li的下(left存储最后一张图片的下标,center和right分别存储第一张和第二张的下标)通过数组[下标]的方式给三个li设置定位后left方向的位置var carousel = document.querySelector(’.carousel’);var carouselUl = carousel.querySelector(‘ul’);var carouselLis = carouselUl.querySelectorAll(’li’);var points = carousel.querySelector(‘ol’);// 屏幕的宽度(轮播图显示区域的宽度)var screenWidth = document.documentElement.offsetWidth;// 1- ul设置高度carouselUl.style.height = carouselLis[0].offsetHeight + ‘px’;// 2- 生成小圆点for(var i = 0; i < carouselLis.length; i++){ var li = document.createElement(’li’); if(i == 0){ li.classList.add(‘active’); }// points.appendChild(li);}// 3- 初始三个 li 固定的位置var left = carouselLis.length - 1;var center = 0;var right = 1;// 归位carouselLis[left].style.transform = ’translateX(’+ (-screenWidth) +‘px)’;carouselLis[center].style.transform = ’translateX(0px)’;carouselLis[right].style.transform = ’translateX(’+ screenWidth +‘px)’;效果图:5. 添加定时器,让图片动起来轮播图都会自己轮播,所以需要用到定时器,每隔一段时间执行一次轮转函数。添加定时器,定时器里面轮转下标极值判断设置过渡(替补的那张不需要过渡)归位小圆点焦点联动var timer = null;// 调用定时器timer = setInterval(showNext, 2000);// 轮播图片切换function showNext(){ // 轮转下标 left = center; center = right; right++; // 极值判断 if(right > carouselLis.length - 1){ right = 0; } //添加过渡 carouselLis[left].style.transition = ’transform 1s’; carouselLis[center].style.transition = ’transform 1s’; // 右边的图片永远是替补的,不能添加过渡 carouselLis[right].style.transition = ’none’; // 归位 carouselLis[left].style.transform = ’translateX(’+ (-screenWidth) +‘px)’; carouselLis[center].style.transform = ’translateX(0px)’; carouselLis[right].style.transform = ’translateX(’+ screenWidth +‘px)’; // 自动设置小圆点 setPoint();}// 动态设置小圆点的active类var pointsLis = points.querySelectorAll(’li’);function setPoint(){ for(var i = 0; i < pointsLis.length; i++){ pointsLis[i].classList.remove(‘active’); } pointsLis[center].classList.add(‘active’);}效果图:6. touch 滑动移动端的轮播图,配合touch滑动事件,效果更加友好。分别绑定三个touch事件touchstart里面记录手指的位置,清除定时器,记录时间touchmove里面获取差值,同时清除过渡,累加上差值的值touchend里面判断是否滑动成功,滑动的依据是滑动的距离(绝对值)超过屏幕的三分之一或者滑动的时间小于300毫秒同时距离大于30(防止点击就跑)的时候都认为是滑动成功在滑动成功的条件分支里面在判断滑动的方向,根据方向选择调用上一张还是下一张的逻辑在滑动失败的条件分支里面添加上过渡,重新进行归位重启定时器var carousel = document.querySelector(’.carousel’);var carouselUl = carousel.querySelector(‘ul’);var carouselLis = carouselUl.querySelectorAll(’li’);var points = carousel.querySelector(‘ol’);// 屏幕的宽度var screenWidth = document.documentElement.offsetWidth;var timer = null;// 设置 ul 的高度carouselUl.style.height = carouselLis[0].offsetHeight + ‘px’;// 动态生成小圆点for (var i = 0; i < carouselLis.length; i++) { var li = document.createElement(’li’); if (i == 0) { li.classList.add(‘active’); } points.appendChild(li);}// 初始三个固定的位置var left = carouselLis.length - 1;var center = 0;var right = 1;// 归位(多次使用,封装成函数)setTransform();// 调用定时器timer = setInterval(showNext, 2000);// 分别绑定touch事件var startX = 0; // 手指落点var startTime = null; // 开始触摸时间carouselUl.addEventListener(’touchstart’, touchstartHandler); // 滑动开始绑定的函数 touchstartHandlercarouselUl.addEventListener(’touchmove’, touchmoveHandler); // 持续滑动绑定的函数 touchmoveHandlercarouselUl.addEventListener(’touchend’, touchendHandeler); // 滑动结束绑定的函数 touchendHandeler// 轮播图片切换下一张function showNext() { // 轮转下标 left = center; center = right; right++; // 极值判断 if (right > carouselLis.length - 1) { right = 0; } //添加过渡(多次使用,封装成函数) setTransition(1, 1, 0); // 归位 setTransform(); // 自动设置小圆点 setPoint();}// 轮播图片切换上一张function showPrev() { // 轮转下标 right = center; center = left; left–; // 极值判断 if (left < 0) { left = carouselLis.length - 1; } //添加过渡 setTransition(0, 1, 1); // 归位 setTransform(); // 自动设置小圆点 setPoint();}// 滑动开始function touchstartHandler(e) { // 清除定时器 clearInterval(timer); // 记录滑动开始的时间 startTime = Date.now(); // 记录手指最开始的落点 startX = e.changedTouches[0].clientX;}// 滑动持续中function touchmoveHandler(e) { // 获取差值 自带正负 var dx = e.changedTouches[0].clientX - startX; // 干掉过渡 setTransition(0, 0, 0); // 归位 setTransform(dx);}// 滑动结束function touchendHandeler(e) { // 在手指松开的时候,要判断当前是否滑动成功 var dx = e.changedTouches[0].clientX - startX; // 获取时间差 var dTime = Date.now() - startTime; // 滑动成功的依据是滑动的距离(绝对值)超过屏幕的三分之一 或者滑动的时间小于300毫秒同时滑动的距离大于30 if (Math.abs(dx) > screenWidth / 3 || (dTime < 300 && Math.abs(dx) > 30)) { // 滑动成功了 // 判断用户是往哪个方向滑 if (dx > 0) { // 往右滑 看到上一张 showPrev(); } else { // 往左滑 看到下一张 showNext(); } } else { // 添加上过渡 setTransition(1, 1, 1); // 滑动失败了 setTransform(); } // 重新启动定时器 clearInterval(timer); // 调用定时器 timer = setInterval(showNext, 2000);}// 设置过渡function setTransition(a, b, c) { if (a) { carouselLis[left].style.transition = ’transform 1s’; } else { carouselLis[left].style.transition = ’none’; } if (b) { carouselLis[center].style.transition = ’transform 1s’; } else { carouselLis[center].style.transition = ’none’; } if (c) { carouselLis[right].style.transition = ’transform 1s’; } else { carouselLis[right].style.transition = ’none’; }}// 封装归位function setTransform(dx) { dx = dx || 0; carouselLis[left].style.transform = ’translateX(’ + (-screenWidth + dx) + ‘px)’; carouselLis[center].style.transform = ’translateX(’ + dx + ‘px)’; carouselLis[right].style.transform = ’translateX(’ + (screenWidth + dx) + ‘px)’;}// 动态设置小圆点的active类var pointsLis = points.querySelectorAll(’li’);function setPoint() { for (var i = 0; i < pointsLis.length; i++) { pointsLis[i].classList.remove(‘active’); } pointsLis[center].classList.add(‘active’);}效果图: ...

January 2, 2019 · 3 min · jiezi