国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

微信小程序側邊欄滑動特效(左右滑動)

2019-11-19 17:47:54
字體:
來源:轉載
供稿:網友

側邊欄滑動是很常見的功能,但是小程序出來不久,很多特效還沒有成熟案例,只能原生重寫,所以今天為大家帶來4個漂亮的側邊欄特效~~

側邊欄特效一

先看效果:

wxml:

<!--page/one/index.wxml--> <view class="page">   <view class="page-bottom">     <view class="page-content">       <view class="wc">         <text>第一個item1</text>       </view>       <view class="wc">         <text>第二個item2</text>       </view>       <view class="wc">         <text>第三個item3</text>       </view>       <view class="wc">         <text>第四個item4</text>       </view>     </view>   </view>   <view class="page-top {{open ? 'c-state1' : ''}}">     <image bindtap="tap_ch" src="../../images/btn.png"></image>   </view> </view> 

搭建上下兩層界面

寫一段css3的右移動畫樣式 .c-state1

wxss:

.c-state1{  transform: rotate(0deg) scale(1) translate(75%,0%);   -webkit-transform: rotate(0deg) scale(1) translate(75%,0%);  } 

點擊按鈕,添加樣式.c-state1

再點擊,移除樣式.c-state1

側邊欄特效二

先看效果:

滑動且屏幕縮小

wxss:

.c-state2{  transform: rotate(0deg) scale(.8) translate(75%,0%);   -webkit-transform: rotate(0deg) scale(.8) translate(75%,0%);  } .c-state2{  transform: rotate(0deg) scale(.8) translate(75%,0%);   -webkit-transform: rotate(0deg) scale(.8) translate(75%,0%);  } 

wxml代碼和特效一相同

.c-state2與.c-state1唯一不同在于scale值

js代碼:

Page({  data:{   open : false  },  tap_ch: function(e){   if(this.data.open){    this.setData({     open : false    });   }else{    this.setData({     open : true    });   }  } }) 
Page({  data:{   open : false  },  tap_ch: function(e){   if(this.data.open){    this.setData({     open : false    });   }else{    this.setData({     open : true    });   }  } }) 

代碼很簡單,就是通過open值控制view對類的選取

側邊欄特效三

先看效果:

與特效二不同在于,不僅可以點擊按鈕觸發側滑,還可以拖動主界面觸發側滑特效

js代碼:

tap_start:function(e){   // touchstart事件   this.data.mark = this.data.newmark = e.touches[0].pageX; }, tap_drag: function(e){   // touchmove事件   /*    * 手指從左向右移動    * @newmark是指移動的最新點的x軸坐標 , @mark是指原點x軸坐標    */   this.data.newmark = e.touches[0].pageX;   if(this.data.mark < this.data.newmark){    this.istoright = true;   }   /*    * 手指從右向左移動    * @newmark是指移動的最新點的x軸坐標 , @mark是指原點x軸坐標    */   if(this.data.mark > this.data.newmark){    this.istoright = false;   }   this.data.mark = this.data.newmark; }, tap_end: function(e){   // touchend事件   this.data.mark = 0;   this.data.newmark = 0;   if(this.istoright){    this.setData({     open : true    });   }else{    this.setData({     open : false    });   } } 
tap_start:function(e){   // touchstart事件   this.data.mark = this.data.newmark = e.touches[0].pageX; }, tap_drag: function(e){   // touchmove事件   /*    * 手指從左向右移動    * @newmark是指移動的最新點的x軸坐標 , @mark是指原點x軸坐標    */   this.data.newmark = e.touches[0].pageX;   if(this.data.mark < this.data.newmark){    this.istoright = true;   }   /*    * 手指從右向左移動    * @newmark是指移動的最新點的x軸坐標 , @mark是指原點x軸坐標    */   if(this.data.mark > this.data.newmark){    this.istoright = false;   }   this.data.mark = this.data.newmark; }, tap_end: function(e){   // touchend事件   this.data.mark = 0;   this.data.newmark = 0;   if(this.istoright){    this.setData({     open : true    });   }else{    this.setData({     open : false    });   } } 

tap_drag中判斷手勢是從左到右,或者從右向左

tap_end表示手勢抬起,如果是從左到右,則觸發從左到右的滑動

tap_end表示手勢抬起,如果是從右到左,則觸發從右到左的滑動

側邊欄特效四

先看效果:

此特效會隨著手勢滑動而滑動;如果松手時候不到屏寬的20%,那么會自動還原;如果松手時候超過20%,那么會向右滑動~~

此效果很復雜,我們將其拆分為多個步驟來分析~

1)屏幕隨著手勢動而動

先看效果:

JS代碼:

this.setData({   translate: 'transform: translateX('+(this.data.newmark - this.data.startmark)+'px)' }) [javascript] view plain copy 在CODE上查看代碼片派生到我的代碼片this.setData({   translate: 'transform: translateX('+(this.data.newmark - this.data.startmark)+'px)' })

這句是關鍵,很好理解,就是用js控制淺藍色屏幕translateX的值,這樣手勢不斷左右滑動,屏幕也就跟著手勢慢慢滑動了。

2)彈動效果

先看效果:

拖動屏幕不足屏寬20%,還原默認狀態;超過20%,滑動到最右側~~

JS代碼:

if(x < 20%){    this.setData({      translate: 'transform: translateX(0px)'    }) }else{    this.setData({      translate: 'transform: translateX('+this.data.windowWidth*0.75+'px)'    }) } [javascript] view plain copy 在CODE上查看代碼片派生到我的代碼片if(x < 20%){    this.setData({      translate: 'transform: translateX(0px)'    }) }else{    this.setData({      translate: 'transform: translateX('+this.data.windowWidth*0.75+'px)'    }) }

小于20%,讓translateX(0px)則屏幕還原;大于20%,tanslateX(75%)則屏幕右移到屏幕的75%處。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南安市| 巩义市| 兴山县| 阿合奇县| 伊春市| 肇庆市| 武宁县| 汉沽区| 犍为县| 宣武区| 鄱阳县| 盐津县| 锡林郭勒盟| 山东省| 寻乌县| 大埔县| 龙南县| 平泉县| 棋牌| 洛扎县| 松潘县| 陆良县| 井研县| 许昌县| 丹东市| 梅河口市| 绵阳市| 怀宁县| 呈贡县| 涞源县| 绍兴县| 额尔古纳市| 从化市| 江孜县| 柘荣县| 嵊泗县| 静宁县| 中牟县| 南澳县| 阳山县| 肥乡县|