从另一个函数获取或设置变量

霍雷

我正在使用此自定义JavaScript范围滑块,并且我希望能够获取和设置滑块值。我已经设置好了function(如果您有更好的方法,请告诉我。)我在实施getValue function

我尝试执行以下操作:

function getValue() {
    if (value) {
        return value;
    }
    return;
}

当我调用该函数时,出现以下错误:

未捕获的ReferenceError:未定义getValue

创建全局变量不是一种选择。如何获得滑块的值?

要设置或获取滑块值,我希望能够执行以下操作:

mySlider.Value = 17;              // Set Value
var currentValue = mySlider.Value // Get Value

JSFiddle

function rangeSlider(elem, config, update) {

  if (typeof update != "undefined" && update) {
    var dragger = elem.getElementsByTagName('span')[0];
    var range = elem.getElementsByTagName('div')[0];
    var isVertical = config.vertical;
    var rangeWidth = range[!isVertical ? 'offsetWidth' : 'offsetHeight'];
    var rangeOffset = range[!isVertical ? 'offsetLeft' : 'offsetTop'];
    var draggerWidth = dragger[!isVertical ? 'offsetWidth' : 'offsetHeight'];
    dragger.style[!isVertical ? 'left' : 'top'] = (config.value / 100 * rangeWidth - (draggerWidth / 2)) + 'px';
    return;
  }

  function getValue() {
    if (value) {
      return value;
    }
    return;
  }

  var html = document.documentElement,
    range = document.createElement('div'),
    dragger = document.createElement('span'),
    down = false,
    rangeWidth, rangeOffset, draggerWidth, cachePosition;

  var defaults = {
    value: 0, // set default value on initiation from `0` to `100` (percentage based)
    vertical: false, // vertical or horizontal?
    rangeClass: "", // add extra custom class for the range slider track
    draggerClass: "", // add extra custom class for the range slider dragger
    drag: function(v) { /* console.log(v); */ } // function to return the range slider value into something
  };

  for (var i in defaults) {
    if (typeof config[i] == "undefined") config[i] = defaults[i];
  }

  function addEventTo(el, ev, fn) {
    if (el.addEventListener) {
      el.addEventListener(ev, fn, false);
    } else if (el.attachEvent) {
      el.attachEvent('on' + ev, fn);
    } else {
      el['on' + ev] = fn;
    }
  }

  var isVertical = config.vertical;

  elem.className = (elem.className + ' range-slider ' + (isVertical ? 'range-slider-vertical' : 'range-slider-horizontal')).replace(/^ +/, "");
  range.className = ('range-slider-track ' + config.rangeClass).replace(/ +$/, "");
  dragger.className = ('dragger ' + config.draggerClass).replace(/ +$/, "");

  addEventTo(range, "mousedown", function(e) {
    html.className = (html.className + ' no-select').replace(/^ +/, "");
    rangeWidth = range[!isVertical ? 'offsetWidth' : 'offsetHeight'];
    rangeOffset = range[!isVertical ? 'offsetLeft' : 'offsetTop'];
    draggerWidth = dragger[!isVertical ? 'offsetWidth' : 'offsetHeight'];
    down = true;
    updateDragger(e);
    return false;
  });

  addEventTo(document, "mousemove", function(e) {
    updateDragger(e);
  });

  addEventTo(document, "mouseup", function(e) {
    html.className = html.className.replace(/(^| )no-select( |$)/g, "");
    down = false;
  });

  addEventTo(window, "resize", function(e) {
    var woh = dragger[!isVertical ? 'offsetWidth' : 'offsetHeight'];
    dragger.style[!isVertical ? 'left' : 'top'] = (((cachePosition / 100) * range[!isVertical ? 'offsetWidth' : 'offsetHeight']) - (woh / 2)) + 'px';
    down = false;
  });

  function updateDragger(e) {
    e = e || window.event;
    var pos = !isVertical ? e.pageX : e.pageY;
    if (!pos) {
      pos = !isVertical ? e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft : e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
    }
    if (down && pos >= rangeOffset && pos <= (rangeOffset + rangeWidth)) {
      dragger.style[!isVertical ? 'left' : 'top'] = (pos - rangeOffset - (draggerWidth / 2)) + 'px';
      cachePosition = Math.round(((pos - rangeOffset) / rangeWidth) * 100);
      config.drag(cachePosition);
    }
  }

  function initDragger() {
    var woh = dragger[!isVertical ? 'offsetWidth' : 'offsetHeight'];
    cachePosition = ((config.value / 100) * range[!isVertical ? 'offsetWidth' : 'offsetHeight']);
    dragger.style[!isVertical ? 'left' : 'top'] = (cachePosition - (woh / 2)) + 'px';
    config.drag(config.value);
  }

  range.appendChild(dragger);
  elem.appendChild(range);

  initDragger();

}

var slid1 = document.getElementById('range-slider-1');
var btn = document.getElementById('btn');
var anotherBtn = document.getElementById('anotherBtn');
var resultP = document.getElementById('results');

