挖坑指南:Vue.directive()自定义指令的实践(含源码)

前言

迫不及待想要上车试一试,直接贴代码吧。

开始

两个小例子,图片的加载优化以及第三方插件的配合使用。参考的资料在我分享的这篇博文中有记录,感兴趣的同学,可以参考更多。

<!DOCTYPE html>
<html lang="en"> 
  <head>
    <meta charset="UTF-8">
    <title>Vue自定义指令的使用与实践</title>
    <!-- 引入代码高亮的样式 -->
    <link href="https://cdn.bootcss.com/highlight.js/9.12.0/styles/monokai-sublime.min.css" rel="stylesheet">
    <style>.img{ width: 300px; height: 200px; background-size: 100%; }</style></head>
  <body>
    <div id="app">
      <!-- v-img -->
      <div class="img" v-for="img in imgList" :key="index" v-img:async.lazy="img.url"></div>
      <!-- v-highlight -->
      <div>
        <pre>
          <code v-highlight class="javascript">function init(){ $('pre code').each(function(i, block) { hljs.highlightBlock(block); }); }</code></pre>
      </div>
    </div>
  </body>
  <!-- 引入框架 -->
  <script src="https://unpkg.com/vue/dist/vue.js"></script>
  <!-- 引入插件 -->
  <script src="https://cdn.bootcss.com/highlight.js/9.12.0/highlight.min.js"></script>
  <script>window.onload = function() {
      // 写在new Vue()之前;可以在全局使用。
      Vue.directive('img', {
        inserted: function(el, binding) {
          // =值
          // console.log(binding.value);
          // :参数
          // console.log(binding.arg);
          // .修饰符
          // console.log(binding.modifiers);
          // #FFFFFF
          var color = Math.floor(Math.random() * 1000000);
          el.style.backgroundColor = '#' + color;

          var img = new Image();
          img.src = binding.value;
          img.onload = function() {
            setTimeout(function() {
              el.style.backgroundImage = 'url(' + binding.value + ')';
            },
            1000);
          }
        }
      });
      Vue.directive('highlight', {
        inserted: function(el) {
          console.log(el) hljs.highlightBlock(el);
        }
      }) new Vue({
        el: '#app',
        data: {
          msg: 'hello',
          imgList: [{
            url: 'http://img.zcool.cn/community/013ab856f4c9cd6ac72579487b51cc.jpg'
          },
          {
            url: 'http://s4.sinaimg.cn/mw600/001oLWdezy6LkMvA3RN63&690'
          },
          {
            url: 'http://img.zcool.cn/community/01d24457888b050000012e7e4c119a.png'
          }]
        }
      });
    }
    </script>
</html>

实践

纸上得来终觉浅,绝知此事要躬行。实践的过程中,一开始引入了highlight.js文件,没有引入相应的css。虽然进行了处理,但是看起来和普通的文本一样。所以...

BootCDN: https://www.bootcdn.cn/highlight.js/

来张效果图:

加载中

加载完成

总结

欢迎留言指导,感谢~或者扫描下方二维码,与我取得联系~  (记得备注:CSND喔~)

猜你喜欢

转载自blog.csdn.net/weixin_39015132/article/details/83274951
今日推荐