• 给一组按钮绑定事件——[js练习]


    题目要求

    提供的代码是一个编辑器组件,但功能还不完善,需要为该编辑器的工具栏按钮绑定相关事件(可使用 jQuery ),具体要求如下:

    1、为 #js-add-fontsize 元素绑定 click 事件

    当事件触发后改变编辑器内文本字体为 20px。

    2、为 #js-change-bg 元素绑定 click 事件

    当事件触发后改变编辑器的背景颜色色值为 "#6b6b6b", 文字颜色为 "#fff"。

    3、为 #js-toggle-opacity 按钮元素绑定 click 事件

    当事件触发后,如果 #editor 元素透明度( opacity )大于 0, 则设置 #editor 元素透明度为 0,否则设置 #editor 元素透明度为 1。

    HTML结构如下:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>编写一个 jQuery 事件监听器</title>
        <style>
          #editor {
            width: 90%;
            display: block;
            height: 300px;
            margin: 20px auto;
            padding: 10px;
            font-size: 14px;
            line-height: 1.5;
            background-color: '#fff';
            color: '#000';
          }
          #operation {
            text-align: center
          }
          button {
            background: #fff;
            color: #000;
            border: 2px solid #000;
            padding: 10px;
            border-radius: 4px;
          }
        </style>
    </head>
    <body>
        <!-- 请在index.js文件中完成练习    -->
        <textarea id="editor">
          经过刚才的学习,相信你对Next学位有一定的了解了。所谓千里之行,始于足下,现在我们着手开始第一份项目作业吧:)
          项目说明
          在开始专业学习前,我们想先听听你的声音,所以希望你根据以下两点写一篇简单的感想:
          分享一下你想成为前端工程师的初衷是什么;
          写下你对未来职业的规划,包括你的阶段性目标、你最终希望达到的目标;
          建议你将自己的真实想法写下来,这有助于我们进一步了解你。你的作业将会由我们Imweb的技术专家团来审阅,他们会结合自己的经验,给你提出一些有价值的建议。
          项目审阅规则
          收到你的项目作业后,我们会在7天内将审阅结果反馈给你,请届时返回此页面进行查看。
        </textarea>
        <div id="operation">
          <button id="js-add-fontsize">编辑器文字变大</button>
          <button id="js-change-bg">编辑器颜色变暗</button>
          <button id="js-toggle-opacity">显示/隐藏编辑器</button>
        </div>
        <!-- 引入jQuery-->
        <script src="https://7.url.cn/edu/jslib/jquery/1.9.1/jquery.min.js"></script>
    </body>
    </html>

    要求写的index.js如下

    var $editor = $('#editor');  //已给
    
    $('#js-add-fontsize').on('click',function(event){
       $editor.css('font-size','20px');
    });
    
    $('#js-change-bg').on('click',function(event){
        $editor.css('background','#6b6b6b');
        $editor.css('color','#fff');
    });
    
    $('#js-toggle-opacity').on('click',function(event){
       if ($editor.css('opacity')>0) {
           $editor.css('opacity',0);
       }
       else{
           $editor.css('opacity',1);
       }
    });

    注意:第一次没对的原因在于——#editor 元素透明度( opacity )判断和后期取值的写法问题

    一开始漏了其中的css,还有把数字也用引号包裹了,还有没用逗号用的==/=

    官答:

    实现编辑器按钮的功能,可以有两种方式:

    1、在每个按钮元素上添加事件监听器

    思路:

    • 获取编辑器元素和按钮元素
    • 给每个按钮写一次事件绑定
    // 获取编辑器元素
    var $editor = $('#editor');
    /*
     * 1、为 #js-add-fontsize 元素绑定 click 事件
     * 当事件触发后改变编辑器内文本字体增大 2 px,如原来字体大小为 12 px,点击 #button1 则变成 14px
     */
    $('#js-add-fontsize').click(function() {v
      $editor.css('font-size', '20px');
    });
    /*
     * 2、为 #js-change-bg 元素绑定 click 事件
     * 当事件触发后改变编辑器的背景颜色色值为 "#6b6b6b", 文字颜色为 "#fff"
     */
    $('#js-change-bg').click(function() {
      $editor.css({
        'background-color': '#6b6b6b',
        'color': '#fff'
      });
    });
    /*
     * 3、为 #js-toggle-visibility 按钮元素绑定 click 事件
     * 当事件触发后,如果 #editor 元素透明度( opactity )大于 0, 则设置 #editor 元素透明度为1,否则设置 #editor 元素透明度为0
     */
    $('#js-toggle-opacity').click(function() {
      if ($editor.css('opacity') > 0) {
        $editor.css('opacity', 0);
      } else {
        $editor.css('opacity', 1);
      }
    });

    2、使用事件代理(委托)

    思路:

    • 获取编辑器元素和按钮父元素 #operation
    • 将按钮的事件委托到按钮父元素,通过按钮父元素来分发请求

    需了解的是:事件委托是事件冒泡的一个应用,将事件的监听和执行操作完全委托给了其父节点,可以减少子元素绑定事件的个数,也不必担心子节点被替换后可能需要进行重新的事件绑定。如果页面中含有大量元素需要绑定事件,这样做会减少事件绑定数量,同时提高页面性能。

    在事件绑定上,jQuery 提供了一种更通用的函数:

    on(events,[selector],[data],fn)

    参数:

    • events:一个或多个用空格分隔的事件类型和可选的命名空间,如"click"或"keydown.myPlugin" 。
    • selector[可选]:一个选择器字符串用于过滤器的触发事件的选择器元素的后代。如果选择的< null或省略,当它到达选定的元素,事件总是触发。
    • data[可选]:当一个事件被触发时要传递event.data给事件处理函数。
    • fn:该事件被触发时执行的函数。 false 值也可以做一个函数的简写,返回false。
      将上述的功能改用on函数实现

    下面所示:

    var $editor = $('#editor');
    $('#operation').on('click', 'button', function() {
        // 获取button的id
        var btnId = $(this).attr('id');
        switch(btnId) {
          case 'js-add-fontsize':
            $editor.css('font-size', '20px');
            break;
          case 'js-change-bg':
            $editor.css({
              'background-color': '#6b6b6b',
              'color': '#fff'
            });
            break;
          case 'js-toggle-opacity':
            if ($editor.css('opacity') > 0) {
              $editor.css('opacity', 0);
            } else {
              $editor.css('opacity', 1);
            }
        }
    });
  • 相关阅读:
    ssd的BUG
    ImportError: No module named lmdb
    GPU卡掉卡
    mobileeye
    caffe convert mxnet
    学前书单-百科
    捉襟见肘
    caffe+opencv3.3.1
    ipython notebook开通远程
    到底什么是故事点(Story Point)?
  • 原文地址:https://www.cnblogs.com/chivasknight/p/8279069.html
Copyright © 2020-2023  润新知