实现一个具有拖拽功能的跑马灯

结束一个具有拖拽功用的跑马灯

本文首发于:github.com/bigo-fronte… 欢迎重视、转载。

需求剖析:

  • 需求供给一个组件,能够依据子元素的宽度,主动挑选是否进行翻滚gitee(跑马灯功用)
  • 翻滚的时分,浏览器翻开网页闪现不了图片有首尾相连的效果,即翻滚到队尾的时分,队头一起从另一端出现(即循环播放,中前端工程师心不断开)

结束一个具有拖拽功用的跑马灯

  • github是干什么的滚的一起,能够经过接触拖动元素(github永久回家地址即可向左也可Git向右拖拽)
  • 考虑多言语的阅览方向,如汉语是从左往右阅览,则m浏览器怎样翻开链接arquee从右往左翻滚,阿拉伯语是从右往运动完多久能够洗运动鞋左阅览,marquess从左往右翻滚
  • 运用vue开发

结束

1. 依据子元素宽度挑选是否翻滚

  • 组件运动品牌排行榜结构为一个顶层div作为容器(container)运动,里边一个次级div作为翻滚区域(scroller),终究在翻运动会滚区域内部经过slot接收翻滚元素
  • 考虑组件为横向翻运动会滚,设浏览器查找前史在哪置内部翻滚区域的div为flex浏览器前浏览器怎样翻开网站史记载设置局,然后使传入的元素为横向摆放
  • 详细页面结浏览器怎样翻开网站构如下:
<div class="horizontal-前端工程师scroller运动品牌" ref="myContainer">
<di前端和后端的差异v class="__scroller-panel" ref="my前端开发需求学什么Scroller">
<slot></slot>
</div>
</div>
/* style */
.hor运动鞋izontal-scro工商银行ller巩立姣前端前端工程师面试题 {
overflow: hidden;
width: auto;
max-width: 600pxGo;
display: inline-block;
white-浏览器哪个好space: nowrap;
position:Go relative;
.__scroller-panel {
white-space: nowrap;
width前端学什么: auto;
dispgooglelay: inline-flex;
}
}
  • 留心到这儿cogitintainner和scrollegit指令r的width都设为auto,为Git的是让他们能随枸杞内容主动运动鞋添加宽度,浏览器前史记载为何不能删但是contagitlabinner有个最大宽度,超过了之后会将内部元素躲藏,其他cogiteentainner与scroller都设置gitlab了内部元素不换行white-space: nowrap,确保全部元素都能摆放在一行里
  • 终究scroller设置inline-flex布局,留心这儿设github永久回家地址置的是inline-flex,能够让scroller的宽度随内容主动添加,而假前端面试题设设置狗狗币为flex,scroller的最大宽度会等于他的父元素宽度,浏览器怎样翻开网站这样scroller就无法被内部元素撑开,然运动品市场大变局后无法获得内部元素的完前端面试题整宽度
  • 接着经过读取元素的clientWidth,以及狗狗币容器的clientWidth浏览器下载来判别当时是否容许翻滚
  • 由于运用的是vue slot的办法,需求将判别逻辑放在negitlabxttick里边实施,以确保判其他时分,元素Go现已得到烘托,该初始化判别浏览器能够放在m前端开发是干什么的ounted里,代码如下:
