精华内容
下载资源
问答
  • 不得不说,微软在Win10身上还是下了不少苦功的,总希望通过一些细节改进,来完善用户的操作体验。...远程输入法——用电脑帮手机打字有时我们会在手机上进行大量的文字输入,虽然现在的输入法都很牛X...

    不得不说,微软在Win10身上还是下了不少苦功的,总希望通过一些细节改进,来完善用户的操作体验。

    不过,大公司的思路似乎总不那么接地气,现实工作中我们还是能遇到很多操作系统难以完成的工作。

    那么作为每天与电脑朝夕相处的小编来说,这些问题又该如何处理呢?今天小编就和大家聊一聊,Win10下面那些好用的效率小工具。

    远程输入法——用电脑帮手机打字

    有时我们会在手机上进行大量的文字输入,虽然现在的输入法都很牛X,但应付这种情况还是显得力不从心。

    远程输入法光听名字似乎有点LOW,可它实现的功能却是其他输入法难望其项背的。

    整个过程共分两步,首先在手机上安装远程输入法,接下来打开电脑浏览器,敲入手机端给出的网址(https://remoboard.app/zhcn/)。

    连接成功后,你就可以通过电脑键盘直接将文字“敲”入到手机上了。

    1499f8433ba540be9f979d4713f825f1.gif

    远程输入法提供了三种输入模式,分别是“单行”、“多行”和“编程”。

    其中“单行”、“多行”都是指电脑端敲完后统一传输给手机,而“编程”則可以实时向手机传递文字,整个过程就像给手机安装了一款无线键盘一样,非常科幻。

    尽管功能如此强大,可它却是一款不折不扣的免费输入法,全程没有广告,很良心的一款软件。

    d25c2cbfb23c6ad1e5bf53fe63e32fc6.png

    Save image as you want——直接将图片保存成特定格式

    做编辑经常会用到图片,可网上下载的大多都是JPG格式,要想使用其他格式,就得自己进入PS里转换。

    Save image as you want不说也能明白,它可以随心所欲地将图片保存成你想要的格式。

    装好插件后,直接在要下载的图片上右击,通过点击对应的菜单,你就可以直接获取到需要的格式了。

    262ec61b239b9403e9b59fe44950598d.png

    Ribbon Disabler——回归经典界面

    微软的Ribbon界面已经沿用很长时间,不过依然有人不习惯。RibbonDisabler的作用非常简单,那就是直接禁用Ribbon,还原最原始的Win7外观。

    不过这类东东,大家还是按习惯来吧,毕竟Ribbon也不是那么太讨人厌!

    ae787ac6a6b0d7c7bda44ca63c6046be.png

    Windows Auto Dark Mode——自动切换Win10暗/亮模式

    Win10的暗色模式大家应该用得很熟了,唯一不方便的地方就是还得手工切换,Windows Auto Dark Mode的最大看点就是能够自动切换亮/暗模式。

    软件共分四项,分别是应用颜色、系统颜色、Edge颜色、桌面壁纸。

    用户可以通过定时,或者自己所在地的日出/日落时间自动切换,再配合上Win10自带的夜间模式(去蓝光),那效果真的是杠杠的!

    4d3e39f56059dfef00c345de48252da3.png

    Windynamicdesktop——定时切换日间/夜间壁纸

    除了系统颜色外,壁纸也能定时切换。

    这款名为Windynamicdesktop的小工具可以在Win10商店直接下载,根据每天时间,自动换上对应时刻的壁纸。

    和其他定时換壁纸软件不同,Windynamicdesktop的壁纸全部出自同一场景,只不过拍摄的时间不同罢了。

    首次进入需要填写一下用户所在城市(一般填“Beijing”,用于跟踪日出/日落时间),然后选择一个自己喜欢的壁纸包即可。

    Windynamicdesktop内置了三个壁纸包,此外你也可以到它的官网自行下载。

    Windynamicdesktop的壁纸清晰度很高,还针对不同设备(PC、PAD)进行了分类。总之你下载的壁纸包越丰富,切换的频率就会越高,是一款很好玩的小软件。

    622b963e6c406c1d1045cb63716bef30.png

    智能任务栏——有应用全屏时自动隐藏任务栏

    地址:https://www.microsoft.com/store/productId/9PJM69MPS6T9

    日常演讲或展示时,底部的任务栏总是很碍眼。“智能任务栏”的作用,是通过检测系统中是否有最大化窗体,来自动隐藏或显示任务栏。

    总之这就是它的全部功能了,有需要的来吧!

    274808594e036555a5db4b58311664f1.png

    Touchpad Blocker——输入文字时自动禁用触控板

    常用笔记本的小伙伴大多会有这样的经历,输入文字时,手部无意间碰到了触控板,导致光标到了别处,这时正在输入的文字也跟着到了别处,很是尴尬。

    Touchpad Blocker是一款触控板临时屏蔽软件,当检测到键盘工作时,会短时间禁用触控板一段时间(默认是1秒,可自定义),以此来避免误触碰的发生。

    此外除了禁用触控板外,Touchpad Blocker还能禁止鼠标光标移动,同样也是很实用的。

    80aca80b3c5abfcc9c4ef2a6dc1ae7b2.png

    BigType——输入时短暂放大

    长年累月坐在电脑前,小编这双老眼早就昏花了。BigType也许就是拯救我的一样神器,因为它的功能就像它的名字一样纯粹——输入时就把文字放大一下。

    整个软件的感觉有点像系统放大镜,但和放大镜不同的是,它的放大是临时的。

    換句话说,它只会在你需要时出现,不需要时(比如浏览文件)就和平常没啥两样了。BitType允许用户自行调整放大窗的滞留时间,同时也允许设置实际放大比率。

    总之对于眼神不太好的小编来说,这款神器简直就是神助攻,非常亲切!

    bbc2884c5f9d1efc470ca6330c853091.gif

    Alt+Tab Replacer——让任务预览窗口再大些

    Alt+Tab是Windows中专门用来切换当前运行程序的快捷键,虽然Win10已经将这套快捷键的预览窗口放大,但依旧看不清里面的内容。

    Alt+Tab Replacer是Alt+Tab的功能增强版,可以给Alt+Tab一个更大的预览画面。

    安装完成后,它会自动接管Alt+Tab,除了列表方式由横向改为纵向外,预览窗格也变大了许多。

    甚至你还可以通过左下角按钮将预览器全屏显示,尽管我也想不出来这样做有何意义。

    d5113c6a85b5de6619643b5f35593462.png

    DesktopSnowOK——让你的电脑也下雪

    好吧,我承认这款软件就是用来撩妹的,因为它除了能让你的桌面更酷以外,实在没有半点卵用。

    软件打开后,会默认呈现下雪状态,你也可以通过面板调整雪花的大小、数量、方向等等等等。

    除了极低的CPU占用率外,DesktopSnowOK对于日常操作也没有任何影响,所有雪花都是以置顶方式出现,不会影响鼠标的点击与移动。

    软件内置了很多样式,雪花只是其一,总之这款软件就是让你悄悄把它装到妹纸电脑上,然后默默地等着她乐疯!

    5f7d9dc30dc609cc93bae202c1aa36c5.gif

    Web Activities——将Chrome浏览器的浏览记录添加到任务视图

    Win10的任务视图还是蛮好用的,可惜只支持自家的Edge。Web Activitie是微软出品的一款小工具,能够将Chrome的浏览记录导入到任务视图中。

    设置方法很简单,直接登录自己的微软账号(必须和当前登录Win10的账号一致),然后在操作系统中开启任务视图同步就可以了(其实默认也是开启的)。

    当然我觉得这货也未必那么好心,没准是给自家的新版Edge开路!

    6f79ae70133b88a082300d7a3d7a8a96.png

    Thief-Book——上班看小说神器

    好吧,我知道你们肯定有人比小编闲,上着班也能玩玩电脑看看报,接下来这款软件就是专给你们打造的。

    Thief-Book是一款上班看小说神器,和很多同类别软件一样,它也是采用隐藏式设计。

    简单点说,当你需要读小说时,它会出现在任何你想在的地方(用人话说,就是可以用鼠标随便拖),当你不需要时,它又会立马变身一条励志格言!(脑补空天猎中的某场景~……%¥#)。

    除了读小说以外,作者还贴心地加入了股票行情支持。不得不说,这位作者应该有着很深的敌后活动经验!

    3b06e23f6abab74872e73b4994298cea.png


    老板位置对比

    64572240748052e5b27bd9f9984706d3.png


    大家可以脑补一下《空天猎》中某场景

    声明:本文只是单纯的软件介绍,小编工作期间从未以任何形式使用过该软件,评测完毕后也已主动卸载,望老编明鉴!!!

    ShowDesktopPerMonitor——仅隐藏当前屏幕

    如果你的电脑安装有多显示器的话,就会发现Win10的很多操作都是多屏联动的,按下PrtScreen会同时截下两个桌面,按下Win+D会同时最小化所有窗口。

    ShowDesktopPerMonitor只有一个作用,那就是让你在使用Win+D时,只作用于当前显示器。

    562c5d09d6ffe88a0489c6323e0d1752.png

    Chameleon——根据各种条件換壁纸

    经常能见到各种自动換壁纸软件,不过大多是以时间为条件,这款Chameleon的设计就比较牛掰了。

    它可以根据电量、时间、气温、风力、天气、湿度等多种条件更换壁纸,而且每一组条件又都可以细分成若干子条件。

    比如时间,软件支持1小时更换一张壁纸,如果你的壁纸足够多,像上文所介绍的Windynamicdesktop的那项功能,自己也能捣鼓出来。

    遗憾的是,Chameleon只支持美国,因此像温度、湿度、风力等一些与位置密切相关的条件,就没法体验了。但即便如此,能根据时间和电量自动更换壁纸,也能吸引一大波目光!

    1c65b10b8fe192d5670f92471f16e618.png

    GiMeSpace Power Control——根据电脑负载实时调整电源计划

    Windows内置了很多电源计划,手工切换很麻烦,有没有办法可以让它根据系统负载自动切换呢?

    GiMeSpace Power Control是一款自动切换电源计划的小工具,通过判断系统当前的CPU负载,自动决定使用哪一种电源计划。

    整个界面很简单,最上方是高低功耗所对应的电源计划,中间是判断高低功耗的CPU负载阈值,最下方是最小计划切换间隔和CPU负载检查间隔。

    所有设置做好后自动生效,轻轻松松在速度与省电之间达到一个平衡!

    d3bad1a7cfda3f82530a8b3ce12046cf.gif

    Chemo——移除不需要的Win10应用

    Win10融入了很多新功能,尤其对SSD这样的新硬件支持很好。但另一方面,过于臃肿的体积也让整个系统运行卡顿,如果不是很新的电脑,真心不如Win7痛快!

    Chemo是一款能够完整移除Win10内置组件的小工具,包括应用商店、OneDrive、Cortana、Internet Explorer等在内的很多系统组件,都可以用它一键禁用。

    此外它还包含了一些常用的系统设置,比如一键禁止Win10更新后重启、一键禁止显示网络搜索结果、启动时必须按下Ctrl+Alt+Delete登录等等,也都是非常实用的。

    e615b08f5150a5934345298129cfe85a.png

    腾讯桌面整理独立版——让桌面一键井井有条

    尽管小编自恃是个爱(hen)干(la)净(ta)的人,可工作一忙起来,难免桌面会乱糟糟的。

    腾讯桌面整理独立版脱胎于腾讯电脑管家,是一款干干净净的免费小软件,最大看点是能够将桌面快速收拾干净。

    软件内置了很多格子,可以将杂乱的图标分门别类。“我的文件”类似“最近使用的项目”,通过时间序整理最近用过的文件。

    此外它还有一项超级方便的一键搜索神器,简直像Everthing一样好用,20多兆的体积,强烈推荐大家试一试。

    0c3d3afa73e14871af6063fbfa7b5684.png

    写在最后

    操作系统与用户之间的矛盾由来已久,很多时候我们觉得很简单的事,可在一些大公司手中,就是一年年地拖着不办。

    这其中既有市场竞争的缘故,也有其他方面的考量。好在,还有一些第三方软件供我们折腾,我想这大概就是Windows最讨人喜欢的一个地方吧。

    好了,这就是本期小编和大家分享的几个小工具,如果对你有用的话,就给俺点个赞吧!

    e68a89a52a54480c93b944b9ac0430be.png
    展开全文
  • 移动端知识

    2021-01-29 15:46:01
    Click事件在移动手机开发中有300ms的延迟,因为在手机早期,浏览器系统有放大和缩放功能,用户在屏幕点击两次之后,系统会触发放大或者缩放功能,因此系统做了一个处理,当触摸一次后,在300ms这段时间内有没有

    理解click的300ms的延迟响应

    Click事件在移动手机开发中有300ms的延迟,因为在手机早期,浏览器系统有放大和缩放功能,用户在屏幕上点击两次之后,系统会触发放大或者缩放功能,因此系统做了一个处理,当触摸一次后,在300ms这段时间内有没有触摸第二次,如果触摸了第二次的话,说明是触发放大或缩放功能,否则的话是click事件。
    因此当click时候,所有用户必须等待于300ms后才会触发click事件。所以当在移动端使用click事件的时候,会感觉到有300ms的迟钝。

    如何解决移动端Click事件300ms延迟的问题?

    禁止用户缩放

    通过完全禁用缩放来达到去掉点击延迟的目的

    <meta name="viewport" content="user-scalable=no">
    <meta name="viewport" content="initial-scale=1,maximum-scale=1">
    

    优点:高效,简洁
    缺点:通常情况下,我们还是希望页面能通过双指缩放来进行缩放操作,比如放大一张图片,放大一段很小的文字。

    判断是否设置了上述meta标签,来处理缩放功能

    双击缩放主要是用来改善桌面站点在移动端浏览体验的,而随着响应式设计的普及,很多站点都已经对移动端坐过适配和优化了,这个时候就不需要双击缩放了,如果能够识别出一个网站是响应式的网站,那么移动端浏览器就可以自动禁掉默认的双击缩放行为并且去掉300ms的点击延迟。

    <meta name="viewport" content="width=device-width">

    使用zepto.js的tap事件

    tap事件可以理解为在移动端的click事件,而zepto.js因为几乎完全复制jQuery的api,因此常常被用在h5的开发上用来取代jquery

    缺陷: 点击穿透:如果一个绝对定位或者固定定位元素处于页面最顶层,对这个元素绑定一个点击事件,那么你点击这个点对应的下面凡是有点击事件或者a标签都会被触发执行.

    FastClick.js

    FastClick的实现原理是在检测到touchend事件的时候,会通过DOM自定义事件立即出发模拟一个click事件,并把浏览器在300ms之后的click事件阻止掉。

    • npm install fastclick -S
    • //引入
      import fastClick from ‘fastclick’
      //初始化FastClick实例。在页面的DOM文档加载完成后
      fastClick.attach(document.body)

    使用fastClick使得ios唤启软键盘,触点不是很灵敏
    解决方法:重写fastClick 设置焦点targetElement.focus();

    import FastClick from 'fastclick'
    
    FastClick.attach(document.body)
    FastClick.prototype.focus = function(targetElement) {
      var length;
      if (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month' && targetElement.type !== 'email') {
        length = targetElement.value.length;
        targetElement.focus();
        targetElement.setSelectionRange(length, length);
      } else {
        targetElement.focus();
      }
    };
    

    em/rem/meta

    em:相对于父元素,相对于当前元素的font-size。
    rem:相对于根元素,跟整个body的font-size有关系。
    meta:指定浏览器的适口,适口就是可以看见的区域。
    layout viewport :默认适口
    visual viewport:可视区域
    ideal viewport:理想化的适口

    vm / vh 与 rem

    rem:
    需要动态设置根尺寸font-size。
    用户无法设置更大字体(因为有一个动态指定字体的过程,所以用户很难再去处理这个字体)。
    vw / vh:
    自动缩放/不影响字体
    兼容性差

    uniapp

    uni-app是一套可以适用多端的开源框架。
    uni-app是基于vue.js的。
    封装的组件和微信小程序的组件一模一样。
    uni-app使用HBX进行开发,HBX对于vue语法等支持可以说是比较完备了。

    uin-app的开发流程

    1. 安装HBX
    2. 下载完成后直接解压,通过工具栏,创建uni-app
    • common-common 存放一些公共css及js文件
    • component-component 存放我们自己封装的一些组件
    • static-static 放我们的静态文件
    • hybrid 本地html文件
    • platforms 存放各平台专用页面的目录
    • pages 存放业务文件的文件夹
    • main.js vue.js 初始化入口文件
    • App.vue 全局样式以及监听应用的生命周期
    • manifest.json 应用的各种信息
    • pages.json 路由、导航条、选项卡等
    1. 可以在HBX运行,也可以在指定的小程序开发者工具运行。
    2. 开发过程中要注意uni-app得兼容性。
    3. 打包上线,manifest.json目录的配置选项

    生命周期

    应用的生命周期:
    onLaunch:应用初始化完成时触发,全局只触发一次。区分开发环境然后调用不同服务器的接口。
    onShow:从后台进入前台时触发。
    onHide:从前台进入后台时触发。
    onUniNViewMessage:页面发送的数据进行监听。
    页面的生命周期:
    onLoad:页面加载得时候触发
    onShow:页面显示触发
    onReady:页面初次渲染完成触发
    onHide:页面隐藏时候触发
    onPullDownRefresh:用户下拉时触发
    onReachBottom:页面上拉触底时触发
    nNavigationBarButtonTap:原生标题栏点击时触发,可以用于分享app等功能
    onBackPress:页面返回时触发

    微信小程序

    基础知识

    目录和文件

    project.config.json 项目配置文件,用得最多的就是配置是否开启https校验;
    App.js 设置一些全局的基础数据等;
    App.json 底部tab, 标题栏和路由等设置;
    App.wxss 公共样式,引入iconfont等;
    pages 里面包含一个个具体的页面;
    index.json (配置当前页面标题和引入组件等);
    index.wxml (页面结构);
    index.wxss (页面样式表);
    index.js (页面的逻辑,请求和数据处理等);

    获取用户信息

    wx.getUserInfo(Object object)

    常用标签

    <div></div>  ==  <view></view>
    
    <h1></h1>...<h6></h6>  ==  <view></view>
    <p></p><span></span>
    
    <i class="icon">  ==  <icon></icon>
    
    <iput type="text">  ==  <input/> 
    <iput type="checkbox">  ==  <checkbox/> 
    <iput type="radio">  ==  <radio/>
    <iput type="file">  ==  <view bindtab="chooseImage">
    

    常见事件

    • 事件类别:
      tap:点击事件;
      longtap:长按事件;
      touchstart:触摸开始;
      touchend:触摸结束;
      touchcansce:取消触摸;
    • 事件绑定:
      bind绑定;
      catch绑定;(能阻止事件冒泡)
    // wxml 绑定点击事件,
    <button bindtap="btnclick"></button>
    // 以下就可以设置双向数据绑定
    <input type="text"  bindinput='bindinput'  value="{{num}}" />
    <view>{{num}}</view>
    
    //wxjs 获取应用实例
    const app = getApp()
    Page({
      data: {
        text: "你好",
        onOff: false
      },
      btnclick:function(){
          console.log('123');
          var onOff = this.data.onOff;
          // setData函数主要用于将逻辑层数据发送到视图层,同时对应的改变this.data.x的值。
          // 使用方法和react一样
          this.setData({text:"hello",onOff:!onOff});
      }
    })
    

    请求封装

    • 引入app.js
    • 定义http方法
    • http方法创建promise
    • promise 里面使用wx.request方法
    • wx.request用法和jq相似,需要url 参数 和methd
    • 成功用调用success
    • 失败后调用fail
    // 引入app.js
    const app = getApp()
    // app.js的globalData对象
    const glo = app.globalData
    const baseURL = 'http://wxtest.justfree.cn'
    
    // 通用请求 wx.request调用
    const http = (url, data, method) => {
      wx.showLoading({
        title: '加载中',
        mask: true
      })
      let promise = new Promise(function (resolve, reject) {
        wx.request({
          url: baseURL + url,
          data: data,
          method: method ? method : 'post',
          header: {
            'Miniapp-Token': glo.token,
            'Content-Type': 'application/json;charset=UTF-8'
          },
          success: function (res) {
            wx.hideLoading()
            if (res.data.code === '000000') {
              resolve(res.data)
            } else {
              wx.showToast({
                mask: true,
                title:
                  res.data.code === 4001
                    ? '登录失效,请重新登录'
                    : res.data.msg
                      ? res.data.msg
                      : '服务器错误',
                icon: 'none',
                duration: 3000
              })
            }
          },
          fail: function (res) {
            wx.hideLoading()
            wx.showToast({
              mask: true,
              title: res.data.msg ? res.data.msg : '请求超时',
              icon: 'none',
              duration: 3000
            })
          }
        })
      })
      return promise
    }
    
    module.exports = {
      http
    }
    
    • 请求调用
    // 引入
    import { http } from '../../utils/http'
    // 方法里调用
    http('url', { '参数' }, 'get').then(res => {
       if (that.data.redirect) {
       	// 返回上一个页面
         wx.navigateBack({
           delta: 1
         });
       } else {
         wx.reLaunch({
           url: "/pages/index/index",
         });
       }
     })
    

    页面跳转

    wx.navigateTo 用于保留当前页面、跳转到应用内的某个页面,使用 wx.navigateBack可以返回到原页面。对于页面不是特别多的小程序,通常推荐使用 wx.navigateTo进行跳转, 以便返回原页面,以提高加载速度。当页面特别多时,则不推荐使用。
    wx.redirectTo 当页面过多时,被保留页面会挤占微信分配给小程序的内存,或是达到微信所限制的 5 层页面栈。这时,我们应该考虑选择 wx.redirectTo。wx.redirectTo()用于关闭当前页面,跳转到应用内的某个页面。这样的跳转,可以避免跳转前页面占据运行内存,但返回时页面需要重新加载,增加了返回页面的显示时间。
    wx.reLaunch wx.reLaunch()与 wx.redirectTo()的用途基本相同, 只是 wx.reLaunch()先关闭了内存中所有保留的页面,再跳转到目标页面
    wx.switchTab 对于跳转到 tab bar 的页面,最好选择 wx.switchTab(),它会先关闭所有非 tab bar 的页面。其次,也可以选择 wx.reLaunch(),它也能实现从非 tab bar 跳转到 tab bar,或在 tab bar 间跳转,效果等同 wx.switchTab()。使用其他跳转 API 来跳转到 tab bar,则会跳转失败。
    wx.navigateBack 用于关闭当前页面,并返回上一页面或多级页面。开发者可通过getCurrentPages() 获取当前的页面栈,决定需要返回几层。这个 API 需要填写的参数只有 delta,表示要返回的页面数。若 delta 的取值大于现有可返回页面数时,则返回到用户进入小程序的第一个页面。当不填写 delta 的值时,就默认其为 1(注意,默认并非取 0),即返回上一页面。

    生命周期

    • 应用生命周期
      (1)onLaunch: 初始化小程序时触发,全局只触发一次
      (2)onShow: 小程序初始化完成或用户从后台切换到前台显示时触发
      (3)onHide: 用户从前台切换到后台隐藏时触发
      (4)onError: 小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息
      后台: 点击左上角关闭,或者按了设备 Home 键离开微信,并没有直接销毁,而是进入后台
      前台:再次进入微信或再次打开小程序,相当于从后台进入前台。
    • 页面生命周期
      (1)onLoad:首次进入页面加载时触发,可以在 onLoad 的参数中获取打开当前页面路径中的参数。
      (2)onShow:加载完成后、后台切到前台或重新进入页面时触发
      (3)onReady:页面首次渲染完成时触发
      (4)onHide:从前台切到后台或进入其他页面触发
      (5)onUnload:页面卸载时触发
    • 应用及页面生命周期的触发顺序
      (1)首次进入小程序 应用:onLaunch、onShow、页面:onLoad、onShow、onReady
      (2)前台切换到后台 页面:onHide 、应用:onHide
      (3)后台切换到前台 应用:onShow、页面:onShow

    自定义组件

    • json:
    {
      "component": true
    }
    
    • wxjs:page 换成 Component
    Component({
      options: {
        multipleSlots: true ,// 在组件定义时的选项中启用多slot支持
        addGlobalClass:true // 开启外样式类能够完全影响组件内
      },
      properties: { /* ... */ },
      methods: { /* ... */ }
    })
    
    • wxml:
    <!-- 组件模板 -->
    <view class="wrapper">
      <slot name="before"></slot>
      <view>这里是组件的内部细节</view>
      <slot name="after"></slot>
    </view>
    
    • 注意事项
      不能使用id选择器(#a)、属性选择器([a])和标签名选择器,请改用class选择器
      组件和引用组件的页面中使用后代选择器(.a .b)在一些极端情况下会有非预期的表现,如遇,请避免使用
      子元素选择器,可能导致非预期的情况。
      继承样式,如 font 、 color ,会从组件外继承到组件内。
      除继承样式外, app.wxss 中的样式、组件所在页面的的样式对自定义组件无效。
    #a { } /* 在组件中不能使用 */
    [a] { } /* 在组件中不能使用 */
    button { } /* 在组件中不能使用 */
    .a > .b { } /* 除非 .a 是 view 组件节点,否则不一定会生效 */
    
    • 使用
      json
      可以写在app.json 也可以写在页面的json
    {
      "usingComponents": {
        "component": "/components/component/component"
      }
    }
    

    wxml:直接使用

    <view>
      <!-- 以下是对一个自定义组件的引用 -->
      <component></component>
    </view>
    

    WXML 节点标签名只能是小写字母、中划线和下划线的组合

    传值

    • 全局传值
      app.js文件中定义数据globalData
      使用的时候引入app.js
      app.globalData.userName 调用获取值
    // 步骤一:在全局app.js文件中定义数据
    App({
      globalData: {
        userInfo: null,
        userName: '全局变量传值',
      }
    })
    
    // 步骤二:获取应用实例,不然无法调用全局变量
    const app = getApp()
    
    // 步骤三:调用全局变量
    Page({
      data: {
      
      },
      onLoad: function (options) {
        console.log(app.globalData.userName);
        // 改值方法一
        app.globalData.userName= "修改全局变量"
        // 改值方法2
        // 全局定义一个函数通过调用全局的函数,让全局的函数修改
      },
    })
    
    • url传值
      跳转路由的时候传值,
      接收的时候通过,首次进入页面的钩子函数接收值
    // 步骤一:使用关键字bindtap绑定一个点击事件方法,data-index是传入一个值
    <image class="btn-detail" src='/images/btn_detail.png' bindtap='toDetail' data-index='{{index}}'></image>
    
    // 步骤二:在脚本文件中定义这个方法(方法并不是定义在一个methods集合中的)
    Page({
      data: {},
      onLoad: function () {},
      toDetail: function(e){
        // index代表的遍历对象的下标
        var index = e.currentTarget.dataset.index;
        var proList = this.data.proList;
        var title = proList[index].proName;
        wx.navigateTo({
          url: '/pages/detail/detail?title='+title,
        })
      }
    })
    
    // 步骤三:在detail组件的脚本文件中接收title这个传入过来的值
    Page({
      data: {},
      onLoad: function (options) {
        console.log(options.title);
      },
    })
    
    • Storage传值
      存值:wx.setStorageSync(‘titleName’, title);
      取值:var titlen = wx.getStorageSync(‘titleName’);
    // 步骤一:使用关键字bindtap绑定一个点击事件方法,data-index是传入一个值
    <image class="btn-detail" src='/images/btn_detail.png' bindtap='toDetail' data-index='{{index}}'></image>
    
    // 步骤二:在脚本文件中定义这个方法(方法并不是定义在一个methods集合中的)
    Page({
      data: {},
      onLoad: function () {},
      toDetail: function(e){
        var index = e.currentTarget.dataset.index;
        var proList = this.data.proList;
        var title = proList[index].proName;
        wx.setStorageSync('titleName', title);
        wx.navigateTo({
          url: '/pages/detail/detail',
        })
      }
    })
    
    // 步骤三:在detail组件的脚本文件中使用wx.getStorageSync接收titleName这个传入过来的值
    Page({
      data: {},
      onLoad: function (options) {
        var titlen = wx.getStorageSync('titleName');
        console.log(titlen);
      },
    })
    
    • 组件传值

    父组件向子组件传递数据
    类似vue的父传子

    父组件向子组件传值以属性的形式,子组件以properties接收,并可指定数据类型type以及默认值value。
    在wxml里可直接以{{name}}的形式使用,而在js中以this.properties.name获取。

    //父
    <my-component name="{{name}}" age="{{age}}"></my-component>
    data: {
      name: 'Peggy',
      age: 25
    }
    // 子
    properties: {
      name: {
        type: String,
        value: '小明'
      },
      age: Number
    }
    

    子组件向父组件传值
    类似vue 子传父 使用this.$emit 定义

    子组件向父组件传递数据使用this.triggerEvent方法,这个方法接受3个参数:
    this.triggerEvent(‘myevent’, myEventDetail, myEventOption);

    // 子
    methods: {
      changeName() {
        this.triggerEvent('changeName', {
          name: '李四'
        })
      }
    }
    // 父 bindchangeName
    <my-component bindchangeName="changeName"></my-component>
    
    changeName(event) {
      console.log(event.detail)
      // { name: '李四' }
    }
    
    • 微信小程序的数据库传值,可以把数据存在云数据库。
    const db = wx.cloud.database()
    

    数据存储

    同一个小程序 storage 上限为 10MB。

    Storage:添加、删除、获取、清除
    wx.setStorage(Object object):含成功,失败的回调
    wx.setStorageSync(string key, any data):wx.setStorage 的同步版本

    演示

    wxml与标准的html的异同

    wxml:模板,类似html,但是拥有逻辑,指令等,不能在浏览器预览。
    运行在js内核,没有dom树,window对象。

    WXSS和CSS的异同

    wxss 具有 CSS 大部分的特性,也做了一些扩充和修改;
    支持新的尺寸单位 rpx; rpx:根据屏幕宽度进行自适应, 开发微信小程序时设计师可以用 iPhone6 作为视觉稿的标准。
    使用@import语句可以导入外联样式表

    小程序的双向绑定和vue的异同

    大体相同,但小程序直接this.data的属性是不可以同步到视图的,必须调用this.setData()方法!

    简述微信小程序原理?

    • 小程序本质就是一个单页面应用,所有的页面渲染和事件处理,都在一个页面内进行,但又可以通过微信客户端调用原生的各种接口;
    • 它的架构,是数据驱动的架构模式,它的UI和数据是分离的,所有的页面更新,都需要通过对数据的更改来实现;
    • 它从技术讲和现有的前端开发差不多,但深入挖掘的话却又有所不同。采用JavaScript、WXML、WXSS三种技术进行开发;
    1. 功能可分为webview和appService两个部分;
      webview用来展现UI,appService有来处理业务逻辑、数据及接口调用;
      两个部分在两个进程中运行,通过系统层JSBridge实现通信,实现UI的渲染、事件的处理等。
    2. JavaScript:首先JavaScript的代码是运行在微信App中的,并不是运行在浏览器中,因此一些H5技术的应用,需要微信App提供对应的API支持,而这限制住了H5技术的应用,且其不能称为严格的H5,可以称其为伪H5,同理,微信提供的独有的某些API,H5也不支持或支持的不是特别好。
    3. WXML:WXML微信自己基于XML语法开发的,因此开发时,只能使用微信提供的现有标签,HTML的标签是无法使用的
    4. WXSS:WXSS具有CSS的大部分特性,但并不是所有的都支持,而且支持哪些,不支持哪些并没有详细的文档。

    请谈谈原生开发小程序和第三方对比?

    • 如果是新项目,且没有旧的 h5 项目迁移,则考虑用小程序原生开发,好处是相比于第三方框架,坑少
    • 的 h5 项目是 vue 开发 或者 也有 h5 项目也需要小程序开发,则比较适合第三方
    • 如果团队前端强大,自己做一套框架也没问题

    小程序和原生app哪个好

    用户体验:小程序不用安装,用户体验更好。

    哪些方法来提高微信小程序的应用速度?

    1、提高页面的加载速度 (比如路由跳转)
    2、用户行为预测
    3、减少默认data的大小
    4、组件化方案

    分析微信小程序的优劣势?

    1、容易上手,基础组件库比较全,基本上不需要考虑兼容问题;
    2、开发文档比较完善,开发社区比较活跃,支持插件式开发;
    3、良好的用户体验:无需下载,通过搜索和扫一扫就可以打开,打开速度快,安卓上可以添加到桌面,与原生APP差不多;
    4、开发成本比APP要低;
    5、为用户提供良好的安全保障(小程序发布 严格的审查流程)

    劣势:
    1、限制较多,页面大小不能超过1M,不能打开超过5个层级的页面;
    2、样式单一,部分组件已经是成型了的,样式不可修改,例如:幻灯片、导航
    3、推广面窄,不能分享朋友圈,只能通过分享给朋友,附近小程序推广
    4、依托于微信,无法开发后台管理功能
    5、后台调试麻烦,因为api接口必须https请求且公网地址
    6、真机测试,个别功能安卓和苹果表现迥异,例如安卓的定位功能加载很慢

    小程序调用后台接口遇到哪些问题

    1、 数据的大小限制,超过范围会直接导致整个小程序崩溃,除非重启小程序
    2、 小程序不可以直接渲染文章内容这类型的html文本,显示需借助插件

    微信小程序如何实现下拉刷新

    用view代替scroll-view,设置onPullDownRefresh函数实现

    展开全文
  • 移动端常见bug汇总001

    2019-07-20 16:24:24
    最近掘金看到一篇讲解移动端常见 bug 的文章,遂全部 github 实现之,然后使用手机打开对应的网页,就可以观察到具体的 bug 到底是什么样子,本人对于移动端仅仅处于了解阶段,故写下这篇博客,记录自己...

    前言

    最近在掘金上看到一篇讲解移动端常见 bug 的文章,遂全部在 github 上实现之,然后使用手机打开对应的网页,就可以观察到具体的 bug 到底是什么样子,本人对于移动端仅仅处于了解阶段,故写下这篇博客,记录自己在移动端的积累。

    参考

    https://juejin.im/post/5af918636fb9a07ac5603ecb#heading-0

    展开全文
  • C#编程经验技巧宝典

    热门讨论 2008-06-01 08:59:33
    79 <br>0115 如何判断是否为数字 79 <br>0116 如何在字符串中查找指定字符 79 <br>0117 如何在字符串中用一子串替换另一子串 80 <br>0118 将新字符串添加到已有字符串中 80 <br>0119 如何在...
  • 它也决定用户可以看到什么</li><li>在手机上,桌面窗口被拆分成了两个:布局视口会限制你的CSS布局;视觉视口决定用户能看到什么。</li><li>移动端浏览器还有一个理想视口,它是对于特定...
  • 阅读工具 开卷有益

    2012-03-31 14:07:03
    经楼主亲身检测 改程序完美支持酷派f800及windows CE 系统手机 1、开卷操作快速入门: 小说阅读界面: 1、点屏幕上下部分: 前后翻页 2、长按屏幕上下部分:连续翻页 3、水平左右横向滑动:前后翻页、阅读导航(CHM)...
  • 实例071 如何将字节单位B转换成GB、MB 和KB 108 实例072 身份证号从15位升到18位算法 109 第3章 面向对象编程思想 111 3.1 面向对象家族核心——类与类成员 112 实例073 面向对象编程核心——类、对象和引用 112 ...
  • 实例071 如何将字节单位B转换成GB、MB 和KB 108 实例072 身份证号从15位升到18位算法 109 第3章 面向对象编程思想 111 3.1 面向对象家族核心——类与类成员 112 实例073 面向对象编程核心——类、对象和引用 112 ...
  • 实例071 如何将字节单位B转换成GB、MB 和KB 108 实例072 身份证号从15位升到18位算法 109 第3章 面向对象编程思想 111 3.1 面向对象家族核心——类与类成员 112 实例073 面向对象编程核心——类、对象和引用 112 ...
  • 实例133 如何在图片平滑移动文字 165 3.7 图像动画 167 实例134 动画背景窗体 167 实例135 随鼠标移动的图像 169 实例136 十字光标定位 170 实例137 抓取鼠标形状 171 3.8 图像识别 172 实例138 ...
  • 程序开发范例宝典>>

    2012-10-24 10:41:28
    实例155 如何在图片中移动文字 220 4.7 图像动画 221 实例156 动画背景窗体 221 实例157 随鼠标移动的图像 223 实例158 十字光标定位 224 实例159 抓取鼠标指针的形状 225 实例160 图像的上下...
  • 实例138 如何在图片平滑移动文字 201 4.7 图像动画 202 实例139 动画背景窗体 202 实例140 随鼠标移动的图像 203 实例141 十字光标定位 204 实例142 抓取鼠标形状 206 4.8 图像识别 207 实例143 ...
  • 实例155 如何在图片中移动文字 220 4.7 图像动画 221 实例156 动画背景窗体 221 实例157 随鼠标移动的图像 223 实例158 十字光标定位 224 实例159 抓取鼠标指针的形状 225 实例160 图像的上下对接显示 226 实例161 ...
  • 实例155 如何在图片中移动文字 220 4.7 图像动画 221 实例156 动画背景窗体 221 实例157 随鼠标移动的图像 223 实例158 十字光标定位 224 实例159 抓取鼠标指针的形状 225 实例160 图像的上下对接显示...
  • 实例155 如何在图片中移动文字 220 4.7 图像动画 221 实例156 动画背景窗体 221 实例157 随鼠标移动的图像 223 实例158 十字光标定位 224 实例159 抓取鼠标指针的形状 225 实例160 图像的上下对接显示...
  • 可以先下载apk运行到手机上看看效果,下载链接地址: apk如下所示 组件化apk的下载地址 02.项目运行 运行环境要求 Android studio 版本需要3.0之上,compileSdkVersion是28,gradle版本是3.2.1,gradle-...
  • C#程序开发范例宝典(第2版).part02

    热门讨论 2012-11-12 07:55:11
    实例155 如何在图片中移动文字 220 4.7 图像动画 221 实例156 动画背景窗体 221 实例157 随鼠标移动的图像 223 实例158 十字光标定位 224 实例159 抓取鼠标指针的形状 225 实例160 图像的上下对接显示 226 ...
  • C#程序开发范例宝典(第2版).part13

    热门讨论 2012-11-12 20:17:14
    实例155 如何在图片中移动文字 220 4.7 图像动画 221 实例156 动画背景窗体 221 实例157 随鼠标移动的图像 223 实例158 十字光标定位 224 实例159 抓取鼠标指针的形状 225 实例160 图像的上下对接显示 226 ...
  • 实例155 如何在图片中移动文字 220 4.7 图像动画 221 实例156 动画背景窗体 221 实例157 随鼠标移动的图像 223 实例158 十字光标定位 224 实例159 抓取鼠标指针的形状 225 实例160 图像的上下对接显示 226 ...
  • 实例155 如何在图片中移动文字 220 4.7 图像动画 221 实例156 动画背景窗体 221 实例157 随鼠标移动的图像 223 实例158 十字光标定位 224 实例159 抓取鼠标指针的形状 225 实例160 图像的上下对接显示 226 ...
  • C#.net_经典编程例子400个

    热门讨论 2013-05-17 09:25:30
    198 实例137 空心文字 199 实例138 如何在图片平滑移动文字 201 4.7 图像动画 202 实例139 动画背景窗体 202 实例140 随鼠标移动的图像 203 实例141 十字光标定位 204 实例142 ...
  • 实例073 使用正则表达式验证手机号 实例074 使用正则表达式验证身份证号 实例075 使用正则表达式验证两位小数 实例076 使用正则表达式验证一年的12个月份 实例077 使用正则表达式验证一个月的31天 实例078 ...
  • 实例073 使用正则表达式验证手机号 实例074 使用正则表达式验证身份证号 实例075 使用正则表达式验证两位小数 实例076 使用正则表达式验证一年的12个月份 实例077 使用正则表达式验证一个月的31天 实例078 ...
  • 实例073 使用正则表达式验证手机号 实例074 使用正则表达式验证身份证号 实例075 使用正则表达式验证两位小数 实例076 使用正则表达式验证一年的12个月份 实例077 使用正则表达式验证一个月的31天 实例078 ...
  •  实例073 使用正则表达式验证手机号 89  实例074 使用正则表达式验证身份证号 90  实例075 使用正则表达式验证两位小数 91  实例076 使用正则表达式验证一年的12个月份 92  实例077 使用正则表达式验证一个...
  • 本项目使用了大量Gif图片, 而且github国内的访问速度非常不稳定,导致文章页面打开稍慢, 为了解决大陆用户访问项目速度慢的问题, zhaoolee阿里云买了一台5M的VPS, 已将所有文章链接替换到v2fy.com域名下, 访问...
  • C#程序开发范例宝典

    2010-12-15 20:05:16
    实例138 如何在图片平滑移动文字...... 201 4.7 图像动画...... 202 实例139 动画背景窗体...... 202 实例140 随鼠标移动的图像...... 203 实例141 十字光标定位...... 204 实例142 抓取鼠标形状.........
  • 实例073 使用正则表达式验证手机号 89 实例074 使用正则表达式验证身份证号 90 实例075 使用正则表达式验证两位小数 91 实例076 使用正则表达式验证一年的12个月份 92 实例077 使用正则表达式验证一个月的31天 93 ...
  • 实例034 使用嵌套循环控制台输出九九乘法表 实例035 用while循环计算1+1/2!+1/3!…1/20! 实例036 for循环输出空心的菱形 实例037 foreach循环优于for循环 实例038 终止循环体 实例039 循环体的过滤器 实例...

空空如也

空空如也

1 2
收藏数 29
精华内容 11
关键字:

如何在手机上禁止缩放