vue自动刷新组件,vue 组件 slot

  vue自动刷新组件,vue 组件 slot

  本文主要介绍了vue下拉刷新组件的开发以及slot使用的详细说明。本文通过示例代码为您详细介绍,对您的学习或工作有一定的参考价值。有需要的朋友可以参考一下。

  “下拉刷新”和“上滑加载更多”的功能在前端项目中非常重要,尤其是在移动项目中。这里笔者从我之前做过的vue项目中的“眨眼”功能来讨论“下拉刷新”组件的开发:

  

正式开篇

  在前端项目的components文件夹下新建一个pullRefreshView文件夹,新建一个component index.vue:(代表“整屏”,通过slot插入页面其他内容而不是传统的设置蒙版图层触发)

  首先,您需要编写下拉刷新组件的模板。这里用的是slot,代码如下:

  模板

  div class= pullRefreshView @ touch move= touch move @ touch start= touch start @ touch end= touch end

  div ref= circle icon class= circle-icon

  div ref= circleIconInner class= circle-icon-inner /div

  /div

  插槽/插槽

  /div

  /模板

  在上面的代码中,最外层使用一个div来包装,它被用作事件绑定的容器。同时,一个新的div。创建圆形图标的圆形图标。我们将这种图标样式设置在屏幕之外,以实现隐藏效果。代码如下:

  风格。圆形图标{

  位置:绝对;

  左:0.625雷姆;

  top:-1.875雷姆;

  }。圆形-图标-内部{

  宽度:1.5625雷姆;

  身高:1.5625雷姆;

  背景-图片:url(“圈图片地址”);

  背景-尺寸:封面;

  }。圆形-旋转{

  动画:颛顼. 8s线性无限;

  }

  @关键帧颛顼{

  0%{}

  25%{}

  50%{}

  75%{}

  100%{}

  }

  /风格

  刷新组件的UI基本写好了,接下来就是绑定事件了。通过上面的分析和我们上一章开发图片查看器的原理,我们需要使用移动端的touchstart、touchmove和touchend事件来实现下拉刷新的效果。

  首先,收听touchstart事件:

  touchstart(evt){

  this . pull refresh . dragstart=evt . target touches[0]。客户

  这个。$ refs . circle icon . style . webkittransition= none

  },

  在touchstart事件中,我们主要记录一些初始值,包括手指第一次接触屏幕时的位置,然后先隐藏圆形图标的动画效果。

  然后,监听touchmove事件:

  触摸移动(事件){

  if(this . pull refresh . dragstart===null){

  返回

  }

  let target=evt.targetTouches[0]

  //上滑为正,下拉为负。

  this . pull refresh . percentage=(this . pull refresh . dragstart-target . clienty)/window . screen . height

  let scroll top=document . document element . scroll top document . body . scroll top

  if(scrollTop===0){

  //this.pullRefresh是指数据中的pullRefresh对象(下图),evt是事件参数。

  if(this . pull refresh . percentage 0 evt . cancelable){

  evt.preventDefault()

  this . pull refresh . joinrefresh flag=true

  let translate y=-this . pull refresh . percentage * this . pull refresh . move count

  if(math . ABS(this . pull refresh . percentage)=this . pull refresh . drag threshold){

  让旋转=平移/30*360

  这个。$ refs . circle icon . style . webkittransform= translate 3d(0 translate y px,0) rotate( rotate deg)

  }

  }否则{

  if(this . pull refresh . joinrefresh flag===null){

  this . pull refresh . joinrefresh flag=false

  }

  }

  }否则{

  if(this . pull refresh . joinrefresh flag===null){

  this . pull refresh . joinrefresh flag=false

  }

  }

  },

  在touchmove事件中,我们主要做的是根据手指的移动量实时移动和旋转圆形图标。以下是一些确实需要解释的要点:

  当页面位于屏幕顶部并且手指被向下拖动时,我们的下拉刷新触发。这两个条件缺一不可。代码中我们用scrollTop==0和this.pullRefresh.percentage 0来判断。

  进入下拉刷新状态,此时手指一直向下拖动。第一,圆形icon.circleIcon会向下滚动旋转,当达到临界值时,只会原地旋转。

  如果手指向上拖动,圆形图标将向上滚动并旋转。

  直到手指离开屏幕,才触发下拉刷新,但圆形icon.circleIcon一直上下移动。

  监听触摸端事件:

  触摸端(evt){

  if(this . pull refresh . percentage===0){

  返回

  }

  if(math . ABS(this . pull refresh . percentage)this . pull refresh . drag threshold this . pull refresh . joinrefresh flag){

  这个。$emit(onRefresh )

  这个。$ refs . circleiconinner . class list . add( circle-rotate )

  setTimeout(()={

  这个。$ refs . circleiconinner . class list . remove( circle-rotate )

  这个。$ refs . circle icon . style . webkittransition= 330 ms

  这个。$ refs . circle icon . style . webkittransform= translate 3d(0,0,0) rotate(0deg)

  },700)

  }否则{

  if(this . pull refresh . joinrefresh flag){

  这个。$ refs . circle icon . style . webkittransition= 330 ms

  这个。$ refs . circle icon . style . webkittransform= translate 3d(0,0,0) rotate(0deg)

  }

  }

  this . pull refresh . joinrefresh flag=null

  this . pull refresh . dragstart=null

  this.pullRefresh.percentage=0

  }

  在touchend事件中,我们主要做一些动画操作。你可以看看代码中的注释。这里有一个描述:

  此时手指离开屏幕,位移达到临界值,也有进入下拉刷新的标志位,表示正在触发刷新。此时圆形图标原地旋转,并触发下拉刷新回调方法,延迟700ms后收起。

  当我们实现圆形图标的旋转和位移动画时,我们使用两个div。我们在touchmove的时候,主要是对外DIV进行移位和旋转,也就是ref=circleIcon。

  在touchend中,我们主要是在内部div中加入动画,即ref=circleIconInner。因为我们不能对一个div同时使用位移旋转和动画,这里有个技巧就是为父元素设置位移和旋转,当没有设置CSS动画样式时,它的子元素会随父元素一起生效。

  最后,我们来看看[数据]里有什么:

  data(){

  返回{

  pullRefresh:{

  DragStart:null,//开始抓取标志位

  百分比:0,//拖动量(百分比)

  DragThreshold:0.3,//临界值

  Move: 200,//位移系数,可以调整圆形图片图标的移动速率

  JoinRefreshFlag:null,//进入刷新状态的标志位(true)

  }

  }

  },

  添加:插槽

  为什么模板里有槽?

  插槽有三种形式:

  普通插槽

  命名插槽

  范围插槽

  也许我们通常使用电器的名称槽,但第一个也特别容易使用。3354只是因为它没有名字,所以包装在另一个组件中引用这个组件的所有东西都属于这个槽:

  假设my-component组件中有以下模板:

  差异

  H2我是子组件/h2

  Slot这句话只有在没有内容分发/slot的情况下才会出现

  /div

  父组件模板:

  差异

  H1这是父集合地点/h1。

  我的组件

  p这是一些初始内容/p

  p这是更多内容/p

  /我的组件

  /div

  最后会被渲染成这样:

  差异

  H1这是父集合地点/h1。

  差异

  H2我是子组件/h2

  p这是一些初始内容/p

  p这是更多内容/p

  /div

  /div

  所以我在这里做的是让“下拉动画”在调入“父组件”时更加自然,但不会增加一个文件的负担。

  关于vue下拉刷新组件的开发和slot使用的详细说明这篇文章到此为止。关于使用vue下拉刷新组件插槽的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: