vue图片动画上下跳动_vue中如何实现评论列表上移下移的动画效果?

本文探讨如何使用Vue实现评论列表的上下移动动画效果,类似于jQuery中的操作。作者分享了jQuery实现的代码,并提出了在Vue中遇到的问题,即如何在不依赖显示隐藏的动画方式下实现元素位置的动态变化。目前Vue代码改写了一半,期待找到解决方案。
摘要由CSDN通过智能技术生成

想实现的效果是,比如点击第二条评论的上移后,第二条评论就会运动到第一条评论的位置,同时第一条评论也会运动到第二条评论的位置。

这个demo之前是用jquery写的,最近学完vue的动画,想用vue来实现一下。但发现vue里的动画貌似都是显示隐藏式的动画。比如点击发表评论或淡入淡出等等。

想过要操作class,但这个demo里的每个li的的不同的top值我是在行间像下面这样设置的,实在想不出来怎么动态操作其改变。

:style='{top:index*35+"px",backgroundColor:bgArr[index]}'

我想知道用vue如何实现点击上移后实现评论的运动。

先附近上我用jquery写的代码供参考:

/*清零开始*/

*{margin: 0;padding: 0;}

body{background-color: #fff;font-size: 13px;color: #333;font-family: "微软雅黑";}

a{text-decoration: none;color: #909090;}

ul{list-style: none;}

ul{

width: 200px;

height: 175px;

margin:0 auto;

border: 3px solid #000;

position: relative;

}

ul li{

margin-bottom: 10px;

border:1px solid #ccc;

position: absolute;

}

ul li span{

margin-right: 60px;

}

  • 第一条评论

  • 第二条评论

  • 第三条评论

  • 第四条评论

  • 第五条评论

var bgArr = ['skyblue','tomato','YellowGreen','PaleGreen','Darkorange'];

// 给每个li设置不同的背景色

pos();

function pos(){

$.each($('li'), function (index, value){

$(value).css({

top: index * 35,

backgroundColor: bgArr[index % bgArr.length]

})

})

}

var key = true;

// 点击上移按钮,让当前评论(运动到前一条评论的前面+节点插入到前一条评论的前面)

$('li>input[value="上移"]').click(function (){

if(key){

key = false;

var $this = $(this);//解决动画回调里的this指向问题。

var $curLi = $this.parent();//当前评论

var $firstLi = $this.parents('ul').children().first();//第一条评论

var $lastLi = $this.parents('ul').children().last();//最后一条评论

var $prevLi = $this.parent().prev();//前一条评论

var $nextLi = $this.parent().next();//后一条评论

var $otherLis = $this.parent().siblings();

if($prevLi.length != 0){// 当前评论非第一条评论

// 让当前评论运动到前面评论的位置

$curLi.animate({

top: $prevLi.position().top

},function (){

//把当前评论插入到前面那条评论的前面

$prevLi.before($curLi);

key = true;

})

// 让前面评论运动到当前评论的位置

$prevLi.animate({

top: $curLi.position().top

})

}else{// 当前评论为第一条评论

// 当前评论运动到最后

$curLi.animate({

top: $lastLi.position().top

},500,function (){

// 运动结束后,节点位置随之改变

$('ul').append($this.parent());

key = true;

});

// 其他评论向上移一格

$.each($otherLis,function (index,value){

$(value).animate({top:index*35},500);

});

}

}

})

$('li>input[value="下移"]').click(function (){

if(key){

key = false;

var $this = $(this);//解决动画回调里的this指向问题。

var $curLi = $this.parent();//当前评论

var $firstLi = $this.parents('ul').children().first();//第一条评论

var $lastLi = $this.parents('ul').children().last();//最后一条评论

var $prevLi = $this.parent().prev();//前一条评论

var $nextLi = $this.parent().next();//后一条评论

var $otherLis = $this.parent().siblings();

if($nextLi.length != 0){

$curLi.animate({

top: $nextLi.position().top

},function (){

key = true;

$nextLi.after($curLi);

})

$nextLi.animate({

top: $curLi.position().top

})

}else{

// 当前评论运动到最前

$curLi.animate({

top: $firstLi.position().top

},500,function (){

// 运动结束后,节点位置随之改变

$('ul').prepend($curLi);

key = true;

});

// 其他评论向下移一格

$.each($otherLis,function (index,value){

$(value).animate({top:(index+1)*35},500);

});

}

}

})

下面是我用vue对上面的jquery代码改写到一半的代码

/*清零开始*/

*{margin: 0;padding: 0;}

body{background-color: #fff;font-size: 13px;color: #333;font-family: "微软雅黑";}

a{text-decoration: none;color: #909090;}

ul{list-style: none;}

ul{

width: 200px;

height: 175px;

margin:0 auto;

border: 3px solid #000;

position: relative;

}

ul li{

margin-bottom: 10px;

border:1px solid #ccc;

position: absolute;

}

ul li span{margin-right: 60px;}

v-for="(item,index) in textArr"

:key="item.id"

:style='{top:index*35+"px",backgroundColor:bgArr[index]}'

>

{{item.msg}}

var vm = new Vue({

el:"#app",

data:{

textArr:[

{id:1,msg:"第一条评论"},

{id:2,msg:"第二条评论"},

{id:3,msg:"第三条评论"},

{id:4,msg:"第四条评论"},

{id:5,msg:"第五条评论"}

],

bgArr:["skyblue",'tomato','YellowGreen','PaleGreen','Darkorange']

},

methods:{

}

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值