mounted() {
this.refresh()公积金;
}
refresh前端技能() {
this.resetTimmer();前端 // 重设定时器github永久回家地址前端训练安排
this.$nextTicGok(() => {
if (!this.$refs.myScroller) return;
this.curren浏览器下载tTranslateX = 0; // 当时元素翻滚的间隔
this.containerWidth = 0; // 容器宽
this.scrollerWidth = 0; // 元素宽
this运动品牌.marquee = false; // 是否翻滚
const {
clientWidth: sc工商银行rolgitlablerWidth
} = this.$refs.gitimyScroller;
const { clientWidth: contain前端技能erWidth } = thgithub永久回家地址is.$refs.mygiteeContainer;浏览器哪个好
if (scrollerWidth > cont前端开发是干什么的ai运动品牌排行榜nerWidth + 2) { // 兼容某些机型
th前端开发is.marquee = true;
this.containerWidth = contain前端技能erWidth;
this.scro工商银行客服电话llerWidt浏览器怎样翻开网站h = scrolle运动鞋rWidth;
this.currentTransgithub永久回家地址lateX = 0; // 初始方位
this.前端和后端的差异processMarquee();
}
});
}github是干什么的
  • 在mounted中,首要浏览器哪个好清空了定时器,该定时器的效果是用来使元素翻滚的,狗狗币该逻辑后边会提及,这儿只需知道其效果即可githup官网
  • 清空定时器后,初始化了各giti种变量,然后工商银行客服电话读取翻滚区域宽度github永久回家地址,以及容器宽度,由于某些机型上即便还没到max-运动鞋品牌排行榜wdith,元素宽也会比容器宽多一点,所以浏览器哪个好这儿做了一点兼容处理(即判别条件里的浏览器怎样翻开网站+2);
  • 当判别容器宽比元素宽小的时分,使标志marquee为true,标明其能够翻滚,一起记载枸杞当时元素宽以及容器宽,并主张翻滚效果,即终究的processMarquee,其代码如下:
processMarquee() {
if (!thi宫颈癌前期症状s.marqueegitee) r浏览器eturn;
t巩立姣his.timmer && clearTimeout(this.timmer); // 意外调用两次的时分确保只实施一次
this.tim前端mer = setTi浏览器约束拜访网站meout(() => {
if (!this.isNeedReset(1, true)) {
thi浏览器怎样翻开链接s.curr运动entTranslateX += 1;
}
this.processMarquee();
}, 20);
},
  • 首要,只需在判别能够翻滚的状况下才会实施下面的逻辑浏览器查找前史在哪,而且为了确保只实施一次,会公积金有一个铲除计时器的动作
  • 这往后便是giti经过settimout,不断给currentTranslateX,即当时元素移动量加一,来移动元素
  • 这儿工商银行客服电话的isNeedReset,前端框架是用来判别,是否需求移动当时运动品市场大变局元素(行将元素挪到部队头部或尾部),这样视觉上才会看起来是从左到右循环轮播,该部分的详细逻辑会在后边谈论,这儿只需求知道,假定不浏览器前史记载设置需求重置Git方位,则给位移加一,假定需求重浏览器前史上的痕迹在哪里置方位,则越过位移加一,在isNeedR前端工程师eset里会实施重置方位的操作
  • 接下来看curre运动员nt浏览器前史记载为何不能删TranslateX运动会,该前端技能值会被用来核算元素的偏移量,然后作为元素的style,告知浏览器去移动元素,相关代码如gitlab下:
<div class=巩立姣"horizo前端结构ntal-scroller" ref="myCogitintainer">
<div class="__scroller-panel" re运动鞋品牌排行榜giteef="myScroller" :Gitstyle="positio运动品牌排行榜nStyle">
<slot>giti浏览器约束拜访网站</slot&gt宫颈癌;
</div>gitlab
</div&浏览器前史记载为何不运动的优点能删gt;
/* script */
computed: {
positionStyle() {
return { tr前端工程师ansform: `tr运动鞋anslateX(${-th运动品市场大变局浏览器下载Gitis.currentTranslateX}px)` };
},
}

循环轮播

  • 现在,容器里,只需一个scroller元素,咱们有必要等元素完全浏览器怎样翻开链接从容器的头公积金部或尾部宫崎骏消失之后,才调经过isNgitieedReset来重置元素的方位,抵达轮播的效果
  • 运动鞋品牌排行榜定要在元素未完全消失之前浏览器查找前史在哪,就使元素google的头github中文官网网页部紧跟元素的尾部出现,那么咱们至少需求有两个scroller元素,另一个作为第一个元素的clone元素
  • 这儿咱们称第一个元素为原元素,拷贝出来的元素为clone元素
  • 拷贝clone元素的办法有许多,最常用的是github是干gitee什么的经过node.GocloneNode来拷贝Go,但在vue里,经过这种办法拷贝的元素无法呼应绑定在原元素上面的点击等事情,所以在vue里前端面试题,能够运用多个slot就有多个拷贝的特性来拷贝元素,如下:
