下面的动画展现了通过两个代表x、y轴的滑块来实现图形的平移效果动画,本文介绍怎么来实现这样的滑块。 滑块html结构 示例通过ul列表结构组织,每个li元素的内容表示一个滑块,每个滑块包含名称、滑块和值三部分内容,其中滑块使用input元素即可实现,只需要将type设置为range即可。ulli!滑块名称x!滑块inputclassxinwidgetslidertyperangemin0max1740value870!滑块表示的值399liliyinputclassxinwidgetslidertyperangemin0max860value430312liul滑块CSS样式 整个滑块组通过绝对定位的方式将其定位在web页面的右上角,取消ul列表的默认列表样式,每个滑块的名称、滑块、值居中对齐,只需要简单几个css样式就可以达到这个效果。将toolbox容器绝对定位到web页面右上角toolbox{position:absolute;top:0;right:0;margin:1rem2rem;opacity:0。6;}不显示ul任何列表样式toolboxul{liststyletype:none;}居中对齐滑块名称、滑块、值toolboxulli{display:flex;alignitems:center;}TypeScript代码实现滑块组件封装 接下来,还需要通过js代码添加滑块监听处理方法,实时更新滑块的值,并提供回调入口供应用使用该滑块。这里通过TypeScript来实现,代码如下:exportclassxinUI{创建滑块组件setupSlider(parentselector:string,options:any){varparentdocument。querySelector(parentselector);从options中提取滑块的名称、最小、最大值、当前值等,不存在的则取默认值varnameoptions。name;varminoptions。min0;varmaxoptions。max1;varcallbackoptions。callback;varvalueoptions。value0;创建一组滑块varelmlidocument。createElement(li);elmli。innerHTML{name}inputclassxinwidgetslidertyperangemin{min}max{max}value{value}{value};parent。appendChild(elmli);varelmsliderelmli。querySelector(。xinwidgetslider);varelmvalueelmli。querySelector(。xinwidgetvalue);更新显示滑块的值updateValue();添加input、change事件,实时改变滑块的值并回调options指定的方法elmslider。addEventListener(input,handleChange);elmslider。addEventListener(change,handleChange);functionupdateValue(){elmvalue。textContentvalue;}functionhandleChange(event){valueevent。target。value;updateValue();供用户回调callback(event,{value:value});}}};滑块组件示例 下面的示例在web页面的右上角创建两个滑块代表x、y坐标,滑动滑块将在控制台打印滑块的值。 index。html!DOCTYPEhtmlhtmllangenheadmetacharsetUTF8metahttpequivXUACompatiblecontentIEedgemetanameviewportcontentwidthdevicewidth,initialscale1。0linkrelstylesheethref。srccsslayout。csstitle滑块组件使用示例titleheadbodyulul!sliderui。js为上面滑块组件代码编译为js后的代码,这里不再列出bodyhtml main。tsimport{xinUI}from。sliderui。js;functionmain(){vartranslation〔10,30〕;创建x、y平移滑块varmyUInewxinUI();myUI。setupSlider(toolboxul,{name:x,max:100,value:translation〔0〕,callback:updatePosition(0)});myUI。setupSlider(toolboxul,{name:y,max:100,value:translation〔1〕,callback:updatePosition(1)});functionupdatePosition(index){returnfunction(event,ui){translation〔index〕parseInt(ui。value);以下为应用处理的代码,这里仅打印其信息以示例console。log(translation〔index〕);}}}main();export{};