当前位置:网站首页>Wechat applet project example - I have a paintbrush (painting)
Wechat applet project example - I have a paintbrush (painting)
2022-06-12 02:48:00 【Long lost brother】
Wechat applet project example —— I have a paintbrush ( Drawing a picture )
List of articles
See the bottom of the text for the project code , Praise, focus and surprise
One 、 Project presentation
I have a brush is a small drawing program
Users can draw freely on the whiteboard , You can also choose a local photo , Draw on the picture
Users can freely modify the brush width 、 Color , At the same time, the painting can be saved locally


Two 、 home page
The front page consists of two pictures
It represents two functions: free drawing and photo drawing
Users click to select different functions
<!--index.wxml-->
<view class="painting" bindtap="toPainting">
<image src="../../images/paint3.png" mode="aspectFit"/>
</view>
<view class="painting2" bindtap="toPainting2">
<image src="../../images/paint2.png" mode="aspectFit"/>
</view>
/**index.wxss**/
page{
width: 100%;
height: auto;
display: flex;
flex-direction: column;
align-items: center;
}
.painting{
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
margin-top: 100px;
width: 260rpx;
height: 260rpx;
/* background-color: red; */
}
.painting2{
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
margin-top: 100px;
width: 260rpx;
height: 260rpx;
/* background-color: red; */
}
The effect of the home page is as follows :

3、 ... and 、 Free drawing
Users can draw on a blank page
Users can adjust the brush thickness , Brush color
You can also use an eraser to erase
Finally, you can save the drawing to the local
Here's just UI Interface code
<!--painting.wxml-->
<canvas canvas-id="myCanvas" style="height: calc(100vh - {
{canvasHeight}}px)" disable-scroll="true" bindtouchend="toucheEnd" bindtouchstart="touchStart" bindtouchmove="touchMove"/>
<view class="bottom">
<block wx:for="{
{btnInfo}}" wx:key="{
{index}}">
<view class="list-item" data-type="{
{item.type}}" style="background: {
{item.background}}" bindtap="tapBtn"></view>
</block>
</view>
<view class="choose-box" wx:if="{
{width}}">
<view class="color-box" style="background: {
{'rgb(' + r + ', ' + g + ', ' + b + ')'}}; height: {
{w}}px; border-radius: {
{w/2}}px"></view>
<slider min="1" max="50" step="1" show-value="true" value="{
{w}}" bindchange="changeWidth"/>
</view>
<view class="choose-box" wx:if="{
{color}}">
<view class="color-box" style="background: {
{'rgb(' + r + ', ' + g + ', ' + b + ')'}}; height: {
{w}}px; border-radius: {
{w/2}}px"></view>
<slider min="0" max="255" step="1" show-value="true" activeColor="red" value="{
{r}}" data-color="r" bindchange="changeColor"/>
<slider min="0" max="255" step="1" show-value="true" activeColor="green" value="{
{g}}" data-color="g" bindchange="changeColor"/>
<slider min="0" max="255" step="1" show-value="true" activeColor="blue" value="{
{b}}" data-color="b" bindchange="changeColor"/>
</view>
<view class="choose-box-flex" wx:if="{
{clear}}">
<view class="choose-item" bindtap="chooseEraser">
<view class="choose-img" style='background: url("https://s1.ax1x.com/2022/05/25/XkppBF.png") white no-repeat; background-size: 26px 26px;background-position: 2px 2px; border: {
{eraser ? "2px solid red" : "2px solid transparent"}}'></view>
<view> Eraser </view>
</view>
<view class="choose-item" bindtap="clearCanvas">
<view class="choose-img" style='background: url("https://s1.ax1x.com/2022/05/25/XkpDCn.png") white no-repeat; background-size: 26px 26px;background-position: 2px 2px;'></view>
<view> Empty </view>
</view>
</view>
/* painting.wxss */
page {
background: rgba(153, 204, 255, 0.1);
}
canvas {
width: 100vw;
}
.bottom {
width: 100vw;
height: 50px;
position: absolute;
bottom: 0;
display: flex;
justify-content: space-around;
}
.list-item {
width: 30px;
height: 30px;
margin: 10px 0;
border-radius: 50%;
}
.choose-box {
width: 100vw;
position: absolute;
bottom: 50px;
}
.color-box {
width: 50vw;
margin: 20px auto;
}
slider {
margin: 20px 30px;
}
.choose-box-flex {
display: flex;
justify-content: space-around;
width: 100vw;
position: absolute;
bottom: 50px;
font-size: 16px;
color: #666;
text-align: center;
}
.choose-img {
width: 30px;
height: 30px;
margin: 10px;
border-radius: 50%;
background: white;
}
Now I will show you my roommate !!!
( Those who like my roommate can confide in me , Send micro signal !!!)
Four 、 Photo drawing
The user can select a photo
Painting on the basis of photos
Other functions are consistent with free painting
Here's just UI Interface code
<!--painting-2.wxml-->
<canvas canvas-id="myCanvas" disable-scroll="true" bindtouchstart="touchStart"
bindtouchmove="touchMove" bindtouchend="touchEnd" wx:if="{
{hasChoosedImg}}"
style="height: {
{(canvasHeightLen == 0) ? canvasHeight : canvasHeightLen}}px; width: {
{canvasWidth}}px;"
/>
<view class="failText" wx:if="{
{!hasChoosedImg}}" click=""> No photos selected , Click to reselect </view>
<view class="bottom">
<block wx:for="{
{btnInfo}}" wx:key="{
{index}}">
<view class="list-item" data-type="{
{item.type}}" style="background: {
{item.background}}" bindtap="tapBtn"></view>
</block>
</view>
<view class="choose-box" wx:if="{
{width}}">
<view class="color-box" style="background: {
{'rgb(' + r + ', ' + g + ', ' + b + ')'}}; height: {
{w}}px; border-radius: {
{w/2}}px"></view>
<slider min="1" max="50" step="1" show-value="true" value="{
{w}}" bindchange="changeWidth"/>
</view>
<view class="choose-box" wx:if="{
{color}}">
<view class="color-box" style="background: {
{'rgb(' + r + ', ' + g + ', ' + b + ')'}}; height: {
{w}}px; border-radius: {
{w/2}}px"></view>
<slider min="0" max="255" step="1" show-value="true" activeColor="red" value="{
{r}}" data-color="r" bindchange="changeColor"/>
<slider min="0" max="255" step="1" show-value="true" activeColor="green" value="{
{g}}" data-color="g" bindchange="changeColor"/>
<slider min="0" max="255" step="1" show-value="true" activeColor="blue" value="{
{b}}" data-color="b" bindchange="changeColor"/>
</view>
/* painting-2.wxss */
page {
background: rgba(153, 204, 255, 0.1);
}
.failText {
margin-top: 100px;
text-align: center;
color: #888;
}
.bottom {
width: 100vw;
height: 50px;
position: absolute;
bottom: 0;
display: flex;
justify-content: space-around;
}
.list-item {
width: 30px;
height: 30px;
margin: 10px 0;
border-radius: 50%;
}
.choose-box {
width: 100vw;
position: absolute;
bottom: 50px;
}
.color-box {
width: 50vw;
margin: 20px auto;
}
slider {
margin: 20px 30px;
}
.choose-box-flex {
display: flex;
justify-content: space-around;
width: 100vw;
position: absolute;
bottom: 50px;
font-size: 16px;
color: #666;
text-align: center;
}
.choose-img {
width: 30px;
height: 30px;
margin: 10px;
border-radius: 50%;
background: white;
}
Next I will draw my roommate 2 Number !!
My roommate 2 No. 1 is the school grass !!!
If you like it, please send me a wechat message !