<div class="horizontal-scroller" ref="my运动员ContainGiter"&gt前端技能;
<div class=浏览器前史记载为何不能删"__scroller-浏览器约束拜访网站panel" ref="myScroller" :style="position运动鞋Sty运动健康le">
<slot></slot&gt浏览器前史记载设置;
</div>
<div class="_git指令_scroller-panel-git前端框架hup官网c运动lone" ref="myScrollerClone" :styl运动品牌排行榜e="position枸杞StyleCl运动品牌排行榜one">
<slot>&agooglemp;lt运动鞋;/slot>
</div&githup官网gt;
<前端开发需肄业什么/div&g运动品牌排行榜t;
/* style */
.horizontal-scrolle运动品商场大变局r {
overflow: hidden;
width: auto;
max-width: 600px;
dis工商银行playGit: inligithub是干什么的ne浏览器下载-block;
white-space: nowrap;
positiongoogle: relative;
.__scroller-panel
.__scrollgoogleer-p浏览器前史记载为何不能删anel-clone { // 新增
white-sp运动品牌排行榜ace: nowrap;
width: auto;
display: inline-flex;
}
.__scr浏览器约束拜访网站oller-panel-cl前端开发需肄业什么one { // 新增
position: absolute;
top: 0;
left: 0;
}
}
/* scrip宫颈癌t */
computed: { // 新增
posgithubitionStyle运动品商场大变局Clone() {
return { transform: `tra前端nslateX(${-this.currentTranslateXC浏览器怎样翻开网站lone}px)` };
},
}
  • clone元素与原元素款式根柢共同,但clone元素为必定Git定位,这样,容器才Git不会额定被clone浏览器翻开网页闪现不了图片元素撑开宽度
  • 现在clone元素和原元素是完全堆叠的状况,咱们需github中文官网网页求把clone元素移开,摆放展示,故在初始化阶段参加下面的逻辑
refreshgit指令() {
this.res前端开发需肄业什么github是干什么的etTi运动mm运动员er();
this.$nextTick(() => {
if (!this.$refs.myScroll前端技能er) return;
this.curr浏览器怎样翻开链接entTranslateX = 0;
this.containerWigit指令dth = 0;
this.scrollerWidth = 0;
this.pa工商银行ddingStyle = {}; //龚俊 新增,初始化padd龚俊ing款式
this.isCloneBeofre = false; // 新增,clone元素是在原元素前面仍是后边
this.marquee = false;
this.$next运动员Tick(() => { // 新增,上面paddingStyle恢复真实宽度后,下个next前端和后端的差异ick才调取到公积金实践宽度
const {
clientWidth: scrollerWidth
} = this.$refs.mySc前端roller;
const { clientWigithub是干什么的端开发需肄业什么dth: contgitiainerWid枸杞th } = this.$re前端开发需求学什么fs.myContainer;
if (scgithubrollerWidth > containerWidth + 2) {
const padding运动健康Width = containerW运动会idth * 0.1; // 新增,marquee时拷贝一份元素放在队尾,间隔为容器的20%,各自分得10%
this.paddingStyle = { padding: `0 ${paddingWidth}p浏览器哪个好x` };
this.marquee = true;
this.container前端技能Width = cont运动完多久能够洗澡ai公积金nerWidth;
this.scrollerWidth = s枸杞crollerW浏览器怎样翻开网站idth + 2 * paddingWid运动的利益th; // 修正
this.currentTranslateX =宫颈癌前期症状 paddingWidth - 2; // 修正
th前端is运动品市场大变局.processMarq前端学什么uee();
}
});
});
}
  • 这儿新增了一个isCloneBefore的标志,将会用来核算浏览器前史记载设置clone元素的偏前端训练安排宫颈癌量,代表着clogithup官网ne元素是否在原元素的前面,这儿clo前端和后端的差异ne元素的位移将完全运动品牌依赖与原前端技能元素,详细逻辑将运动giti完多久能够洗澡会在后边提及
  • 其他,考虑到轮播中,原元素以及clone元素间需求略微别离隔,以更好差异一组数公积金据,咱们在这儿设置了一个padgitidin宫颈癌前期症状g
  • 由于额定设置了paddi浏览器怎样翻开链接ng,在获取真实元素宽度之前,需求将padding重置,并在重置后等候一个nexttick,才调获取到实践的元素宽度
  • pagoogledding款式的运浏览器怎样翻开网站用:
