移动端项目开发总结(一)

news2024/12/26 23:28:49

移动端项目开发总结(一)

前阵子做租赁项目,风风火火的上线,趁现在还没忘,把用到的东西整理以下,算是对于这个项目的回顾吧。

特效一 : 移动端适配

需求

移动端适配,采用rem单位。结合JS和CSS共同来实现不同屏幕之间的适配。

rem 是相对于 html 元素的 font-size 的一个单位。如果 html 上定义了 font-size: 20px;,则无论在任何地方都是 1rem = 20px 这个大小不会受到父元素的影响。

我们统一使用rem对页面进行整体缩放。强烈建议大家对需要适应页面大小的任何元素都使用 rem 为单位来定义。

我们在 iphone6 上使用 1rem = 20px 来换算。小于 375px 的设备上不做缩小处理,对 大于 375px 宽度的设备进行等比缩放。

解决方案

采用SUI Mobile框架中的模块。

SUI Mobile

  • 官网地址: http://m.sui.taobao.org/

  • github地址:https://github.com/sdc-alibaba/SUI-Mobile

安装和使用

安装

JS

1<script src="https://cdn.bootcss.com/zepto/1.2.0/zepto.min.js"></script>  
2<script src="https://github.com/sdc-alibaba/SUI-Mobile/blob/dev/js/device.js"></script>  
 

对应CSS

 1// 375屏幕为 20px,以此为基础计算出每一种宽度的字体大小  
 2// 375以下不变,375以上等比放大  
 3html {  
 4  font-size: 20px;  
 5}  
 6@media only screen and (min-width: 400px) {  
 7  html {  
 8    font-size: 21.33333333px !important;  
 9  }  
10}  
11@media only screen and (min-width: 414px) {  
12  html {  
13    font-size: 22.08px !important;  
14  }  
15}  
16@media only screen and (min-width: 480px) {  
17  html {  
18    font-size: 25.6px !important;  
19  }  
20}

device.js 作用

  • 修改:pixel-ratio的值,用来处理边框等问题。(如果不需要的话可以省掉)

     1@media only screen and (-webkit-min-device-pixel-ratio: 2) {  
     2  .list-block .item-inner:after {  
     3    -webkit-transform: scaleY(0.5);  
     4            transform: scaleY(0.5);  
     5  }  
     6}  
     7@media only screen and (-webkit-min-device-pixel-ratio: 3) {  
     8  .list-block .item-inner:after {  
     9    -webkit-transform: scaleY(0.33);  
    10            transform: scaleY(0.33);  
    11  }  
    12}
    
  • 另外一个是判断设备的参数:提供了一些基本的设备侦测信息可供使用。

     1console.log($.device)  
     2// --------  
     3{  
     4  android: true  
     5  androidChrome: false  
     6  ios: false  
     7  ipad: false  
     8  iphone: false  
     9  isWeixin: false  
    10  os: "android"  
    11  osVersion: "4.4.1"  
    12  pixelRatio: 3  
    13  statusBar: false  
    14  webView: null  
    15}
    

使用sublime Text 的 ‘CSSREM’ 更能提高便写效率。

更多参考方案

  • 移动端页面适配———多方案解析
    https://juejin.im/entry/59ca3c6df265da064f2024af

  • 移动端适配方案(上)
    https://github.com/riskers/blog/issues/17

  • 移动端布局适配方案
    http://blog.poetries.top/2017/11/05/mobile-layout/

  • 移动端开发中,关于适配问题的一点总结(一)
    https://www.jianshu.com/p/3a5063028706

特效二 : 拖动左滑动,显示删除按钮

需求

购物车部分新加个滑动显示删除的按钮,可以删除商品。参考微信滑动删除。

直接看下图:

图片

解决方案

1. 使用插件 - swipeout

SwipeOut
https://github.com/ankane/swipeout

安装使用步骤

安装

SwipeOut 需要依赖Hammer.js,需要把下面两个JS引入到你的项目中:

Hammer.js and SwipeOut

hammerjs 官方地址: http://hammerjs.github.io/

调用展示

1<script src="path/to/hammer.js"></script>  
2<script src="path/to/swipeout.js"></script>  
 

使用

实例化<ul><ol> 标签上 实例化 SwipeOut。

1var list = document.getElementById("list");  
2new SwipeOut(list);  
 

如果有多个,重复调用

1function SwipeOutBind(){  
2    var cartList = document.getElementById("list"),  
3        cartUl = list.getElementsByTagName('ul');  
4    for(var i = 0; i < cartUl.length; i++){  
5        new SwipeOut(cartUl[i],{  
6            'btnText' : '删除'  
7        })  
8    }  
9}  
 

