2010-10-01 9 views
6

पर पैडिंग जोड़ें क्या jQuery UI स्लाइडर के स्लाइडर-बार में पैडिंग जोड़ने का कोई आसान तरीका है? मैं स्लाइडर-हैंडल को बार के सिरों तक नहीं पहुंचने में सक्षम होना पसंद करूंगा। तो अगर यह नियमित रूप से बाएं छोर है:jQuery UI स्लाइडर

:

padding of 10px for instance 
\/ 
--[]---------------- 

मैं सीएसएस फ़ाइल में इस की कोशिश की:

no padding 
\/ 
[]------------------ 

मैं इसे बाईं तरफ पैडिंग की (और सही) अंत चाहते हैं

.ui-slider-horizontal { height: .8em; padding: 0 10px; }

लेकिन यह jQuery यूआई स्लाइडर पा बिना, संभाल की रपट सीमा निर्धारित करने के लिए पूरा (outerWidth()) चौड़ाई का उपयोग करता चौड़ाई के बजाय लगता है dding। मैंने कोड को हैकिंग करने का भी प्रयास किया, outerWidth() को width() के साथ बदल दिया, लेकिन यह कुछ भी नहीं किया।

मैं स्पष्ट रूप से न्यूनतम और अधिकतम मानों को सेट करने के एक हैक का सहारा लेना नहीं चाहता हूं। मूल्यों को हमेशा उम्मीद के अनुसार काम करना चाहिए।

कोई सुझाव?

संपादित करें:

pkauko की टिप्पणी के बाद; मैं एक तत्व यह ऊपर तीन लेबल है कि के रूप में स्लाइडर का उपयोग कर रहा:

not      very 
important important important 
----[]-----------[]----------[]---- 

ऊपर चित्रण पदों जहाँ मैं संभाल प्रकट करना चाहते हैं, लेबल के नीचे केंद्रित इंगित करता है। लेकिन बार को दृष्टि से किनारों तक फैलाने की जरूरत है।

+0

मैं सिर्फ तुम क्यों ऐसा लगता है कि काम करने के लिए चाहते हो जाएगा करने के लिए उत्सुक हूँ इस? जब तक विचार यह न हो कि आप स्लाइडर का उपयोग करके न्यूनतम और अधिकतम मान सेट नहीं कर सकते हैं न कि केवल उपस्थिति। अन्यथा यह ऐसा लगता है कि स्लाइडर ठीक से काम नहीं कर रहा है अगर यह स्लाइड के बहुत अंत में नहीं है जब न्यूनतम या अधिकतम मान सेट होता है। – pkauko

+0

@pkauko: मैंने अपने प्रश्न में जो जोड़ा है उसे देखें। –

+0

आह ठीक है, अब मैं देख सकता हूं कि आप इसे वर्णित की तरह काम क्यों करना चाहते हैं। बहुत बुरा मैं वांछित व्यवहार को प्राप्त करने में आपकी मदद नहीं कर सकता। हालांकि मुझे एक विचार हो सकता है और मैं जल्द ही जवाब दूंगा। – pkauko

उत्तर

6

ठीक है, मैं अक्सर खुद को चाहता था, लेकिन वास्तव में प्रेरणा वास्तव में बैठने के लिए नहीं था और इसलिए इसके बारे में कुछ भी। चूंकि आपने अभी पूछा है, मैंने अनुरोध किया है कि मैंने पैडिंग विकल्पों को जोड़ने के लिए jQuery UI के स्लाइडर को दबा दिया है और हैक किया है।

नोट: मैंने इसे केवल एक ही हैंडल के साथ क्षैतिज स्लाइडर्स के लिए जोड़ा है। अन्य मामले अब और जटिल नहीं हैं। मेरे पास टाइपिंग करने के लिए प्रेरणा नहीं थी और बाद में परीक्षण उन मामलों को कवर करने के लिए किया गया था जिनकी शायद आवश्यकता नहीं थी।

jQuery UI से मूल स्लाइडर को शामिल करने के बाद इस कोड को शामिल करें। एक्सटेंशन कुछ तरीकों को ओवरराइट करता है और स्लाइडर विजेट में 'पैडिंगमिन' और 'पैडिंगमैक्स' विकल्प जोड़ता है (मानों को संख्यात्मक होना चाहिए और उन्हें पिक्सल के रूप में व्याख्या किया जाएगा; यह भी आसानी से अन्य इकाइयों को लेने के लिए बढ़ाया जा सकता है, लेकिन फिर से वर्तमान में अनिश्चित मामलों के लिए अधिक टाइपिंग/परीक्षण का संकेत देगा)।

सरल उदाहरण उपयोग:

