用小程序做一个类似于苹果AssistiveTouch功能

news/2024/12/1 9:37:08/

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

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

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

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

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

项目样图

项目最开始的时候
项目为播放的状态
项目为滑动停止的专题

四、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'})}}})

http://www.ppmy.cn/news/442073.html

相关文章

【微信小程序开发笔记】--苹果手机的悬浮按钮居中问题

小程序开发笔记&#xff08;二&#xff09;–苹果手机的悬浮按钮居中问题 记录小程序开发过程中遇到的那些问题 先看效果图 页面很简单&#xff0c;上面两个输入框&#xff0c;下方一个按钮&#xff0c;输入框分别是textarea和input&#xff0c;按钮在这里我做成悬浮状态&#…

模仿苹果虚拟悬浮按钮(自动靠边、可浮现任何界面上)

由于最近小蔡的手机音量键坏了&#xff0c;调节音量有点麻烦&#xff0c;突发奇想&#xff0c;想自己实现一个快捷键来调节音量&#xff0c;总结出一般本章&#xff0c;分享给大家。 首先 按钮要想实现悬浮在任何界面&#xff0c;那么必须是要写在服务里面的&#xff0c;使用定…

android与ios返回按钮,Android与ios的系统交互模式差异

一、导航逻辑的差异 大家都知道ios没有实体返回键&#xff0c;所有返回都是通过导航栏的back按钮(图1)来完成。所以&#xff0c;ios应用大多数情况下&#xff0c;只提供单一路径&#xff0c;无论什么样的程序&#xff0c;都只有一个窗口&#xff0c;这个窗口用于放置程序的内容…

快应用之--模仿苹果手机屏幕的虚拟键,可以在手机上随意拖动

需求&#xff1a;多入口需悬挂在页面中&#xff0c;用户可以随意拖动&#xff0c;方便在页面上的多操作&#xff0c;如下图 思路&#xff1a;按钮拖动分为三步骤&#xff0c;拖动开始&#xff08;ontouchstart&#xff09;、拖动中(ontouchmove)、拖动结束(ontouchend) 在拖动…

Qt 之 自定义按钮 在鼠标 悬浮、按下、松开后的效果

Qt技术学习班开始了&#xff0c;更多精彩、好玩的内容等着你&#xff0c;赶紧报名吧! 群号&#xff1a;655815739 #一、简述 在上一篇 Qt 之 去除窗口部件被选中后的焦点虚线框 中&#xff0c;我们为了去除焦点虚线框&#xff0c;给按钮的样式加上了如下的样式。 QPushButton…

微信小程序之可拖动悬浮按钮的实现

微信小程序之可拖动悬浮按钮的实现 什么都不说先看效果图 下面上代码 wxml <button catchtouchmove"buttonMove" catchtouchstart"buttonStart" catchtouchend"buttonEnd" style"top:{{buttonTop}}px;left:{{buttonLeft}}px;width: 5…

vue 实现 浮动图标 仿iphone悬浮球

同级目录引用组件 ./ 上一级目录&#xff0c;两个点 …/ 原文应用案例 <!-- 给定一个初始位置position&#xff0c;插槽中填写想滑动的部分 --> <xuanfuqiu :position"position"><d-add-button click"addPigFarm" add-item"猪场&quo…

html给列表中每一行设置背景,教程丨如何设置内容的背景

原标题:教程丨如何设置内容的背景 秀米收到的投稿中,有好多非常会利用背景设计版面的文章,而他们也只是用了一张适合的图片设置成背景图,搭配文字内容,在阅读过程中视觉效果就会更立体,也就会觉得眼前一亮! 为能让更多小伙伴会利用布局制作背景,在本期教程中,我们将再…