<div class="horizontal-scroller" ref="mgitlabyContainer">
<div
class="__scroller-p龚俊anel"
ref="myScroller"
:浏览器怎样翻开链接style="{ ...paddingStyle, ...positionStyle }Go"
>
<slot>浏览器翻开网页显现不了图片</slot&枸杞gt;
</digiteev>
<div
class="__scroller-panel-clone"
ref="mySc狗狗币r运动鞋品牌排行榜ollerClone"
:style="{ ...pad浏览器翻开网页闪现不了图片dgitlabingStyle, ...p浏览器怎样翻开链接ositionStyleClone }前端和后端的差异"
>
<slot></slot>
</div>
</龚俊div>
  • 回到clone元素,浏览器前浏览器前史记载设置史上的痕迹在哪里在核算其偏移量之前运动,咱们先剖析一下工商银行clone元素和原元素的对前端学什么应联络github是干什么的商银行客服电话,由于运动员可翻滚的时分,元素的头尾不行能一起在容器可视区域内(元素需比容器宽),一起考虑clone元素方位,所以元素方位运动健康总结有以下四种场景gitee
    A. 原元素的头部运动健康在可视规划里,则clone元素的尾部也在可视规划里,且clone元素在原元素前面
    B. 原元素的尾部在可视规Git划里运动鞋品牌排行榜,则clonegithub元素的运动品牌头部也在可视规划里,且浏览githup官网器下载clone元素在原元素后边
    C. 可视规划只需原元素
    D. 可视前端工程师规划只需clon前端面试题e元素
  • 当元素从右往左翻滚的时分,方位改动的次第是C -> B -> D -> A,由于元素处在C和D这四种运动鞋动健康状况的时分,原元素与前端开发clone元素的前后次第是随意浏览器前史记载设置的,都不影响展示,运动鞋那么咱们能够假定C状况时,clone浏览器翻开网页闪现不了图片元素在原元素后边,D状况的时gigithub中文官网网页thub分,clone元素在原元素前面,总结如下:
    A. 原元素的头部在可视规划里,则clo前端开发是干什么的ne元素的尾github是干什么的部也在可视规划里,且clone元素在原元素前面
    Bgitee. 原元素的尾部在可视规划里,则clone元素的头部也在可视规划里,且clone元素在原github中文官网网页元素后边
    C. 可视规划只需原元素,clone元素在原元素后边
    D. 可视规划只需cl运动完多久能够洗澡one元浏览器翻开网页显现不了图片素,clone元素在原元素前面git教程

结束一个具有拖拽功用的跑马灯

  • 这样处github是干什么的理的利益是C到B,以及D到A,这两段方位的改动,无需改动cl运动品牌运动鞋品牌排行榜排行榜one元素以及原元素的方位联络,故方位会发生改动的临公积金界点是:
    • B到D,或D到B
    • A到C,或C到A
  • 据此咱们能够写出之前提及的isNeedReset办法:
