365Tools
发布时间:2025-11-04 21:03:01
我将设计一个微信小程序界面,实现录像并截取图片的功能。这个界面需要简洁直观,同时符合微信小程序的UI设计规范。
使用微信小程序的camera组件进行录像
添加控制按钮开始/停止录像
实现截图功能,在录像过程中或结束后截取图片
展示截取的图片
html代码
<!-- pages/index/index.wxml -->
<view class="container">
<view class="title">录像与截图功能</view>
<!-- 相机组件 -->
<view class="camera-container">
<camera device-position="back" flash="off" class="camera" />
</view>
<!-- 控制按钮 -->
<view class="control-panel">
<button class="btn" bindtap="startRecord">开始录像</button>
<button class="btn" bindtap="stopRecord">停止录像</button>
<button class="btn" bindtap="takePhoto">截取图片</button>
</view>
<!-- 录像预览 -->
<view class="preview-section" wx:if="{{videoSrc}}">
<text class="section-title">录像预览</text>
<video src="{{videoSrc}}" controls class="video-preview"></video>
</view>
<!-- 截图预览 -->
<view class="preview-section" wx:if="{{photoSrc}}">
<text class="section-title">截图预览</text>
<image src="{{photoSrc}}" class="photo-preview"></image>
</view>
</view>
2. css 代码
/* pages/index/index.wxss */
.container {
padding: 20rpx;
display: flex;
flex-direction: column;
align-items: center;
}
.title {
font-size: 36rpx;
font-weight: bold;
margin-bottom: 30rpx;
text-align: center;
color: #333;
}
.camera-container {
width: 100%;
height: 500rpx;
margin-bottom: 30rpx;
border-radius: 16rpx;
overflow: hidden;
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
}
.camera {
width: 100%;
height: 100%;
}
.control-panel {
display: flex;
justify-content: space-around;
width: 100%;
margin-bottom: 40rpx;
}
.btn {
background-color: #07C160;
color: white;
border-radius: 10rpx;
padding: 16rpx 24rpx;
font-size: 28rpx;
}
.preview-section {
width: 100%;
margin-bottom: 40rpx;
}
.section-title {
display: block;
font-size: 32rpx;
font-weight: bold;
margin-bottom: 20rpx;
color: #333;
}
.video-preview, .photo-preview {
width: 100%;
border-radius: 16rpx;
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
}
.video-preview {
height: 400rpx;
}
.photo-preview {
height: 500rpx;
}
javascript 代码
// pages/index/index.js
Page({
data: {
videoSrc: '',
photoSrc: '',
cameraContext: null
},
onLoad: function () {
// 创建相机上下文
this.setData({
cameraContext: wx.createCameraContext()
})
},
// 开始录像
startRecord: function() {
const ctx = this.data.cameraContext
ctx.startRecord({
success: (res) => {
wx.showToast({
title: '开始录像',
icon: 'success'
})
},
fail: (err) => {
wx.showToast({
title: '开始录像失败',
icon: 'none'
})
console.error('开始录像失败:', err)
}
})
},
// 停止录像
stopRecord: function() {
const ctx = this.data.cameraContext
ctx.stopRecord({
success: (res) => {
this.setData({
videoSrc: res.tempVideoPath
})
wx.showToast({
title: '录像完成',
icon: 'success'
})
},
fail: (err) => {
wx.showToast({
title: '停止录像失败',
icon: 'none'
})
console.error('停止录像失败:', err)
}
})
},
// 拍照
takePhoto: function() {
const ctx = this.data.cameraContext
ctx.takePhoto({
quality: 'high',
success: (res) => {
this.setData({
photoSrc: res.tempImagePath
})
wx.showToast({
title: '截图成功',
icon: 'success'
})
},
fail: (err) => {
wx.showToast({
title: '截图失败',
icon: 'none'
})
console.error('截图失败:', err)
}
})
}
})
小程序需要在app.json中声明相机权限:
{
"permission": {
"scope.camera": {
"desc": "需要使用您的相机进行录像和拍照"
}
}
}