At the end of the article
That's all for the specific introduction
Small programs sometimes get stuck, but not much
Interested students can continue to study
The code is in the link below

边栏推荐
- Application of acrelcloud-6000 secure power cloud platform in a commercial plaza
- 利用ssh公钥传输文件
- 【点云压缩】Sparse Tensor-based Point Cloud Attribute Compression
- [no title] 2022 coal mine safety inspection test questions and online simulation test
- El upload upload file
- Introduction to program environment and preprocessing C language (advanced level)
- Selection (044) - what is the output of the following code?
- Kubernetes' learning path. Is there any "easy mode" Q recommendation for container hybrid cloud
- RPC 入门
- What are the solutions across domains?
猜你喜欢

架构入门讲解 - 谁动了我的蛋糕

maya前台渲染插件mel脚本工具

How to prevent electrical fire in shopping malls?

Query the duplicate values of multiple fields in the database, output the number, and add them.

Introduction to architecture - who moved my cake

Abaqus中批量对节点施加集中力荷载

推荐6款办公软件,好用还免费,效率翻倍

RPC 入门

ARD3M电动机保护器在煤炭行业中的应用

Solutions to errors in ROM opening by MAME
随机推荐
$. map(data,function(item,index){return XXX})
[digital signal processing] correlation function (power signal | cross correlation function of power signal | autocorrelation function of power signal)
Computer common sense
Function templatesfunction templates
Application of acrelcloud-6000 secure power cloud platform in a commercial plaza
DDD的分层架构
如何防止商场电气火灾的发生?
maya前台渲染插件mel脚本工具
Summary of force deduction solution 427- establishment of quadtree
Graduation design of fire hydrant monitoring system --- thesis (add the most comprehensive hardware circuit design - > driver design - > Alibaba cloud Internet of things construction - > Android App D
Force deduction solution summary 388- longest absolute path of file
Demand and business model innovation - demand 6- stakeholder analysis and hard sampling
Application of residual pressure monitoring system in high-rise civil buildings
Kubernetes' learning path. Is there any "easy mode" Q recommendation for container hybrid cloud
Force deduction solution summary 398 random number index
Common errors when mysql8 connects through JDBC
Force deduction solution summary 668- the smallest number k in the multiplication table
The program actively carries out telephone short message alarm, and customizes telephone, short message and nail alarm notifications
ssh公钥登录失败报错:sign_and_send_pubkey: no mutual signature supported
Force deduction solution summary 699- dropped blocks