isNeedR浏览器前史上的痕迹在哪里eset(ste前端技能p, onMarquee =浏览器怎样翻开链接 false) {
const newCurrentX = o浏览器前史上的痕迹在哪里nMarquee前端开发
? this.currentTranslateX + step
: this.startTranslateX + step;
if (this运动健康.currentTra前端技能ns浏览器哪个好la前端训练安排teX < 0 && n前端开发是干什么的ewCur工商银行客服电话rentX >= 0) {
// 从A到C, clone不行见,挪git指令到原型后边
console.log(1);
this.currentTranslateX = newCurrentX;
this.isCloneBeofre = fals前端开发需肄业什么e;
return true;
}
if (this.curre浏览器前史记载设置ntTranslateX > 0 && newCugitlabrrentX <= 0) {
// 从C到A, clone可见运动,挪到原型前面
console.loggithub是干什么的(2);
this.currentT前端开发是前端面试题干什么的ragithub永久回家地浏览器约束拜访网站nslateX = newCurrentX;
this.isC前端训练安排loneBeofre运动品牌 = true;
return tru运动e;
}
if (
this.cur运动健康rentTransl工商银行客服电话ateX < t巩立姣his.scgithub永久回家地址rollerWidth &am浏览器查找前史在哪p;&
ne运动完多久能够洗澡wCurrentX >= this.scrollerWidth
) {
// 从B到D,原型不行见,挪到clone后边
console.logithub中文官网网页g(3);
this.curre运动完多久能够洗澡ntTranslateX = newCurrent运动X - this.scrollerWidth - this.scrollerWi运动完多久能够洗澡dth;github永久回家地址
this.isCloneBeofre = true;
retugit教程rn true;
}
if (
this.currentTranslGoateX >前端开发是干什么的 -this.scrollerWidth &&
newC狗狗币urregitlabntX <= -this.s狗狗币工商银行crollerWidth
)浏览器前史记载设置 {公积龚俊
/前端开发需肄业什前端/ 从D到B,原型可见,挪到clone前运动鞋面
console.log(4);
this运动会.currentTranslateX = this.scrollerWidth - (-this.scrollerWidth - newCurr前端训练安排git教程entX);
this.isCloneBeofre = fals浏览器怎样翻开链接e;
return true;
}
return false;
}
  • onMagithub永久回前端和后端的差异家地址rqu浏览器ee是用来差异当时是手动拖动仍是是主动翻滚状况的,先假定ongitlabMagithub中文官网网页rquee都是trugitie,则经过比照改动前后githup官网的currentTranslateX,github是干什么的能够差异出四种临界状况,并设置对应的isCloneBeofre标志
  • 在B到D以及D到B的情狗狗币况改动时巩立姣,由于浏览器怎样翻开链接github是干什么的需求移动原元素,需求从头核算新的currentTran运动会运动完多久能够洗澡sl运动ateX,移动的间隔是两个元素宽度(即 scrollerWidth x 2)
  • 知道了clon前端学什么e元素和原元素的前后联络后,就能够核算clone元素的位移(currentTranslateXClone)了,clongithub中文官网网页e元素运动的优点和原元素的位移浏览器前史记载为何不能删误差是一个元素宽度(即 scrollerWidth)运动品牌排行榜
computed: {
currentTranslateXClone() {
i浏览器怎样翻开链接f (this.isCloneBeofre) {
return this.curgit指令ren运动的优点tTranslateX + this.scrollerWidth;
}
return this前端结构.currentTranslateX - this.s运动的优点crollerWidth;
}
}
  • 到这儿,咱们就结束了一个可循环轮播的跑马灯,接下来咱们需求考虑的运动品牌浏览器前史记载设置拖拽的逻辑

接触拖动

  • 触发的区域为整个容器,故在容器上面加上监听
<div
c浏览器前史记载为何不能删lass="hgitiori浏览器下载z前端开发ontal-scroller"
ref="my运动健康Container"
@tou运动的利益chstart="onS运动会tart"
@touchend="onEnd"
@touchmove.prevent="o前端训练安排nMove"
@touchcancel="onE前端nd"
@mousedown="onStart"
@mousemove.pre前端开发vent="onMove"
@mouseup="onEnd"
@mogiteeusecancel="onEnd"
@mouseleave="onEnd浏览器翻开网页闪现不了图片"
>
<!-- 省前端掉 --!>
</div>
  • 一起接触的时分,连续翻滚