$('#slider').slider({ paddingMin: 50, paddingMax: 100 }); 

एक्सटेंशन हैक कोड (के रूप में है प्रदान की है, मुझे पर मुकदमा नहीं है):

(
    function($, undefined) 
    { 
     $.ui.slider.prototype.options = 
      $.extend(
       {}, 
       $.ui.slider.prototype.options, 
       { 
        paddingMin: 0, 
        paddingMax: 0 
       } 
      ); 

     $.ui.slider.prototype._refreshValue = 
      function() { 
       var 
        oRange = this.options.range, 
        o = this.options, 
        self = this, 
        animate = (!this._animateOff) ? o.animate : false, 
        valPercent, 
        _set = {}, 
        elementWidth, 
        elementHeight, 
        paddingMinPercent, 
        paddingMaxPercent, 
        paddedBarPercent, 
        lastValPercent, 
        value, 
        valueMin, 
        valueMax; 

       if (self.orientation === "horizontal") 
       { 
        elementWidth = this.element.outerWidth(); 
        paddingMinPercent = o.paddingMin * 100/elementWidth; 
        paddedBarPercent = (elementWidth - (o.paddingMin + o.paddingMax)) * 100/elementWidth; 
       } 
       else 
       { 
        elementHeight = this.element.outerHeight(); 
        paddingMinPercent = o.paddingMin * 100/elementHeight; 
        paddedBarPercent = (elementHeight - (o.paddingMin + o.paddingMax)) * 100/elementHeight; 
       } 

       if (this.options.values && this.options.values.length) { 
        this.handles.each(function(i, j) { 
         valPercent = 
          ((self.values(i) - self._valueMin())/(self._valueMax() - self._valueMin()) * 100) 
          * paddedBarPercent/100 + paddingMinPercent; 
         _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; 
         $(this).stop(1, 1)[ animate ? "animate" : "css" ](_set, o.animate); 
         if (self.options.range === true) { 
          if (self.orientation === "horizontal") { 
           if (i === 0) { 
            self.range.stop(1, 1)[ animate ? "animate" : "css" ]({ left: valPercent + "%" }, o.animate); 
           } 
           if (i === 1) { 
            self.range[ animate ? "animate" : "css" ]({ width: (valPercent - lastValPercent) + "%" }, { queue: false, duration: o.animate }); 
           } 
          } else { 
           if (i === 0) { 
            self.range.stop(1, 1)[ animate ? "animate" : "css" ]({ bottom: (valPercent) + "%" }, o.animate); 
           } 
           if (i === 1) { 
            self.range[ animate ? "animate" : "css" ]({ height: (valPercent - lastValPercent) + "%" }, { queue: false, duration: o.animate }); 
           } 
          } 
         } 
         lastValPercent = valPercent; 
        }); 
       } else { 
        value = this.value(); 
        valueMin = this._valueMin(); 
        valueMax = this._valueMax(); 
        valPercent = 
         ((valueMax !== valueMin) 
         ? (value - valueMin)/(valueMax - valueMin) * 100 
         : 0) 
         * paddedBarPercent/100 + paddingMinPercent; 

        _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; 

        this.handle.stop(1, 1)[ animate ? "animate" : "css" ](_set, o.animate); 

        if (oRange === "min" && this.orientation === "horizontal") { 
         this.range.stop(1, 1)[ animate ? "animate" : "css" ]({ width: valPercent + "%" }, o.animate); 
        } 
        if (oRange === "max" && this.orientation === "horizontal") { 
         this.range[ animate ? "animate" : "css" ]({ width: (100 - valPercent) + "%" }, { queue: false, duration: o.animate }); 
        } 
        if (oRange === "min" && this.orientation === "vertical") { 
         this.range.stop(1, 1)[ animate ? "animate" : "css" ]({ height: valPercent + "%" }, o.animate); 
        } 
        if (oRange === "max" && this.orientation === "vertical") { 
         this.range[ animate ? "animate" : "css" ]({ height: (100 - valPercent) + "%" }, { queue: false, duration: o.animate }); 
        } 
       } 
      }; 

     $.ui.slider.prototype._normValueFromMouse = 
      function(position) { 
       var 
        o = this.options, 
        pixelTotal, 
        pixelMouse, 
        percentMouse, 
        valueTotal, 
        valueMouse; 

       if (this.orientation === "horizontal") { 
        pixelTotal = this.elementSize.width - (o.paddingMin + o.paddingMax); 
        pixelMouse = position.x - this.elementOffset.left - o.paddingMin - (this._clickOffset ? this._clickOffset.left : 0); 
       } else { 
        pixelTotal = this.elementSize.height - (o.paddingMin + o.paddingMax); 
        pixelMouse = position.y - this.elementOffset.top - o.paddingMin - (this._clickOffset ? this._clickOffset.top : 0); 
       } 

       percentMouse = (pixelMouse/pixelTotal); 
       if (percentMouse > 1) { 
        percentMouse = 1; 
       } 
       if (percentMouse < 0) { 
        percentMouse = 0; 
       } 
       if (this.orientation === "vertical") { 
        percentMouse = 1 - percentMouse; 
       } 

       valueTotal = this._valueMax() - this._valueMin(); 
       valueMouse = this._valueMin() + percentMouse * valueTotal; 

       return this._trimAlignValue(valueMouse); 
      }; 
    } 
)(jQuery); 
+0

