美文网首页我爱编程
HTML5 第二部分 2018-03-31

HTML5 第二部分 2018-03-31

作者: 多佳小昕 | 来源:发表于2018-04-02 19:58 被阅读0次

    一、markdown

    1. 用普通文本描述富文本
    2. 扩展名md

    http://wowubuntu.com/markdown/
    我们要写一个应用程序,需要用到什么东西,这些东西可能是js或者jq提供给我们的一些方法,这些东西就叫API。

    二、基础IAPI提升

    1. 新选择器
      提供类似于jQuery中选择器的API
    • 通过类名查找元素
      document.getElementById('section1'); √
      document.getElementsByTagName('div'); √
      document.getElementsByClassName('section'); 这是新的,查找class类名
    • 通过CSS语法查找元素
      document.querySelectorAll('ul'); 取一个元素类型是dom类型的数组
      document.querySelectorAll('.container');
      document.querySelector('div.container > .inner'); 取一个的dom对象,这是jq的写法,h5也可以用了
      但是$(".container") 返回的是一个jq对象。(dom元素的数组)
      本质上都是获取dom数组,只不过jq多一些其他成员
      dom数组的成员的注册事件不能像jq一样直接注册,要遍历挨个注册!
    var items = document.querySelectorAll('ul > .item');
          console.log(items);
          for (var i = 0; i < items.length; i++) {
            items[i].addEventListener('click', function(e) {
              console.log(1111);
            });
          }
    

    H5就是将我们经常用的操作又包装一层。

    1. Element.classList
      提供类似于jQuery中CSS操作的API
    • add添加类、remove移除类
     (function() {
          // 1.获取所有li元素
          var lis =  document.querySelectorAll('.nav > li');
          for(var i = 0; i<lis.length; i++){
            var item = lis[i];
          //2.遍历,给所有的元素注册click事件
            item.addEventListener('mouseover',function(e){
          //3. 要重置一下其他的active样式
              for(var i = 0; i<lis.length;i++){
                lis[i].classList.remove('active');
              }
          // 4.把正在执行的元素active
              this.classList.add('active');
              console.log(this.classList);
              e.preventDefault();
            })}
        })();
    
    • contains包含、toggle切换
     link.addEventListener('click',function(e){
          var exist = this.classList.contains('active');
          // toggle函数的第二个参数为true是添加,false是删除
          this.classList.toggle('active',!exist);
          e.preventDefault();
        })
    
    1. 访问历史api
      在此之前我们可以通过history对象实现前进(forward)、后退(back)和刷新(go)之类的操作
      H5中开放了更多的API:历史状态操作
      我们可以通过window.history去操作历史状态,让一个页面可以有多个历史状态
      HTML5 history API包括:

    history.pushState()方法:新增状态
    history.replaceState()方法:替换状态
    window.onpopstate事件:得到状态

    默认样式是有必要的,并不是把它清除掉,而是为了给所有的浏览器设置默认样式,统一化;
    不推荐用*去设置默认样式效率低

    (function() {
         var listElement = document.querySelector("#list");
         for(var title in data) {
          var liElement = document.createElement("li");
          liElement.innerHTML  = title;
          liElement.setAttribute('data-title',title);
          listElement.appendChild(liElement);
         }
         var lisElement = document.querySelectorAll("#list>li");
         var content = document.querySelector("#content");
         for(var i = 0; i < lisElement.length; i++){
          lisElement[i].addEventListener('click',function(){
            var title = this.dataset['title'];
            content.innerHTML = data[title];
            if(window.history && history.pushState){
              history.pushState(title,"title没有任何浏览器支持","?t="+title);
              // 添加一个新的历史记录
            }
            else{
                console.log("不支持");
              }
          });
         }
         // 当我们在伪造的访问历史中前进后退时,会执行popstate事件:push里面的元素
         window.addEventListener("popstate",function(e){
          content.innerHTML = data[e.state];
         });
         var title = window.location.search.split('=')[1];
         if(title){
          console.log(decodeURI(title));
          content.innerHTML = data[decodeURI(title)];
         }
        })();
    

    js操作不会被浏览器记住,不会回到之前的状态
    new Date() 一个时间对象
    toLocalTimeString()转换成我们能认识的时间字符串
    toLocalDateString()日期字符串

    1. 全屏api(很少用到)
      点击某处使页面全屏:
       var elem = 需要全屏的元素;
         if (elem.webkitRequestFullScreen) {
           elem.webkitRequestFullScreen();
         } else if (elem.mozRequestFullScreen) {
           elem.mozRequestFullScreen();
         } else if (elem.requestFullScreen){
           elem.requestFullScreen ();
         }
    

    三、网页存储

    1. Application Cache
      就是让网页可以离线访问的技术
      <html manifest="cache.manifest">
    CACHE MANIFEST
    # version 1.0.7
    
    CACHE:
      cache.css
      cache.js
      05-application-cache.html
      toy.png
    
    NETWORK:
      *
    

    satckedit就可以离线markdown

    1. web storage
      localStorage:永久保存
      &
      sessionStorage:关闭浏览器就过期
    var btnSet = document.querySelector('#btn_set');
    var btnGet = document.querySelector('#btn_get');
    var txtValue = document.querySelector('#txt_value');
    btnGet.addEventListener('click', function() {
      // txtValue.value = localStorage.getItem('key1');
      //若果不存在这个值,会返回空,而下面这个方法会返回undefined
      txtValue.value = localStorage['key1'];
    });
    btnSet.addEventListener('click', function() {
      // localStorage.setItem('key1', txtValue.value);
      localStorage['key1'] = txtValue.value;
    });
    
    1. 文件系统(提供客户端本地操作文件的可能)
    • fileAPI
      对于表单里的input,可以通过name属性直接找到
      document.forms[0].input_file
    <input id="input_1" class="form-control" name="input_1" type="file">
    // script
    var input = document.querySelector('#input_1');
    // 获取文件域中选择的文件
    // var file = input.files[0];
    var file = input.files.item(0);
    
    • FileReader
      用来读取本地文件的对象
    var reader = new FileReader();
    reader.addEventListener('load', function () {
      this.result; // 读取出来的结果
    });
    reader.readAsText(file); // 以文本的形式读取
    reader.readAsDataURL(file); // 以DataURI的形式读取
    // 以下(后台工程师用,前端不会用到)
    reader.readAsBinaryString(file); // 二进制格式
    reader.readAsArrayBuffer(file); // 字节数组
    

    拖拽操作小案例:
    思路:
    先获取目标框,进行拖入拖出事件的注册,然后中间要进行阻止默认事件。
    拽入框内后:先获取到文件,遍历文件并添加小li,给li添加内容(关于文件的 信息)
    如果是文字,获取文字内容并赋值,如果是图片,添加一个img元素并把地址赋进去。

        (function() {
          // 找到目标位置框框
          var target = document.querySelector('#target');
          var fileList = document.querySelector('#result');
          // 注册拖拽进入
          target.addEventListener('dragenter', function() {
            this.classList.add('actived');
          });
          // 离开
          target.addEventListener('dragleave', function() {
            this.classList.remove('actived');
          });
    
          // 如果想要捕获drop事件 就一定得在该事件中阻止默认事件
          target.addEventListener('dragover', function(e) {
            e.preventDefault();
            e.stopPropagation();
          });
    
          // 当元素放到该对象上
          target.addEventListener('drop', function(e) {
    
            if (e.dataTransfer.files.length) {
              var files = e.dataTransfer.files;
              for (var i = 0; i < files.length; i++) {
                var li = document.createElement('li');
                li.setAttribute('class', 'list-group-item');
                // 创建信息的子节点
                li.innerHTML = '<h5 class="list-group-item-heading">' + files[i].name + '</h5><p class="list-group-item-text">' + files[i].lastModifiedDate.toLocaleDateString() + ' ' + files[i].lastModifiedDate.toLocaleTimeString() + ' ' + (files[i].size / 1024).toFixed(2) + 'KB</p>';
                fileList.appendChild(li);
              }
            } else {
              // 短路运算
              // var data = e.dataTransfer.getData('text/plain') || e.dataTransfer.getData('text/uri-list');
              var data = e.dataTransfer.getData('text/plain');
              if (data) {
                // 拖入的是文本
                target.innerHTML = data;
              } else {
                var img = document.createElement('img');
                img.src = e.dataTransfer.getData('text/uri-list');
                target.appendChild(img);
              }
            }
    
            this.classList.remove('actived');
    
            e.preventDefault();
            e.stopPropagation();
          });
    
        })();
    

    相关文章

      网友评论

        本文标题:HTML5 第二部分 2018-03-31

        本文链接:https://www.haomeiwen.com/subject/tdngcftx.html