onStart(e)浏览器 {
if (!this.marquee) return; // 没有跑马灯效果时拖动无效
const point = e.t前端开发需求学什么ouches ? e.touches[0] :前端 e;
this前端工商银行开发.startX = point.pageX; /浏览器查找前史在哪/ 点击的方位
this.startTranslateX =git指令 this.currentTranslateX; // 点击时运动鞋的位移
this.stop = t前端学什么rue; // 暂时没有效果,仅仅是个标志,代表此时暂停,实前端学什么在的连续翻滚是下面的办法
this.stopMarquee(运动品商场大变局);
}
s运动品牌排行榜topM浏览器前史上的痕迹在哪里ar浏览器翻开网页闪现不了图片quee() {
clgithup官网earTimeout(前端面试题this.t浏览器前史记载为何不能删immer巩立姣);
this.timmer = null浏览器前史上的痕迹在哪里;
}
  • 由于拖动是一个宫颈癌前期症状继续的进程,而且或许来回浏览器哪个好拖动,所以拖动的时分需求点击的方位,以及初始位移,在onMove办法中,结合这两个变量以及当时接触点方位来核算位移值:
onMov龚俊e(e) {
if (this.gestureT工商银前端框架immer || !this.marquee) return;
const poGitin前端技能git指令t = e.touches ? e.浏览器约束拜访网站touches[0] : e;
const diffX = Ma前端学什么th.round(this.startX - point.pageX); // 小数会影响烘托功率
if (!this.isNeedReset(diffX)) {
this.currentTr运动品牌github中文官网网页anslateX = this.startTransl浏览器前史上的痕迹在哪里ateX + diffX;
} else {
thgi巩立姣tiis.startTranslateX = this.currentTranslateX;
this.startX = point.pag浏览器哪个好eX;
}
this.gestureTim运动品市场大变局mer = setTimeougithub是干什么的t(() => {
thi浏览器前史记载为何不能删s.ggit教程estureTimmer = null;
},github永久回家地址 20);
}
  • 拖动进程中,加了节省(gestureTimmer),每20ms才能够触发一次
  • 前端开发需求学什么算start和move之间的位移宫颈癌前期症状,加上start时记载的s浏览器查找前史在哪tartTranslateX,便是需求更新的位移值gitee
  • 回到isNeedReset中能够看到,运动品市场大变局端学什么但onMarquee是false的时分,下一个位移值也是按上面的办法核算的,但与主动翻滚时不同的是,这儿判别重置方位了之后,需求从头设置当时的startTranslateX以及startX,这是由于重置方位后,位gitlab公积金移发生了改动,需求按当时接触前端和后端的差异点坐标改写这两个值,后续的核算才前端学什么精确
  • 终究接触结束的时分重启翻滚
onEnd() {
if (!this.marquee) return枸杞;
this.sto浏览器查找前史在哪p = false;
this.processMarquee();
}
  • 留心,这几个办法都是只需marquee为true,也便是最开始判别元素宽度大于容器时,才会实运动会行,也便是当容器宽度比元素宽度大时,拖动运动员是无效的git教前端开发
  • 终究补偿一下初始化办法中的resetTi运动品商场大变局mmer,也很简略,便是把上述提到的翻滚定时器,以及拖动定时器清空
resetTimmer() {
clearTimegithup官网out(this.timmer);
clearTimeout(this.gestureTimmer);
this.timmer = null;
thgiteeis.gestureTimmer =枸杞 null;
}

考虑多言语的状况

  • 上述首要结束了满意从左运动会往右阅览习气的跑马灯,而关于从运动品商场大变局右往左阅览的言语,还需求满意,元素从右往左摆放,跑马灯从左往右主动google移动
  • 由于此处,容器中是以flex款式进行布局的,所以只需求在body中加上di前端开发需肄业什么rection公积金: rtl浏览器哪个好可让容前端框架器内元素从右往左摆放,一起由于cl前端技能one元Go素选用的是必定定位,在运动会从右往左阅览习气的言语中,需求将定位left: 0改为right: 0,才调使cl宫崎骏one元素和原元前端和后端的差异素在初始状况时是git指令堆叠的
body {
direction: rtl;
}
.__sc浏览器翻浏览器前史记载设置开网页闪现不了图片roller-panel-clone { // 新增
position: absolute;
top: 0;
righGitt:前端学什么 0;
}
  • 接下来需求改动的是运动方向,即变量pos宫崎骏itionStylepositionS工商银行tyleClone,咱们添加一个浏览器怎样翻开链接变量right用来github中文官网网页标识当时多言语的阅览方浏览器查找前史在哪向,当right为true的时分,咱们需求将元素的运动方向反巩立姣过来,即positionStylepositionStyleClone中的translate方向要相反,如下:
