zoukankan      html  css  js  c++  java
  • HTML5拖放&地理定位

    内容概要

    1.JS原生拖放与HTML5拖放的区别

    2.拖放常用属性及事件

    3.dataTransfer对象的属性及方法

    4.HTML5地理定位

      API

      百度地图API

    一、JS原生拖放与HTML5拖放的区别

    原生 JS 拖拽效果的缺点

      1. 代码相对复杂与冗余

      2. 仅限于在浏览器内的元素间拖放

      3. 不能实现跨页面的拖放

    与 JS 原生相比 HTML5 拖放的优势

    1. HTML5 提供专门的拖放与播放的 API

    2. 触发多个事件,可控制鼠标的形状与移动时的效果。
    浏览器支持

      Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。

      注:在 Safari 5.1.2 中不支持拖放。
    创建拖放对象
    draggable 属性
    通过 draggable 告诉浏览器哪些元素需要实现拖拽功能。
    有三个可选值:

      true: 元素可以被拖拽

      false:元素不能被拖拽

      auto:浏览器自己判断元素是否能被拖拽 ( 默认 )
    对象拖放事件

    dragstart:按下鼠标键并开始移动时触发

    drag:在元素拖拽过程中持续触发

    dragend:元素拖拽停止时触发
    上述三个事件的目标都是被拖动的元素。
    对象拖放事件流程



    投放区事件流程

    元素被拖动到有效的放置目标时,下列事件会依次发生:
    1. dragenter:当拖拽对象进入投放区时触发

    2. dragover :拖拽对象在投放区内移动时持续触发

    3. dragleave:元素被拖出了投放区时触发

    4. drop :拖拽对象投放在投放区时触发
    虽然所有元素都支持放置目标事件,但这些元素默认是不允许放置的,需要重写事件的默认行为,例如:

    在ondragover中一定要执行 preventDefault() 否则ondrop事件不会被触发

    例子:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    *{
    margin: 0;
    padding: 0;
    list-style: none;
    }
    #con,#box{
    400px;
    height: 150px;
    margin: 50px auto 0;
    padding: 10px;
    border:2px solid red;
    }
    #con img,#box img{
    100px;
    height: 100px;
    margin: 10px;
    }
    .select{
    border:3px solid green;
    }
    #txt{
    font-size: 20px;
    color: blue;
    text-align: center;
    margin: 50px 0 0 ;
    }
    </style>
    </head>
    <body>
    <div id="con">
    <img src="../img/03.jpg" alt="tu1" draggable="true">
    <img src="../img/06.jpg" alt="tu2" draggable="true">
    <img src="../img/08.jpg" alt="tu3" draggable="true">
    </div>
    <h1 id="txt">被拖动目标为:</h1>
    <div id="box">

    </div>
    <script>
    var box=document.getElementById('box');
    var con=document.getElementById('con');
    var i=null;
    con.ondragstart=function(e){
      i=e.target;
      e.target.className='select';
      txt.innerHTML='被拖动目标为:'+i.alt;
    }
    box.ondragover=function(e){
    e.preventDefault();
    }
    box.ondrop=function(e){
    box.appendChild(i);
    }

    </script>
    </body>
    </html>

    dataTransfer对象方法
    dataTransfer 对象 (在event中)
      该对象专门用于携带拖放过程中的数据
    dataTransfer 对象--常用方法
      setData ( 数据格式,数据 )
        将拖放元素的数据存入dataTransfer对象中
      getData ( 数据格式 )
        读取存入dataTransfer对象中的数据
    数据格式常用值为“Text”或“URL”

    dataTransfer对象属性

    注意

    dropEffect属性搭配effectAllowed属性使用

    在dragstart事件处理程序中设置effectAllowed属性

    在dragover事件处理程序中设置dropEffect属性

    dropEffect 的每个可能值都会导致光标显示为不同的符号

    举个例子

    dataTransfer

    <script>
    var box=document.getElementById('box');
    var con=document.getElementById('con');
    var img=document.createElement('img');
    img.src='../img/icon.png';
    con.ondragstart=function(e){
      e.target.className='select';
      txt.innerHTML='被拖动目标为:'+e.target.alt;
      e.dataTransfer.setData('text',e.target.id);
      e.dataTransfer.setDragImage(img,0,0);
    }
    box.ondragover=function(e){
      e.preventDefault();
    }
    box.ondrop=function(e){
      var targetID=e.dataTransfer.getData('text');
      this.appendChild(document.getElementById(targetID));
    }

    </script>

    files 文件

      dataTransfer.files:

        如果是拖放文件,则返回正在拖放的文件列表FileList

      FileReader:

        专门用于读取文件,FileReader 接口提供一些读取文件的方法与一个包含读取结果的事件模型                 FileReader.readAsDataURL方法:

        参数为要读取的文件对象,将文件读取为DataUrl

      FileReader.onload事件:

        当读取文件成功完成的时候触发此事件,在事件触发后,你可以通过this.result来获取读取的文件数据,如果是图片,将返回base64格式的图片数据。

    例子

    <script>
    var box=document.getElementById('box');
    box.ondragover=function(e){
      e.preventDefault();
    }

    box.ondrop=function(e){
      e.preventDefault();
      // console.log(e.dataTransfer.files[0]);
      var f=e.dataTransfer.files[0];
      var fr=new FileReader();
      fr.readAsDataURL(f);
      fr.onload=function(e){
        console.log(e);
        var url=e.target.result;
        box.innerHTML+='<img src="'+url+'" alt="">';
      }

    }
    </script>

    Geolocation地理定位

    Geolocation API 用于获得用户的地理位置

    地理位置

      经度 : 南北极的连接线

      纬度 : 东西连接的线

      位置信息从何而来

        IP地址

        GPS全球定位系统

        Wi-Fi无线网络

        基站

    getCurrentPosition() 方法
     PS:单次定位请求

    getCurrentPosition( 1成功fn,2失败fn,{3数据收集} )

    1请求成功函数(必须的参数) fn(pos){}

    经度 : coords.longitude 纬度 : coords.latitude

    准确度 : coords.accuracy 海拔 : coords.altitude

    海拔准确度 : coords.altitudeAccuracy

    行进方向 : coords.heading

    地面速度 : coords.speed

    时间戳 : new Date(pos.timestamp)

    2请求失败函数:fn(error){}

      0 : 不包括其他错误编号中的错误

      1 : 用户拒绝浏览器获取位置信息

       2 : 尝试获取用户信息,但失败了

       3 : 设置了timeout值,获取位置超时了

    3数据收集 : (json的格式)

       enableHighAcuracy : 更精确的查找,默认false 、

      timeout : 超时时间(毫秒),默认infinity

       maximumAge : 指定缓存时间(毫秒),默认0
    watchPosition() 方法

    watchPosition( 1成功fn,2失败fn,{3数据收集} )

    PS:多次定位请求

    移动设备常用,位置改变会触发

    配置参数:frequency 更新的频率

    关闭更新请求 : clearWatch() 方法


    百度地图API
    百度地图接口文档:

    1.http://lbsyun.baidu.com/

    2.web开发--Javascript API

    3. 左边菜单--获取密钥(ak)

    4. 复制保存‘访问应用(AK)’即‘密钥

    ’ 5. 选择地图类型

    6. 复制代码

    例子:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    *{
    margin: 0;
    padding: 0;
    list-style: none;
    }
    #txt,#btn{
    font-size: 20px;
    color: red;
    }
    </style>
    </head>
    <body>
    <textarea name="" id="txt" cols="60" rows="20"></textarea>
    <button id="btn">请求</button>
    <script>
    var btn=document.getElementById('btn');
    var txt=document.getElementById('txt');
    btn.onclick=function(){
      var geo=navigator.geolocation;
      geo.getCurrentPosition(function(pos){
      txt.value+='经度:'+pos.coords.longitude+' ';
      txt.value+='纬度:'+pos.coords.latitude+' ';
      txt.value+='精确度:'+pos.coords.accuracy+' ';
      txt.value+='海拔:'+pos.coords.altitude+' ';
      txt.value+='海拔精确度:'+pos.coords.altitudeAccuracy+' ';
      txt.value+='行进方向:'+pos.coords.heading+' ';
      txt.value+='地面速度:'+pos.coords.speed+' ';
      txt.value+='时间戳:'+new Date(pos.timestamp);
    },function(error){
      alert(error.code+''+error.message);//错误代码//错误信息
    },{
      enableHighAcuracy:true,
      timeout:10000,
      maximumAge:1000*60

    });


    }
    </script>
    </body>
    </html>

    百度地图定位:

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
    body, html{ 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}
    #allmap {
    800px;
    height: 500px;
    border:1px solid red;
    margin: 50px auto 0;

    }
    </style>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=soHloI8mSD7pxAcbuF9DRUaUOyomqhlT"></script>
    <title>地图展示</title>
    </head>
    <body>
    <div id="allmap"></div>
    </body>
    </html>
    <script type="text/javascript">
    // 百度地图API功能
    var geo=navigator.geolocation;
    geo.getCurrentPosition(function(pos){
    var map = new BMap.Map("allmap");
    var point = new BMap.Point(pos.coords.longitude, pos.coords.latitude);
    map.centerAndZoom(point, 15);
    var marker = new BMap.Marker(point); // 创建标注
    map.addOverlay(marker); // 将标注添加到地图中
    marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
    map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
    },function(error){
    alert(error.code+''+error.message);//错误代码//错误信息
    },{
    enableHighAcuracy:true,
    timeout:10000,
    maximumAge:1000*60

    });

    </script>



  • 相关阅读:
    struts1与struts2的差别
    UVA 1563
    项目开发相关规范
    互联网产品的測试
    虚拟机器人
    Caused by: java.lang.ClassNotFoundException: org.hibernate.annotations.common.reflection.MetadataPro
    HDU 1429--胜利大逃亡(续)【BFS &amp;&amp; 状态压缩】
    自己写的php curl库实现整站克隆
    设置字符串中某些字符的特殊效果
    Objective-C学习笔记(二十二)——初始化方法init的重写与自己定义
  • 原文地址:https://www.cnblogs.com/SunShineM/p/6008771.html
Copyright © 2011-2022 走看看