调用JavaScript

原生JS

1list.addEventListener("delete", function(evt) {  
2  // do something, like an ajax call to server  
3  // evt.target references the list item  
4});  
 

jQuery or Zepto

1$("#list li").on("delete", function(evt) {  
2  // ...  
3});  
 

定制

‘删除’按钮默认没有样式,你可以根据自己需要定制以下样式:

 1.swipe-out .delete-btn {  
 2  padding: 6px 8px;  
 3  border-radius: 6px;  
 4  border: solid 1px rgb(96,23,18);  
 5  background-image: linear-gradient(top, rgb(242,153,157), rgb(213,62,41));  
 6  background-image: -webkit-linear-gradient(top, rgb(242,153,157), rgb(213,62,41));  
 7  background-image: -moz-linear-gradient(top, rgb(242,153,157), rgb(213,62,41));  
 8  background-image: -o-linear-gradient(top, rgb(242,153,157), rgb(213,62,41));  
 9  text-shadow: 0em -0.1em rgb(51,51,51);  
10  color: #fff;  
11  font: bold 14px/20px "Helvetica Neue", Arial, Helvetica, sans-serif;  
12}

‘删除’按钮的文案你可以自己修改:

1new SwipeOut(list, {  
2  btnText: "Remove"  
3}); // default: "Delete"  
 

其他解决方案

  • js移动端向左滑动出现删除按钮
    http://www.cnblogs.com/libin-1/p/6431581.html

  • 写一个js向左滑动删除 交互特效的插件——Html5 touchmove
    http://hovertree.com/h/bjaf/g7qrqcp5.htm

特效三 : 点击复制文本

需求

订单部分,实现点击复制的功能。

直接看下图:

图片

解决方案

使用clipboard.js插件

clipboard.js

  • 官网地址:https://clipboardjs.com/

  • github地址:https://github.com/zenorocha/clipboard.js/

安装

npm

npm install clipboard --save

CDN link

  • jsDelivr

    1<script src="https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js"></script>  
    
    
  • cdnjs

    1<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script>  
    
    
  • RawGit

    1<script src="https://cdn.rawgit.com/zenorocha/clipboard.js/v2.0.0/dist/clipboard.min.js"></script>  
    
    
  • unpkg

    1<script src="https://unpkg.com/clipboard@2.0.0/dist/clipboard.min.js"></script>  
    
    

浏览器支持

图片

使用

html

1<div class="text-list-wrap">  
2  <ul class="text-list" id="orderInfo">  
3      <li>订单编号:21516696128828478</li>  
4      <li>下单时间:2018.01.23 16:28:48</li>  
5      <li>支付方式:支付宝-APP  </li>  
6  </ul>  
7  <span class="button copy-button">复制信息</span>  
8</div>  
 

js

 1// 复制信息  
 2var clipboard = new Clipboard('.text-list-wrap .copy-button', {  
 3  target: function () {  
 4      return document.querySelector('#orderInfo');  
 5  }  
 6});  
 7clipboard.on('success', function (e) {  
 8  //console.log(e.text);  
 9  $.toast('复制成功');  
10});  
11clipboard.on('error', function (e) {  
12  //console.log(e.text);  
13});

特效三 : 移动端日历选择联动插件

需求

需要实现点击选择开始时间和结束时间。并且需要实现某些日期不可选。

具体如下图:

图片

实现方案
采用 mobiscroll插件实现

mobiscroll

  • 官网地址:https://mobiscroll.com/

  • 中文文档:https://www.mobiscroll.cn/app/mobiscroll/index

  • gitHub地址:https://github.com/search?p=2&q=mobiscroll&type=Repositories

使用

加载必须文件

1<script src="js/mobiscroll.javascript.min.js"></script>  
2<link href="css/mobiscroll.javascript.min.css" rel="stylesheet" type="text/css">  
 

添加HTML标记

 1<div id="firstSelect" class="calendar-bar">  
 2    <span>  
 3        拿到器材  
 4        <input id="startDate" type="text" value="" readonly="" placeholder="请选择拿到日期">  
 5    </span>  
 6    <span id="numDay" class="num-day">共<em></em>天</span>  
 7    <span>  
 8        归还器材  
 9        <input id="endDate" type="text" value="" readonly="" placeholder="请选择归还日期">  
10     </span>  
11</div>  
12

