移动端 H5 场景应用【破茧成蝶】案例鉴赏

2023-12-27 02:30

本文主要是介绍移动端 H5 场景应用【破茧成蝶】案例鉴赏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

移动端 H5 场景应用【破茧成蝶】案例鉴赏

移动端【破茧成蝶】场景请用微信扫描二维码访问(温馨提示:H5案例有声音,请打开声音体验):

在这里插入图片描述
案例:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<meta name="viewport" content="width=640, user-scalable=no,target-densityDpi=device-dpi">
<style>
*{ margin:0; padding:0;}
html{ overflow:hidden;}
li{ list-style:none;}
#main{ width:640px; height:auto; position:relative; overflow:hidden;}
#c1{ width:100%; height:100%; position:absolute; left:0; top:0; z-index:10;}
#list{}
#list > li{ width:100%; height:100%; background-repeat:no-repeat; position:absolute; left:0; top:0; background-size:cover; z-index:5; display:none;}
#list > li.zIndex{ z-index:6;}
#list > li:nth-of-type(1){ background-image:url(img/b.png); display:block;}
#list > li:nth-of-type(2){ background-image:url(img/c.png);}
#list > li:nth-of-type(3){ background-image:url(img/d.png);}
#list > li:nth-of-type(4){ background-image:url(img/e.png);}
#list > li:nth-of-type(5){ background-image:url(img/ad1.png);}
#list > li:nth-of-type(6){ background-image:url(img/ad2.png);}
#list > li:nth-of-type(7){ background-image:url(img/ad3.png);}
#list > li:nth-of-type(8){ background-image:url(img/ad4.png);}
</style>
<script src="jquery-2.1.3.min.js"></script>
<script>
$(document).on('touchmove',function(ev){ev.preventDefault();
});
$(function(){var $main = $('#main');var $list = $('#list');var $li = $list.find('>li');var viewHeight = $(window).height();$main.css('height',viewHeight);slideCanvas();slideImg(); function slideCanvas(){var $c = $('#c1');var gc = $c.get(0).getContext('2d');var img = new Image();var bBtn = true;$c.attr('height',viewHeight);img.src = 'img/a.png';      img.onload = function(){gc.drawImage(img,(640 - nowViewWidth())/2,0,nowViewWidth(),viewHeight);gc.strokeStyle = 'blue';gc.lineWidth = 60;gc.lineCap = 'round';gc.globalCompositeOperation = 'destination-out';$c.on('touchstart',function(ev){    var touch = ev.originalEvent.changedTouches[0];var x = touch.pageX - $(this).offset().left;var y = touch.pageY - $(this).offset().top;/*gc.arc(x,y,100,0,360*Math.PI/180);gc.fill();*/if(bBtn){bBtn = false;gc.moveTo(x,y);gc.lineTo(x+1,y+1);}else{gc.lineTo(x,y);}gc.stroke();$c.on('touchmove.move',function(ev){    var touch = ev.originalEvent.changedTouches[0];var x = touch.pageX - $(this).offset().left;var y = touch.pageY - $(this).offset().top;gc.lineTo(x,y);gc.stroke();                    });$c.on('touchend.move',function(ev){var imgData = gc.getImageData(0,0,640,viewHeight);var allPx = imgData.width * imgData.height;var num = 0;for(var i=0;i<allPx;i++){if( imgData.data[4*i+3] == 0 ){num++;}}if( num > allPx/2 ){$c.animate({opacity:0},1000,function(){$(this).remove();});}$c.off('.move');});}); };}   function slideImg(){var startY = 0;var step = 1/4;var nowIndex = 0;var nextorprevIndex = 0;var bBtn = true;$li.css('backgroundPosition', (640 - nowViewWidth())/2 +'px 0');$li.on('touchstart',function(ev){if(bBtn){bBtn = false;var touch = ev.originalEvent.changedTouches[0];startY = touch.pageY;nowIndex = $(this).index();$li.on('touchmove.move',function(ev){var touch = ev.originalEvent.changedTouches[0];$(this).siblings().hide();if( touch.pageY < startY ){   //↑nextorprevIndex = nowIndex == $li.length-1 ? 0 : nowIndex + 1;$li.eq(nextorprevIndex).css('transform','translate(0,'+( viewHeight + touch.pageY - startY )+'px)');                    }else{   //↓nextorprevIndex = nowIndex == 0 ? $li.length-1 : nowIndex - 1;$li.eq(nextorprevIndex).css('transform','translate(0,'+( -viewHeight + touch.pageY - startY )+'px)');                   }$li.eq(nextorprevIndex).show().addClass('zIndex');//Math.abs((touch.pageY - startY))/viewHeight -> 最大值 -viewHeight~viewHeight$(this).css('transform','translate(0,'+ (touch.pageY - startY)*step +'px) scale('+(1 - Math.abs((touch.pageY - startY))*step/viewHeight )+')');});     $li.on('touchend.move',function(ev){var touch = ev.originalEvent.changedTouches[0];if( touch.pageY < startY ){   //↑$li.eq(nowIndex).css('transform','translate(0,'+(-viewHeight * step)+'px) scale('+(1 - step)+')');}else{  //↓$li.eq(nowIndex).css('transform','translate(0,'+(viewHeight * step)+'px) scale('+(1 - step)+')');}$li.eq(nowIndex).css('transition','.3s');$li.eq(nextorprevIndex).css('transform','translate(0,0)');$li.eq(nextorprevIndex).css('transition','.3s');$li.off('.move');});}});$li.on('transitionEnd webkitTransitionEnd',function(){resetFn();});function resetFn(){$li.css('transform','');$li.css('transition','');$li.eq(nextorprevIndex).removeClass('zIndex').siblings().hide();bBtn = true;}}function nowViewWidth(){var w = 640 * viewHeight / 960;w = w > 640 ? w : 640;return w;}   
});
</script>
</head>
<body>
<div id="main"><canvas id="c1" width="640" height="960"></canvas><ul id="list"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul>
</div>
</body>
</html>

一、什么是微信场景应用

二、场景运行环境

  1. 微信内嵌的浏览器
  2. Chrome自带移动端Emulation(模拟器)

三、场景一功能

  1. 加载,刮开,划屏,动画,音乐等

四、jQuery

  1. 版本2.1.3

五、手机分辨率

  1. 屏幕
  2. 设备

六、主流屏幕分辨率

  1. 640 * 960
  2. 640 * 1136

七、viewport

  1. 默认视口
  2. width=device-width , user-scalable=no
  3. target-densityDpi=device-dpi
  4. 固定值640即可

八、设置高度

  1. 通过JS动态设置
  2. background-size : cover

九、刮开效果

  1. canvas
  2. globalCompositeOperation
    a. source-over
    b. destination-over
    c. destination-out

十、移动端事件

  1. touchstart
  2. touchmove
  3. touchend
  4. 原生event
    a. originalEvent
    b. changedTouches
  5. 阻止默认touchmove
    a. preventDefault

十一、划屏切换

  1. css3
  2. 运动实现
  3. transform
    a. translate
    b. scale
    c. transition
    d. transitionEnd事件

十二、提示箭头

  1. css3
    a. animation
    b. 名字
    c. 时间
    d. 执行次数
    e. infinite
  2. @keyframes
    a. 帧

十三 、入场动画

  1. 文字样式
  2. css3+js
    a. transform
    b. transition
  3. 图标
    a. 可以用图片
    b. 也可以用字体库,Font Awesome

十四、音乐

  1. audio
    a. play()
    b. pause()

十五、加载

  1. css3
  2. 控制scale
  3. animation-delay
  4. js
  5. new Image

十六、查看场景二效果

  1. 声音,音乐,加载,3D魔方,3D划屏,粒子操作

十七、适配

  1. 第二种模式方案

十八、音乐

  1. audio
  2. play()
  3. pause()

十九、3D魔方

  1. perspective
  2. preserve-3d
  3. transform-origin

二十、3D划屏

  1. translateZ

二十一、粒子操作

  1. canvas像素级操作
  2. canvas运动模式

二十二、加载

  1. linear-gradient

妙味课堂–案例详情

这篇关于移动端 H5 场景应用【破茧成蝶】案例鉴赏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/ailusummer/article/details/82999047
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/541603

相关文章

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

Python get()函数用法案例详解

《Pythonget()函数用法案例详解》在Python中,get()是字典(dict)类型的内置方法,用于安全地获取字典中指定键对应的值,它的核心作用是避免因访问不存在的键而引发KeyError错... 目录简介基本语法一、用法二、案例:安全访问未知键三、案例:配置参数默认值简介python是一种高级编

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2