本篇文章给大家带来的内容是关于小程序实现类似于苹果AssistiveTouch功能(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一、首先我先介绍一下,我们要做一个什么样的项目功能

项目功能就是一个音频点击播放,当点击为播放的状态时,一个音频的动图出现,而且是可以跟随着手指的滑动而滑动,而且,在滑动动图的时候,当前下的页面是不可以跟随着我的滑动而上下滚动,当停止滑动的时候,音频动图停靠在手机的左侧或者右侧,而当前下的页面是可以上下滚动的,功能介绍到此为止,下面我们说一下思路。

二、我们做这个功能,第二步就是要想思路

思路就是,利用微信中的滑动事件,外加控制css样式,来完成这个功能。

三、这是项目的ui图,废话不多说,直接撸代码。

项目样图

小程序实现类似于苹果AssistiveTouch功能(附代码)
小程序实现类似于苹果AssistiveTouch功能(附代码)

小程序实现类似于苹果AssistiveTouch功能(附代码)

四、index.wxml、index.wxss、index.js页面代码

*index.wxml页面*

<!-- 搜索 -->      <view class='home_srh'>         <view class='srh_box' bindtap='srhBox'>             <image class='srh_box_img' src='../../img/home_search.png'></image>             <view class='srh_box_text'>开心奶奶</view>         </view>     </view>      <!-- 音频分类 -->      <view class='home_ban'>          <!-- 轮播图 -->         <view class="page-section">         <swiper circular="true" previous-margin="44rpx" next-margin="44rpx">             <!-- <block wx:for="{{}}" wx:key=""> -->             <swiper-item>                 <view class="swiper-item">                     <audio src="http://img.tukuppt.com/preview_music/00/00/60/yulan-5b87c00c59d402663.mp3" id="myAudio" loop></audio>                     <view class='audio_box'>                         <button bindtap='audioPlay' wx:if="{{adply1}}" class='audio_play'>                             <image  src='../../img/home_adplay.png' ></image>                         </button>                         <button bindtap='audioPause' wx:if="{{adply2}}" class='audio_play'>                             <image  src='../../img/home_adstop.png' ></image>                         </button>                     </view>                     <view class='audio_next'>                         <image src='../../img/audio_next.png'></image>                     </view>                     <view class='audio_collect'>                         <button bindtap='audioColy' wx:if="{{adcol1}}" class='audio_coly'>                             <image src='../../img/audio_nocollect.png'></image>                         </button>                         <button bindtap='audioColn' wx:if="{{adcol2}}" class='audio_coly'>                             <image src='../../img/audio_collect.png'></image>                         </button>                     </view>                     <view class='audio_text'>开心奶奶——小小探险家</view>                 </view>             </swiper-item>             <swiper-item>                 <view class="swiper-item">                     <audio src="http://img.tukuppt.com/preview_music/00/00/60/yulan-5b87c00c59d402663.mp3" id="myAudio" loop></audio>                     <view class='audio_box'>                         <button bindtap='audioPlay' wx:if="{{adply1}}" class='audio_play'>                             <image  src='../../img/home_adplay.png' ></image>                         </button>                         <button bindtap='audioPause' wx:if="{{adply2}}" class='audio_play'>                             <image  src='../../img/home_adstop.png' ></image>                         </button>                     </view>                     <view class='audio_next'>                         <image src='../../img/audio_next.png'></image>                     </view>                     <view class='audio_collect'>                         <button bindtap='audioColy' wx:if="{{adcol1}}" class='audio_coly'>                             <image src='../../img/audio_nocollect.png'></image>                         </button>                         <button bindtap='audioColn' wx:if="{{adcol2}}" class='audio_coly'>                             <image src='../../img/audio_collect.png'></image>                         </button>                     </view>                     <view class='audio_text'>开心奶奶——小小探险家</view>                 </view>             </swiper-item>             <!-- </block> -->             </swiper>          </view> ----------  > 重点!!!!           <!-- 音频动图 -->         <view class='{{ home_back }}' catchtouchmove='true' >             <view class='audio_fre'  wx:if="{{ adFre }}" bindtouchmove="handletouchmove" bindtouchend="handletouchend" style = "top:{{top}}px; left: {{left}}px; right: {{right}}px">                 <image class='audio_fre1' src='../../img/audio_back.png'></image>                 <image class='audio_fre2' src='../../img/audio_fre.gif'></image>             </view>         </view>   ----------           <!-- 分类 -->         <view class='menu_ul'>             <view class='menu_li' id="0" bindtap='menuLi'>                 <image src='../../img/recom.png'></image>                 <view class='menu_text'>推荐故事</view>             </view>             <view class='menu_li' id="1" bindtap='menuLi'>                 <image src='../../img/boy_icon.png'></image>                 <view class='menu_text'>男孩</view>             </view>             <view class='menu_li' id="2" bindtap='menuLi'>                 <image src='../../img/girl_icon.png'></image>                 <view class='menu_text'>女孩</view>             </view>         </view>      </view>      <!-- 儿童故事 -->     <view class='child_story'>         <view class='story_ul' wx:if="{{curr_index == 0}}">             <view class='story_li' bindtap='storySec'>                 <view class='story_li_img'>                     <image class='story_li_img1' src='../../img/weekend-first.png'></image>                     <image class='story_li_img2' src='../../img/pay_icon.png'></image>                 </view>                 <view class='st_li_tit b'>童话故事里的小智慧</view>                 <view class='st_li_sec'>小智慧,大智慧</view>             </view>         </view>         <view class='story_ul' wx:if="{{curr_index == 1}}">             <view class='story_li' bindtap='storySec'>                 <view class='story_li_img'>                     <image class='story_li_img1' src='../../img/weekend-first.png'></image>                     <!-- <image class='story_li_img2' src='../../img/pay_icon.png'></image> -->                 </view>                 <view class='st_li_tit b'>童话故事里的小智慧</view>                 <view class='st_li_sec'>小智慧,大智慧</view>             </view>         </view>         <view class='story_ul' wx:if="{{curr_index == 2}}">             <view class='story_li' bindtap='storySec'>                 <view class='story_li_img'>                     <image class='story_li_img1' src='../../img/weekend-first.png'></image>                     <image class='story_li_img2' src='../../img/pay_icon.png'></image>                 </view>                 <view class='st_li_tit b'>童话故事里的小智慧</view>                 <view class='st_li_sec'>小智慧,大智慧</view>             </view>         </view>     </view>

*index.wxss样式*

/**index.wxss**/  .home_back1{     width: 100%; }  .home_back2{     position: fixed;     top: 0;     left: 0;     right: 0;     bottom: 0;     z-index: 10; }  /* 搜索 */ .home_srh {     width: 100%;     height: 74rpx;     padding-top: 20rpx;     background: #fff;      border-bottom: 1rpx solid #e8e8e8; }  .home_srh .srh_box {     width: 690rpx;     height: 54rpx;     margin: 0 auto;     box-shadow: 0 0 10rpx 2rpx #f1f1f1;     border-radius: 50rpx;     display: flex;     align-items: center; }  .home_srh .srh_box .srh_box_img {     width: 24rpx;     height: 26rpx;     display: inline-block;     margin-left: 32rpx;     margin-right: 20rpx; }  .home_srh .srh_box .srh_box_text {     font-size: 24rpx;     color: #999; }  /* 音频分类 */  /* banner图 */ .home_ban{     width: 100%;     height: 422rpx;     background: #fff;     padding-top: 18rpx; }  .home_ban .page-section{     width: 100%;     height: 258rpx;     position:relative;     z-index: 2; }  .home_ban .page-section .swiper-item{     width: 630rpx;     height: 258rpx;     margin: 0 auto;     position: relative;     display: block; }  .home_ban .page-section .swiper-item audio{     width: 630rpx;     height: 258rpx;     display: block;     background: #ccc;  }  .home_ban .page-section .swiper-item .audio_box {     width: 90rpx;     height: 90rpx;     position: absolute;     left: 50%;     top: 50%;     margin-left: -45rpx;     margin-top: -45rpx; }  .home_ban .page-section .swiper-item .audio_box .audio_play {     width: 90rpx;     height: 90rpx;     display: block;     background: rgba(0,0,0,0); }  .home_ban .page-section .swiper-item .audio_box .audio_play image{     width: 90rpx;     height: 90rpx;     display: block; }  .home_ban .page-section .swiper-item .audio_next {     width: 60rpx;     height: 60rpx;     position: absolute;     top: 50%;     margin-top: -30rpx;     right: 169rpx; }  .home_ban .page-section .swiper-item .audio_next image {     width: 60rpx;     height: 60rpx;     display: block; }  .home_ban .page-section .swiper-item .audio_collect {     width: 60rpx;     height: 60rpx;     position: absolute;     top: 50%;     margin-top: -30rpx;     right: 169rpx; }  .home_ban .page-section .swiper-item .audio_collect image {     width: 60rpx;     height: 60rpx;     display: block; }  .home_ban .page-section .swiper-item .audio_collect {     width: 60rpx;     height: 60rpx;     position: absolute;     top: 50%;     margin-top: -30rpx;     left: 169rpx; }  .home_ban .page-section .swiper-item .audio_collect .audio_coly {     width: 60rpx;     height: 60rpx;     display: block;     background: rgba(0,0,0,0); }  .home_ban .page-section .swiper-item .audio_collect .audio_coly image {     width: 60rpx;     height: 60rpx;     display: block; }  .home_ban .page-section .swiper-item .audio_text{     width: 100%;     font-size: 28rpx;     color: #fff;     text-align: center;     position: absolute;     bottom: 26rpx; }   /* 音频小白点 */  .audio_fre {     width: 108rpx;     height: 108rpx;     position: fixed;     z-index: 99; }  .audio_fre .audio_fre1 {     width: 104rpx;     height: 104rpx;     display: block;     border-radius: 100%;     border: 2rpx solid #fff; }  .audio_fre .audio_fre2 {     width: 60rpx;     height: 60rpx;     position: absolute;     top: 50%;     margin-top: -30rpx;     left: 50%;     margin-left: -30rpx; }  /* 菜单分类 */ .menu_ul {     width: 100%;     height: 164rpx; }  .menu_ul .menu_li {     width: 33.3%;     height: 164rpx;     float: left;     text-align: center; }  .menu_ul .menu_li:nth-child(1) image{     width: 78rpx;     height: 80rpx;     display: block;     margin: 0 auto;     margin-top: 23rpx; }   .menu_ul .menu_li:nth-child(2) image{     width: 74rpx;     height: 97rpx;     display: block;     margin: 0 auto;     margin-top: 8rpx; }  .menu_ul .menu_li:nth-child(3) image{     width: 73rpx;     height: 96rpx;     display: block;     margin: 0 auto;     margin-top: 8rpx; }  .menu_ul .menu_li .menu_text{     width: 100%;     text-align: center;     font-size: 24rpx;     color: #343434;     margin-top: 10rpx; }  /* 儿童故事 */ .child_story {     width: 100%;     margin-top: 8rpx;     background: #fff; }   .child_story .story_ul {     padding: 0 32rpx;     padding-top: 30rpx;     overflow: hidden; }  .child_story .story_ul .story_li {     width: 330rpx;     float: left;     margin-right: 26rpx;     margin-bottom: 30rpx; }  .child_story .story_ul .story_li:nth-child(2n) {     margin-right: 0; }  .child_story .story_ul .story_li .story_li_img {     width: 330rpx;     height: 210rpx;     border-radius: 14rpx;     position: relative;     overflow: hidden; }  .child_story .story_ul .story_li .story_li_img .story_li_img1{     width: 330rpx;     height: 210rpx;     display: block; }  .child_story .story_ul .story_li .story_li_img .story_li_img2{     width: 95rpx;     height: 32rpx;     display: block;     position: absolute;     top: 0;     left: 0; }  .child_story .story_ul .story_li .st_li_tit {     width: 90%;     font-size: 26rpx;     color: #212121;     margin-top: 18rpx;     padding: 0 5%;     overflow: hidden;     text-overflow: ellipsis;     white-space: nowrap;      letter-spacing: 0.4rpx; }  .child_story .story_ul .story_li .st_li_sec {     width: 90%;     font-size: 18rpx;     color: #999;     margin-top: 6rpx;     padding: 0 5%;     letter-spacing: 0.2rpx; }

*index.js页面*

//index.js var app = getApp(); Page({      /**      * 页面的初始数据      */     data: {          adply1: true,         adply2: false,         adcol1: true,         adcol2: false,         adFre: false,         funBun: false,         curr_index: 0,         screenHeight: 0,         screenWidth: 0,         top: 65,         left: 300,         right: 0,         home_back: 'home_back1'     },      /**      * 生命周期函数--监听页面加载      */     onLoad: function (options) {         //获取屏幕宽高         var that = this;         wx.getSystemInfo({             success: function (res) {                 console.log(res.windowWidth)//手机可用屏幕宽度                 console.log(res.windowHeight)//手机可用屏幕高度                 that.setData({                     screenHeight: res.windowHeight,                     screenWidth: res.windowWidth,                 });             }         });     },      /**      * 生命周期函数--监听页面初次渲染完成      */     onReady: function (e) {         let that = this;         that.audioCtx = wx.createAudioContext('myAudio')     },      /**      * 生命周期函数--监听页面显示      */     onShow: function () {      },      /**      * 生命周期函数--监听页面隐藏      */     onHide: function () {      },      /**      * 生命周期函数--监听页面卸载      */     onUnload: function () {      },      /**      * 页面相关事件处理函数--监听用户下拉动作      */     onPullDownRefresh: function () {      },      /**      * 页面上拉触底事件的处理函数      */     onReachBottom: function () {      },      /**      * 用户点击右上角分享      */     onShareAppMessage: function () {      },      /**      * 跳转搜索页面      */     srhBox: function () {         let that = this;         wx.navigateTo({             url: '../search/index',         })     },       /**      * 点击播放      */     audioPlay: function () {         var that = this;         that.audioCtx.play();         that.setData({             adply1: false,             adply2: true,             adFre: true,             // isScroll: that.data.isScroll         })     },      /**      * 点击暂停      */     audioPause: function () {         var that = this;         that.audioCtx.pause();         that.setData({             adply1: true,             adply2: false,             adFre: false,             // isScroll: that.data.isScroll         })     },        /**     * 点击收藏     */     audioColy: function () {         var that = this;         that.setData({             adcol1: false,             adcol2: true,         })     },      /**      * 点击未收藏      */     audioColn: function () {         var that = this;         that.setData({             adcol1: true,             adcol2: false,         })     },        /**      * 跳转故事详情      */      storySec: function () {         let that = this;         wx.navigateTo({             url: '../audio/index',         })     },      /**      * 点击切换      */      menuLi: function (e) {         let that = this;         // console.log (e);         let id = e.currentTarget.id;          that.setData({             curr_index: id         })     },      /**      * 音频小白点滑动      */      //滑动移动事件     handletouchmove: function (e) {         let that = this;         let clientX = e.touches[0].clientX;         let clientY = e.touches[0].clientY;         //屏幕边界判断         if (clientX < 20 || clientY < 20)             return;         if (clientX > that.data.screenWidth - 20)             return;         if (clientY > that.data.screenHeight - 20)             return;         that.setData({             left: e.touches[0].clientX - 20,             top: e.touches[0].clientY - 20,             right: e.touches[0].clientX - 20,             home_back: 'home_back2'         })      },      //滑动结束事件     handletouchend: function (e) {         let that = this;         if ( that.data.left < (that.data.screenWidth - 60) / 2 ) {             that.setData({                 left: 0,                 home_back: 'home_back1'             })         } else {             that.setData({                 left: that.data.screenWidth - 60,                 right: 0,                 home_back: 'home_back1'             })         }     }    })
标签
DT素材网

DT素材网

161

0

0

( 此人很懒并没有留下什么~~ )