co前端工程师mputed: { // 新增
positionStyle() {
const translat前端eX = this.right运动品牌览器翻开网页运动闪现不了图片 ? this.currentTransl运动员ateX : -this前端.currentTranslateX;
return { t公积金ransf狗狗币orm:github永久回家地址 `translateX(${translateX}px)` };
},
positionStyleClone() {前端面试题端结构
c宫颈癌onst translateX = this.right ? tgithub永久回家地址his.currentTranslateX浏览器怎样翻开网站Clone : -前端开发是干什浏览器翻开网页显现不了图片么的this.cu前端工程浏览器下载rrentTransl宫颈癌前期症状ateXClone;
r运动品牌eturn { trgitlabansfo前端和后端的差异rm: `translateX(${translateX}px)` };浏览器约束拜访网站
}宫颈癌前期症状,
}
  • 改动了运前端动方向后,主动翻滚gitee部分的运动就现已结束了,跟着currgithub永久回家地址entTranslateX的添加,元素现在git指令会从左往右移动
  • 但会发现接触拖动的运动会反前端训练安排过来,即当用户从左往右拖动的时分,元前端训运动健康练安排素会从右github永久回家地址往左运动宫颈癌前期症状,这是由于拖枸杞动的位移量是经过接触屏幕进程中接触点的坐标位移核算出来的,与主动翻滚时githu运动完多久能够洗澡b中文官网网页的位移量1含义不同,拖动浏览器下载的位移核算量在从左git指令前端面试题右语境以及从右往左语境中是相同的,不会由于语境而改动,而主动翻滚的1在不同语境中,代表了不同的方向,如在从右往左的语境中,代表向右移动一个px浏览器下载
  • 所以终究咱们需求改动的是接触拖动运动员部分的位移量核算办法,而改动的办法为取其负值即可,这是由于不同语境中positionStyle的取值办法是相反的,从左往右的语境中,currentTranslateX的添加会浏览器哪个好使元素运动完多久能够洗澡向左运动,而从右往左的语境中,currentTranslateX的添加会使浏览器前史记载设置元素向右运动,所以若想元运动鞋素运动方向与接触拖动方向相同,则核算坐标改动diffX需求取相反值,即
onMov前端技能e(e浏览器前史上的痕迹在哪里) {
if (this运动品商场大变局.gestureTimmer || !this.marqueGite) return;
const point = e.touches ? e.touc前端开发需求学什么hes[0] : e;
let diffX = Math.round(this.sta前端开发需肄业什么rtX - point.pageX);
if (this.right) digitiffX = -diffX;
if (!this.isNeedReset(diffX)) {
this.currentTrangithup官网slateX = this.startTr浏览器前史上的痕迹在哪里anslateX + diffX;
} else {
this.startTranslateX = this.前端currentgithubTranslateX;
this.startX = point.pageX;
}
this.gestureTimmer = setTimeout(() => {
this.gestureTimmer = null;
}, 20);浏览器前史记载为何不能删
}
  • 这样,一个宫崎骏满意不同阅览习气的循环轮播跑马灯就结束了,一起其也支撑拖拽效果

总结

市面上其实有许多现成的,功用更强壮的跑马灯可供挑选,但经过浏览器前史记载为何不能删自己结束这样一个功前端和后端的差异用,能够帮助自己更好地了解其他东西的内部结束逻辑。而关于此类问题,往往需求将杂乱的giti问题别离成简略工商银行客服电话的单个小问题,如剖析原元素以及clone元素之间的方位联络,来将一个杂乱的场景分红四个详细的临界浏览器哪个好点,而后边的多言语结束部分,也是github永久回家地址将详细完Go毕分为了轮播,以及拖拽两种景象,前端开发这种思想办法才是真实需求把握的。

欢迎咱们留言谈论,祝工作顺利、日子愉快!

我是bigo前端,下期见。

发表评论

提供最优质的资源集合

立即查看 了解详情