找回密码
 立即注册
查看: 3008|回复: 0

HTML5拖拽:处理拖放事件

[复制链接]
发表于 2015-4-29 20:18:48 | 显示全部楼层 |阅读模式
处理拖放事件
在拖放数据传输
相关信息
本教程演示了如何在Tizen使用拖放。
注意: 这个功能只支持移动应用程序。


热身
熟悉HTML5拖拽API通过学习基本知识:
处理拖放事件创建可拖动元素和事件监听器来跟踪拖放事件。
在拖放数据传输做一个简单的谜题和拖拽把拼图块。

  • 处理拖放事件隐藏

    学习如何处理拖放事件是一个基本用户交互技巧:
    • 通过添加定义可拖动元素 draggable="true"属性:
      1. <h1>Drag and drop tutorial</h1>
      2. <div class="example_body">
      3.    <div id="drag-list">
      4.       <div class="drag-row" draggable="true">1</div>
      5.       <div class="drag-row" draggable="true">2</div>
      6.    </div>
      7.    <div>Drag state: <span id="log"></span></div>
      8. </div>
      复制代码
      2.为各种拖放事件添加事件监听器:
      1. <script>
      2.    var cols = document.querySelectorAll('#drag-list_.drag-row');
      3.    var colsLength = cols.length;

      4.    for (var i = 0; i < colsLength; i++)
      5.    {
      6.       cols[i].addEventListener('dragstart', dragStart, false);
      7.       cols[i].addEventListener('drag', dragIng, false);
      8.       cols[i].addEventListener('dragenter', dragEnter, false);
      9.       cols[i].addEventListener('dragover', dragOver, false);
      10.       cols[i].addEventListener('dragleave', dragLeave, false);
      11.       cols[i].addEventListener('drop', dragDrop, false);
      12.       cols[i].addEventListener('dragend', dragEnd, false);
      13.    };
      14. </script>
      复制代码
      3.定义事件处理程序的事件。 在这种情况下,每个事件处理程序在屏幕上显示文本。
      1. function dragIng(e)
      2. {
      3.    log.innerHTML = "drag"
      4. };

      5. function dragOver(e)
      6. {
      7.    e.preventDefault();
      8.    log.innerHTML = "dragOver"
      9. };

      10. function dragEnter(e)
      11. {
      12.    log.innerHTML = "dragEnter"
      13. };        

      14. function dragLeave(e)
      15. {
      16.    log.innerHTML = "dragLeave"
      17. };

      18. function dragDrop(e)
      19. {
      20.    e.stopPropagation();
      21.    log.innerHTML = "dragDrop"        
      22. };
      23.         
      24. function dragEnd(e)
      25. {
      26.    log.innerHTML = "dragEnd"
      27. };
      复制代码
      源代码这个用例相关的完整源代码,看到下面的文件:

在拖放数据传输隐藏

学习如何传输数据在一个简单的拖放拼图是一个基本用户交互技巧:
  • 通过添加定义可拖动元素 draggable="true"属性。
    在这个例子中,Tizen标志形象已经分裂,随机分配。 每个成像仪部分被定义为可拖动,这样用户可以按照正确的顺序重新排列的图像部分。
    1. <div class="example_body">
    2.    <div>Drag state: <span id="log"></span></div>
    3.    <div class="holder">
    4.       <div>
    5.          <img src="images/logo.png">
    6.          <p class="txt">Complete the puzzle to see a picture</p>
    7.       </div>
    8.       <ul id="puzzle">
    9.          <li class="puzzle-piece" draggable="true">
    10.             <img src="images/puzz_06.png">
    11.          </li>
    12.          <li class="puzzle-piece" draggable="true">
    13.             <img src="images/puzz_02.png">
    14.          </li>
    15.          <li class="puzzle-piece" draggable="true">
    16.             <img src="images/puzz_04.png">
    17.          </li>
    18.          <li class="puzzle-piece" draggable="true">
    19.             <img src="images/puzz_05.png">
    20.          </li>
    21.          <li class="puzzle-piece" draggable="true">
    22.             <img src="images/puzz_01.png">
    23.          </li>
    24.          <li class="puzzle-piece" draggable="true">
    25.             <img src="images/puzz_03.png">
    26.          </li>
    27.       </ul>
    28.    </div>
    29. </div>
    复制代码
    2.添加事件监听器 dragover , dragleave , dragstart , drop 事件:
    1. <script>
    2.    var cols = document.querySelectorAll('#puzzle_.puzzle-piece');
    3.    var colsLength = cols.length;
    4.    for (var i = 0; i < colsLength; i++)
    5.    {
    6.       cols[i].addEventListener('dragstart', dragStartHandler, false);
    7.       cols[i].addEventListener('dragover', dragOverHandler, false);
    8.       cols[i].addEventListener('dragleave', dragLeaveHandler, false);
    9.       cols[i].addEventListener('drop', dragDropHandler, false);
    10.    };
    11. </script>
    复制代码
    (在这种情况下,图像传输数据部分):
    • 声明 dragElem 变量,这是一个空对象的数据交换:
    1. var dragElem = null;
    复制代码

    2.使用 DataTransfer接口的 dragStartHandler () dragDropHandler () 事件处理程序交换图像部分:
  1. function dragStartHandler(e)
  2. {
  3.    /* Set data */
  4.    dragElem = this;
  5.    e.dataTransfer.effectAllowed = 'move';
  6.    e.dataTransfer.setData('text/html', this.innerHTML);
  7.    this.classList.add('over');
  8.    for (var i = 0; i < colsLength; i++)
  9.    {
  10.       cols[i].classList.add('start');
  11.    };
  12. };
  13. function dragDropHandler(e)
  14. {
  15.    /* Get data */
  16.    dragElem.innerHTML = this.innerHTML;
  17.    this.innerHTML = e.dataTransfer.getData('text/html');
  18.    for (var i = 0; i < colsLength; i++)
  19.    {
  20.       cols[i].className = "puzzle-piece";
  21.    };
  22.    /* Check key */
  23.    puzzleCheck();
  24. };
复制代码
3.检查完成的拼图,用户主要使用一个简单的数组,并比较用户密钥对拼图密钥(正确答案):
  1. var puzzleKey =  ["01", "02", "03", "04", "05", "06"];
  2. var puzzleArray = [];

  3. function puzzleCheck()
  4. {
  5.    /* Initialize the user key */
  6.    puzzleArray = [];
  7.    /* Insert the keys in the array */
  8.    for (var i = 0; i < colsLength; i++)
  9.    {
  10.       puzzleArray.push(cols[i].children[0].getAttribute('src').substring(12, 14));
  11.    };
  12.    originKey = puzzleKey.join();
  13.    userKey = puzzleArray.join();

  14.    if (originKey === userKey)
  15.    {
  16.       alert("Success !");
  17.    };
  18. };
复制代码
图:拖拽难题

源代码
这个用例相关的完整源代码,看到下面的文件:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
欢迎来到泰泽网:http://www.tizennet.com/ 泰泽论坛:http://bbs.tizennet.com/ 好没有内涵哦,快到设置中更改这个无聊的签名吧!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|泰泽应用|泰泽论坛|泰泽网|小黑屋|Archiver|手机版|泰泽邮箱|泰泽网 ( 蜀ICP备13024062号-1 )

GMT+8, 2024-4-19 16:03 , Processed in 0.066156 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表