rangeSlider(slid1, {
  value: 10,
});
btn.onclick = function() {
  rangeSlider(slid1, {
    value: 50
  }, 1);
}

anotherBtn.onclick = function() {
  document.getElementById('results').innerHTML = "Your Current Value is: " + getValue();
}
.range-slider-track {
  height: 20px;
}
.range-slider-track:before {
  content: "";
  display: block;
  width: 100%;
  height: 2px;
  background-color: black;
}
.range-slider-track .dragger {
  display: block;
  width: 10px;
  height: inherit;
  position: relative;
  background-color: red;
}
<div id="range-slider-1"></div>
<button id="btn">Set Value</button>
<button id="anotherBtn">Get Value</button>
<p id="results"></p>

将要

将此javascript粘贴到原始小提琴中并使其正常工作:

function rangeSlider(elem, config, update) {
    var this_ = this;

    this.setValue = function(value) {
        var dragger = this.config.elem.getElementsByTagName('span')[0];
        var range = this.config.elem.getElementsByTagName('div')[0];
        var rangeWidth = range[!this.config.vertical ? 'offsetWidth' : 'offsetHeight'];
        var draggerWidth = dragger[!this.config.vertical ? 'offsetWidth' : 'offsetHeight'];
        dragger.style[!this.config.vertical ? 'left' : 'top'] = (value / 100 * rangeWidth - (draggerWidth / 2)) + 'px';
        this.config.value = value;
    };

    this.getValue = function() {
        return this.config.value;
    };

    var html = document.documentElement,
        range = document.createElement('div'),
        dragger = document.createElement('span'),
        down = false,
        rangeWidth, rangeOffset, draggerWidth, cachePosition;

    this.config = {
        value: (config.value || 0), // set default value on initiation from `0` to `100` (percentage based)
        vertical: (config.vertical || false), // vertical or horizontal?
        rangeClass: "", // add extra custom class for the range slider track
        draggerClass: "", // add extra custom class for the range slider dragger
        drag: function(v) { /* console.log(v); */ }, // function to return the range slider value into something
        elem: elem
    };

    addEventTo = function(el, ev, fn) {
        if (el.addEventListener) {
            el.addEventListener(ev, fn, false);
        } else if (el.attachEvent) {
            el.attachEvent('on' + ev, fn);
        } else {
            el['on' + ev] = fn;
        }
    }

    elem.className = (elem.className + ' range-slider ' + (this.config.vertical ? 'range-slider-vertical' : 'range-slider-horizontal')).replace(/^ +/, "");
    range.className = ('range-slider-track ' + config.rangeClass).replace(/ +$/, "");
    dragger.className = ('dragger ' + config.draggerClass).replace(/ +$/, "");

    addEventTo(range, "mousedown", function(e) {
        html.className = (html.className + ' no-select').replace(/^ +/, "");
        rangeWidth = range[!this_.config.vertical ? 'offsetWidth' : 'offsetHeight'];
        rangeOffset = range[!this_.config.vertical ? 'offsetLeft' : 'offsetTop'];
        draggerWidth = dragger[!this_.config.vertical ? 'offsetWidth' : 'offsetHeight'];
        down = true;
        updateDragger(e);
        return false;
    });

    addEventTo(document, "mousemove", function(e) {
        updateDragger(e);
    });

    addEventTo(document, "mouseup", function(e) {
        html.className = html.className.replace(/(^| )no-select( |$)/g, "");
        down = false;
    });

    addEventTo(window, "resize", function(e) {
        var woh = dragger[!this.config.vertical ? 'offsetWidth' : 'offsetHeight'];
        dragger.style[!this.config.vertical ? 'left' : 'top'] = (((cachePosition / 100) * range[!this.config.vertical ? 'offsetWidth' : 'offsetHeight']) - (woh / 2)) + 'px';
        down = false;
    });

    function updateDragger(e) {
        e = e || window.event;
        var pos = !this_.config.vertical ? e.pageX : e.pageY;
        if (!pos) {
            pos = !this_.config.vertical ? e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft : e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
        }
        if (down && pos >= rangeOffset && pos <= (rangeOffset + rangeWidth)) {
            dragger.style[!this_.config.vertical ? 'left' : 'top'] = (pos - rangeOffset - (draggerWidth / 2)) + 'px';
            cachePosition = Math.round(((pos - rangeOffset) / rangeWidth) * 100);
            this_.config.value = cachePosition;
            this_.config.drag(cachePosition);
        }
    };

    this.initDragger = function() {
        var woh = dragger[!this.config.vertical ? 'offsetWidth' : 'offsetHeight'];
        cachePosition = ((config.value / 100) * range[!this.config.vertical ? 'offsetWidth' : 'offsetHeight']);
        dragger.style[!this.config.vertical ? 'left' : 'top'] = (cachePosition - (woh / 2)) + 'px';
        this.config.drag(this.config.value);
    };

    range.appendChild(dragger);
    elem.appendChild(range);

    this.initDragger();

}

var slid1 = document.getElementById('range-slider-1');
var btn = document.getElementById('btn');
var anotherBtn = document.getElementById('anotherBtn');
var resultP = document.getElementById('results');