js

 1mobiscroll.range('#range', {{  
 2  startInput: '#startDate', // More info about startInput: https://docs.mobiscroll.com/3-0-0_beta5/range#!opt-startInput  
 3  endInput: '#endDate', // More info about endInput: https://docs.mobiscroll.com/3-0-0_beta5/range#!opt-endInput  
 4  theme: 'ios', // Specify theme like: theme: 'ios' or omit setting to use default  
 5  display: 'bottom',  
 6  lang: 'zh', // Specify language like: lang: 'pl' or omit setting to use default  
 7  dateFormat: 'yy-mm-dd',  
 8  fromText: '拿到日期',  
 9  toText:'归还日期',  
10  min: new Date(2015, 7, 14, 16, 57),  
11  max: new Date(2018, 7, 14, 16, 57),  
12  defaultValue: [ new Date(2015,9,13) ], // More info about defaultValue: https://docs.mobiscroll.com/3-0-0_beta5/range#!opt-defaultValue  
13  onSet: function () {  
14    ...  
15  }  
16});

未完待续 。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/421871.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解Java虚拟机——Java内存区域

1.前言 Java内存区域也叫运行时数据区域&#xff0c;要记得把Java内存模型&#xff08;JMM区分开来&#xff09;。 根据线程是否共享可以把运行时数据区如上图所分。 线程共享 堆内存方法区 线程私有 栈内存 本地方法栈虚拟机栈 程序计数器 接下来&#xff0c;将逐个介绍…

什么是文件传输协议,文件传输协议又是怎么工作的

文件传输协议FTP是一种仍在使用的协议&#xff0c;在上载和下载文件时仍然比较流行&#xff0c;通常是那些太大的文件&#xff0c;需要花费很长时间才能通过常规电子邮件程序作为附件下载进行传输。 从技术上讲&#xff0c;它是“文件传输实用程序”&#xff0c;是许多TCP / I…

腾讯云4核8G12M轻量服务器配置性能评测

腾讯云轻量4核8G12M服务器&#xff0c;之前是4核8G10M配置&#xff0c;现在公网带宽和月流量包整体升级&#xff0c;12M公网带宽下载速度可达1536KB/秒&#xff0c;系统盘为180GB SSD盘&#xff0c;每月2000GB免费流量&#xff0c;腾讯云百科来详细说下4核8G12M轻量应用服务器配…

碳化硅材料在功率半导体中的优劣

开关电源工作频率的提高受到开关损耗的制约 开关电源的工作频率是指开关变换器操作的频率。在开关电源中&#xff0c;一个开关变换器被用来将直流&#xff08;DC&#xff09;能源转换为可用于电子设备的交流&#xff08;AC&#xff09;能源。开关变换器的基本原理是通过对开关…

3.4 函数的单调性和曲线的凹凸性

学习目标&#xff1a; 如果我要学习函数的单调性和曲线的凹凸性&#xff0c;我会采取以下几个步骤&#xff1a; 理解概念和定义&#xff1a;首先&#xff0c;我会学习单调性和凹凸性的定义和概念。单调性是指函数的增减性质&#xff0c;可以分为单调递增和单调递减&#xff1b…

Python使用PyQt5实现指定窗口置顶

文章目录前言一、网上找到的代码二、尝试与借鉴后的代码——加入PyQt界面1.引入库2.主代码3.完整主代码4.UI界面代码总结前言 工作中&#xff0c;同事随口提了一句&#xff1a;要是能让WPS窗口置顶就好了&#xff0c;老是将窗口切换来切换去的太麻烦了。 然后&#xff0c;这个…

docker-compose 安装nginx php mysql phpadmin

一 摘要 本文主要介绍基于docker docker-compose 安装 lnmp 三件套&#xff0c;以及用phpmysadmin 验证下部署可正确。 二 环境信息 2.1 操作系统 [root2023001 ~]# cat /etc/centos-release CentOS Linux release 7.9.2009 (Core) [root2023001 ~]#2.2 docker [root20230…

【opencv】图像数字化——认识OpenCV中的Mat类( 7 访问多通道Mat对象中的值)

7 访问多通道Mat对象中的值 7.1使用成员函数at() #include <opencv2/core/core.hpp> #include<iostream> using namespace std; using namespace cv; int main() {Mat mm (Mat_<Vec3f>(2, 2) << Vec3f(1, 11, 21), Vec3f(2, 12, 32), Vec3f(3, …

C++【深入理解多态】

文章目录一、多态概念与实现&#xff08;1&#xff09;多态的概念&#xff08;2&#xff09;怎么构成多态&#xff08;3&#xff09;虚函数重写的2个例外&#xff08;4&#xff09;经典剖析巩固知识点&#xff08;5&#xff09; override 和 final&#xff08;6&#xff09;小总…

YOLO算法改进指南【初阶改进篇】:2.改进DIoU-NMS,SIoU-NMS,EIoU-NMS,CIoU-NMS,GIoU-NMS

非极大值抑制(Non-maximum Suppression (NMS))的作用简单说就是模型检测出了很多框,我应该留哪些。 本篇将演示如何修改:NMS、Merge-NMS、Soft-NMS、CIoU-NMS、DIoU-NMS、GIoU-NMS、EIoU-NMS、SIoU-NMS 1. NMS过程 NMS过程 For a prediction bounding box B, the model c…

基于JDK11从源码角度剖析可重入锁ReentrantLock的获取锁和解锁

ReentrantLock是可重入的独占锁&#xff0c;同时只能有一个线程可以获取该锁&#xff0c;其他获取该锁的线程会被阻塞而被放入该锁的AQS阻塞队列里面。 ReentrantLock是JUC包提供的显式锁的一个基础实现类&#xff0c;实现了Lock接口。我们先来看下ReentrantLock的类图&#x…

SpringBoot WebSocket服务端创建

引入maven <!--websocket--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>新建WebSocket配置文件 import org.springframework.context.annotatio…

【蓝桥杯嵌入式】第十四届蓝桥杯嵌入式省赛(第一场)客观题及详细题解

题1 解析  编码器&#xff0c;具有编码功能的逻辑电路&#xff0c;能将每一个编码输入信号变换为不同的二进制的代码输出&#xff0c;是一个组合逻辑电路。 答案 ABC 题2 解析   减法计数器的计数值到0时&#xff0c;会产生一个重装载值&#xff0c;此处重载后就会变成111…

改进YOLO系列:CVPR2023最新 PConv |提供 YOLOv5 / YOLOv8 模型 YAML 文件

论文链接:https://arxiv.org/pdf/2303.03667v2.pdf 一、论文介绍 为了设计快速神经网络,许多工作都集中在减少浮点运算(FLOPs)的数量上。然而,作者观察到FLOPs的这种减少不一定会带来延迟的类似程度的减少。这主要源于每秒低浮点运算(FLOPS)效率低下。 为了实现更快的…

buildSrc + gradle插件:多项目共享gradle依赖管理

自定义gradle 插件&#xff0c;配合 buildSrc 形式的组件库版本管理&#xff0c; 用于实现多 project 项目共享一套版本管理信息 前言 随着组件化越来越常见&#xff0c;module数量越来越多&#xff0c;依赖管理的混乱问题大家想必是都遇到过甚至正在经历着。 对于依赖管理的…

iOS - 接入 Live2D

1.安装 Cmake 1.1 从官方下载 https://cmake.org/download/ 下载成功以后,在终端输入 sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install校验是否成功 cmake --version1.2 从 Homebrew 安装 (这个方法没有成功) brew install cmake如果提示 co…

简单的配置Sawgger+knife4j完成API测试功能

目的&#xff1a;减少postman的使用&#xff0c;以及生成对应的接口文档 1、添加依赖 基于自身spring boot 版本2.7.X 我选择的是&#xff1a; <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId>…

网络中的一些基本概念

组建网络的重要设备 集线器,交换机(组建局域网,不能跨局域网组建网络),路由器(wifi本质上是无线路由器,路由器的本质的把俩个局域网给连起来) 网络通信的一些基础概念 IP地址 标识了网络设备所在的位置 端口号 标识了一个具体的应用程序 协议 协议是网络通信的概念,约定好…

校园安全AI视频行为分析系统 yolov7

校园安全AI视频行为分析系统以yolov7网络模型算法为核心&#xff0c;校园安全AI视频行为分析算法模型对现场画面中学生打架、异常跌倒、攀爬翻墙、违规闯入、明火烟雾、睡岗离岗、抽烟打电话等行为主动识别预警存档。YOLOv7 在 5 FPS 到 160 FPS 范围内&#xff0c;速度和精度都…

计算机系统-存储器层次结构

本篇不是学习课程时的笔记&#xff0c;是重看这本书时的简记。对于学习本课程的同学&#xff0c;未涉及的内容不代表考试不涉及&#xff0c;部分省略的部分是在该课程的讨论课中学习的(存储器山&#xff0c;矩阵乘法)&#xff0c;对于核心内容的掌握&#xff0c;需要学习相关实…