मैंने आपके संपादन में देखा है, कि आप इसे प्री-डिफ़ाइंड स्नैपिंग मानों के साथ उपयोग करना चाहते हैं। मैंने अभी तक उस उपयोग मामले का परीक्षण नहीं किया है, इसलिए मैं इसे काम करने की गारंटी नहीं दे सकता। हालांकि, मैं इस पर काम कर रहा हूं। संपादित करें: कभी नहीं, जाहिर है कि मेरा कार्यान्वयन उस मामले को कवर करने के लिए काफी ठोस था। :) – Thomas

+0

@ थॉमस: यह शानदार ढंग से काम कर रहा है! आपको बहुत - बहुत धन्यवाद! स्नैपिंग विशेष रूप से जरूरी नहीं है, क्योंकि मैं 'min: 1, max: 3' का उपयोग करता हूं जो समान रूप से पदों को समान रूप से वितरित करता है। लेकिन अगर आप इसे महसूस करते हैं, तो इसे थोड़ा और अधिक बदलाव करने पर ध्यान न दें, और नया संस्करण पोस्ट करें। :) अब तक महान काम है। बहुत अच्छे! –

+0

लंबवत स्लाइडर के लिए कोड को थोड़ा, जोड़ा गया समर्थन दोहराया। – Thomas

3

क्या "असंगत" के साथ "स्नैप करने के लिए स्नैप" होगा (स्नैप मानों के असमान) न्यूनतम और अधिकतम मान वांछित प्रभाव देते हैं? मुझे पता है कि यह संभवतः एप्लिकेशन साइड वैल्यू रूपांतरण की ओर ले जाएगा क्योंकि यह शायद अब इस्तेमाल किए गए मानों का उपयोग करके प्राप्त नहीं किया जा सकता है, लेकिन अगर यह काम करता है तो यहां "हैक और स्लैश" समाधान है।

जो मैं सुझा रहा हूं वह न्यूनतम मूल्य निर्धारित करता है, कहें, 750. 1200 तक स्नैप मूल्य और अधिकतम मूल्य 4050 तक। इस प्रकार सबसे कम स्नैप न्यूनतम मूल्य से 450 अधिक है और स्लाइडर को बाएं सबसे ऊपर नहीं जाना चाहिए धार। अधिकतम मूल्य के लिए, यह 3 x 1200 + 450 = 4050 है। यहां उपयोग किए गए मान मनमानी हैं और उदाहरण के लिए केवल।

इसका परीक्षण नहीं किया गया है और मुझे पता नहीं है कि यह काम करता है और मुझे पता है कि यह वह नहीं है जिसे आप ढूंढ रहे थे, लेकिन सिर्फ एक विचार जो दिमाग में आया, जब मैंने jqueryui UI jqueryui पर jquery UI स्लाइडर कैसे काम करता है .com।

संपादित करें: इसे जाने नहीं दे सका और अब मुझे यह काम पता है कि यह स्लाइडर को स्लाइड के सिरों तक पहुंचने से रोकता है। स्लाइडर को एक छोर से होने पर या पेज लोड होने पर दूसरे को रोकने के लिए आपको केवल प्रारंभिक मान सेट करने की आवश्यकता है।

+0

मैं अपने सिर को लपेटने में असमर्थ हूं कि इन मूल्यों की आवश्यकता क्यों है (मैं इस पल में बहुत तेज नहीं हूं), लेकिन ये काम करने लगते हैं। उदाहरण के लिए मैंने न्यूनतम 300, अधिकतम 3 9 00, चरण 1200 भी कोशिश की, लेकिन इससे संभाल बाएं तरफ से बाहर निकल गई। हम्म, अजीब। हालांकि मैं 10 से विभाजित हूं, जो मूल रूप से वही है। और हालांकि मैं एक ऐसे समाधान की उम्मीद कर रहा था जहां मुझे चयनित मूल्य को बदलने की आवश्यकता नहीं थी, मैं अब इसका उपयोग करूंगा। धन्यवाद! –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^