var rs = new rangeSlider(slid1, {
    value: 10,
});

var slid2 = document.getElementById('range-slider-2');
var rs2 = new rangeSlider(slid2, {
    value: 20,
});


btn.onclick = function() {
    rs.setValue(50);
}
anotherBtn.onclick = function() {
    document.getElementById('results').innerHTML = "Range 1: " + rs.getValue() + '<br/>Range2: ' + rs2.getValue();
}

而且此html还:

<div id="range-slider-1"></div>
<button id="btn">Set Value</button>
<button id="anotherBtn">Get Value</button>
<div id="range-slider-2"></div>
<p id="results"></p>

就像其他海报所说的那样,您需要稍微修复一下功能。我没有时间清理新代码,但是我相信您会明白的。请记住以下几点:

  1. 您想通过调用新的rangeSlider创建一个新对象。
  2. 您可以将新对象分配给变量,以便可以使用该变量来设置或获取值。
  3. 注意var this_ = this语句,因此我们甚至在某些事件中也可以访问对象实例,因为这些事件中的this可能是DOM中的实际元素。
  4. 这种新方法与原始代码一样,支持文档中的多个滑块,但是获取和设置值要简单得多,也更干净。

我敢肯定,我们可以进一步清理此代码,请尽情享受。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

jQuery从另一个函数获取变量

来自分类Dev

从另一个回调函数获取变量

来自分类Dev

如何从另一个函数获取变量?

来自分类Dev

从函数获取变量到另一个javascript

来自分类Dev

如何从另一个函数中的一个函数获取返回变量

来自分类Dev

jquery ajax从一个函数获取变量到另一个php

来自分类Dev

无法在从另一个函数调用它的函数中设置变量

来自分类Dev

如何通过python函数从另一个python函数获取更新的变量?

来自分类Dev

如何获取一个变量的值并将其设置为等于类中的另一个变量?

来自分类Dev

如何在一个函数中设置全局变量并使另一个函数访问它?

来自分类Dev

$ _SESSION变量是否未设置,直到我调用另一个函数?

来自分类Dev

在main()中,如何从另一个函数中的静态变量获取值?

来自分类Dev

如何从另一个vbscript(另一个.vbs文件)获取变量

来自分类Dev

jQuery,使用函数内部变量的值来设置该函数外部另一个变量的值

来自分类Dev

在另一个线程中设置变量

来自分类Dev

从另一个Python脚本设置外部变量

来自分类Dev

触发另一个管道并设置变量

来自分类Dev

从另一个文件设置作业变量的值

来自分类Dev

如何将一个值设置为一个类中的变量并从另一个类中获取该变量的值?

来自分类Dev

从另一个组件访问变量/函数

来自分类Dev

读取另一个函数的变量

来自分类Dev

JS->从另一个函数访问变量

来自分类Dev

使用另一个函数中定义的变量

来自分类Dev

从另一个函数访问对象中的变量

来自分类Dev

如何从另一个函数读取变量?

来自分类Dev

使用AngularJS访问另一个函数的变量

来自分类Dev

python访问另一个函数变量错误

来自分类Dev

从python中的另一个函数调用变量

来自分类Dev

PHP从另一个函数访问变量

Related 相关文章

  1. 1

    jQuery从另一个函数获取变量

  2. 2

    从另一个回调函数获取变量

  3. 3

    如何从另一个函数获取变量?

  4. 4

    从函数获取变量到另一个javascript

  5. 5

    如何从另一个函数中的一个函数获取返回变量

  6. 6

    jquery ajax从一个函数获取变量到另一个php

  7. 7

    无法在从另一个函数调用它的函数中设置变量

  8. 8

    如何通过python函数从另一个python函数获取更新的变量?

  9. 9

    如何获取一个变量的值并将其设置为等于类中的另一个变量?

  10. 10

    如何在一个函数中设置全局变量并使另一个函数访问它?

  11. 11

    $ _SESSION变量是否未设置,直到我调用另一个函数?

  12. 12

    在main()中,如何从另一个函数中的静态变量获取值?

  13. 13

    如何从另一个vbscript(另一个.vbs文件)获取变量

  14. 14

    jQuery,使用函数内部变量的值来设置该函数外部另一个变量的值

  15. 15

    在另一个线程中设置变量

  16. 16

    从另一个Python脚本设置外部变量

  17. 17

    触发另一个管道并设置变量

  18. 18

    从另一个文件设置作业变量的值

  19. 19

    如何将一个值设置为一个类中的变量并从另一个类中获取该变量的值?

  20. 20

    从另一个组件访问变量/函数

  21. 21

    读取另一个函数的变量

  22. 22

    JS->从另一个函数访问变量

  23. 23

    使用另一个函数中定义的变量

  24. 24

    从另一个函数访问对象中的变量

  25. 25

    如何从另一个函数读取变量?

  26. 26

    使用AngularJS访问另一个函数的变量

  27. 27

    python访问另一个函数变量错误

  28. 28

    从python中的另一个函数调用变量

  29. 29

    PHP从另一个函数访问变量

热门标签

归档